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
|