1#!/bin/sh
2
3test_description='git cat-file textconv support'
4. ./test-lib.sh
5
6cat >helper <<'EOF'
7#!/bin/sh
8grep -q '^bin: ' "$1" || { echo "E: $1 is not \"binary\" file" 1>&2; exit 1; }
9sed 's/^bin: /converted: /' "$1"
10EOF
11chmod +x helper
12
13test_expect_success 'setup ' '
14 echo "bin: test" >one.bin &&
15 git add . &&
16 GIT_AUTHOR_NAME=Number1 git commit -a -m First --date="2010-01-01 18:00:00" &&
17 echo "bin: test version 2" >one.bin &&
18 GIT_AUTHOR_NAME=Number2 git commit -a -m Second --date="2010-01-01 20:00:00"
19'
20
21cat >expected <<EOF
22fatal: git cat-file --textconv: unable to run textconv on :one.bin
23EOF
24
25test_expect_success 'no filter specified' '
26 git cat-file --textconv :one.bin 2>result
27 test_cmp expected result
28'
29
30test_expect_success 'setup textconv filters' '
31 echo "*.bin diff=test" >.gitattributes &&
32 git config diff.test.textconv ./helper &&
33 git config diff.test.cachetextconv false
34'
35
36cat >expected <<EOF
37bin: test version 2
38EOF
39
40test_expect_success 'cat-file without --textconv' '
41 git cat-file blob :one.bin >result &&
42 test_cmp expected result
43'
44
45cat >expected <<EOF
46bin: test
47EOF
48
49test_expect_success 'cat-file without --textconv on previous commit' '
50 git cat-file -p HEAD^:one.bin >result &&
51 test_cmp expected result
52'
53
54cat >expected <<EOF
55converted: test version 2
56EOF
57
58test_expect_success 'cat-file --textconv on last commit' '
59 git cat-file --textconv :one.bin >result &&
60 test_cmp expected result
61'
62
63cat >expected <<EOF
64converted: test
65EOF
66
67test_expect_success 'cat-file --textconv on previous commit' '
68 git cat-file --textconv HEAD^:one.bin >result &&
69 test_cmp expected result
70'
71test_done