summaryrefslogtreecommitdiffstats
path: root/t/t8007-cat-file-textconv.sh
blob: c8266f17f14af3c1af34661ccf9c039d04cfbe31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/bin/sh

test_description='git cat-file textconv support'

TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh

cat >helper <<'EOF'
#!/bin/sh
grep -q '^bin: ' "$1" || { echo "E: $1 is not \"binary\" file" 1>&2; exit 1; }
sed 's/^bin: /converted: /' "$1"
EOF
chmod +x helper

test_expect_success 'setup ' '
	echo "bin: test" >one.bin &&
	test_ln_s_add one.bin symlink.bin &&
	git add . &&
	GIT_AUTHOR_NAME=Number1 git commit -a -m First --date="2010-01-01 18:00:00" &&
	echo "bin: test version 2" >one.bin &&
	GIT_AUTHOR_NAME=Number2 git commit -a -m Second --date="2010-01-01 20:00:00"
'

test_expect_success 'usage: <bad rev>' '
	cat >expect <<-\EOF &&
	fatal: Not a valid object name HEAD2
	EOF
	test_must_fail git cat-file --textconv HEAD2 2>actual &&
	test_cmp expect actual
'

test_expect_success 'usage: <bad rev>:<bad path>' '
	cat >expect <<-\EOF &&
	fatal: invalid object name '\''HEAD2'\''.
	EOF
	test_must_fail git cat-file --textconv HEAD2:two.bin 2>actual &&
	test_cmp expect actual
'

test_expect_success 'usage: <rev>:<bad path>' '
	cat >expect <<-\EOF &&
	fatal: path '\''two.bin'\'' does not exist in '\''HEAD'\''
	EOF
	test_must_fail git cat-file --textconv HEAD:two.bin 2>actual &&
	test_cmp expect actual
'


test_expect_success 'usage: <rev> with no <path>' '
	cat >expect <<-\EOF &&
	fatal: <object>:<path> required, only <object> '\''HEAD'\'' given
	EOF
	test_must_fail git cat-file --textconv HEAD 2>actual &&
	test_cmp expect actual
'


test_expect_success 'usage: <bad rev>:<good (in HEAD) path>' '
	cat >expect <<-\EOF &&
	fatal: invalid object name '\''HEAD2'\''.
	EOF
	test_must_fail git cat-file --textconv HEAD2:one.bin 2>actual &&
	test_cmp expect actual
'

cat >expected <<EOF
bin: test version 2
EOF

test_expect_success 'no filter specified' '
	git cat-file --textconv :one.bin >result &&
	test_cmp expected result
'

test_expect_success 'setup textconv filters' '
	echo "*.bin diff=test" >.gitattributes &&
	git config diff.test.textconv ./helper &&
	git config diff.test.cachetextconv false
'

test_expect_success 'cat-file without --textconv' '
	git cat-file blob :one.bin >result &&
	test_cmp expected result
'

cat >expected <<EOF
bin: test
EOF

test_expect_success 'cat-file without --textconv on previous commit' '
	git cat-file -p HEAD^:one.bin >result &&
	test_cmp expected result
'

cat >expected <<EOF
converted: test version 2
EOF

test_expect_success 'cat-file --textconv on last commit' '
	git cat-file --textconv :one.bin >result &&
	test_cmp expected result
'

cat >expected <<EOF
converted: test
EOF

test_expect_success 'cat-file --textconv on previous commit' '
	git cat-file --textconv HEAD^:one.bin >result &&
	test_cmp expected result
'

test_expect_success 'cat-file without --textconv (symlink)' '
	printf "%s" "one.bin" >expected &&
	git cat-file blob :symlink.bin >result &&
	test_cmp expected result
'


test_expect_success 'cat-file --textconv on index (symlink)' '
	git cat-file --textconv :symlink.bin >result &&
	test_cmp expected result
'

test_expect_success 'cat-file --textconv on HEAD (symlink)' '
	git cat-file --textconv HEAD:symlink.bin >result &&
	test_cmp expected result
'

test_done