Clément Poulain | 34bb92e | 2010-06-09 19:02:09 +0200 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | test_description='git cat-file textconv support' |
Ævar Arnfjörð Bjarmason | 27472b5 | 2022-07-01 12:42:59 +0200 | [diff] [blame] | 4 | |
| 5 | TEST_PASSES_SANITIZE_LEAK=true |
Clément Poulain | 34bb92e | 2010-06-09 19:02:09 +0200 | [diff] [blame] | 6 | . ./test-lib.sh |
| 7 | |
| 8 | cat >helper <<'EOF' |
| 9 | #!/bin/sh |
Kirill Smelkov | 6517cf7 | 2010-09-29 15:35:22 +0400 | [diff] [blame] | 10 | grep -q '^bin: ' "$1" || { echo "E: $1 is not \"binary\" file" 1>&2; exit 1; } |
| 11 | sed 's/^bin: /converted: /' "$1" |
Clément Poulain | 34bb92e | 2010-06-09 19:02:09 +0200 | [diff] [blame] | 12 | EOF |
| 13 | chmod +x helper |
| 14 | |
| 15 | test_expect_success 'setup ' ' |
Kirill Smelkov | 6517cf7 | 2010-09-29 15:35:22 +0400 | [diff] [blame] | 16 | echo "bin: test" >one.bin && |
Johannes Sixt | 889c6f0 | 2013-06-07 22:53:28 +0200 | [diff] [blame] | 17 | test_ln_s_add one.bin symlink.bin && |
Clément Poulain | 34bb92e | 2010-06-09 19:02:09 +0200 | [diff] [blame] | 18 | git add . && |
| 19 | GIT_AUTHOR_NAME=Number1 git commit -a -m First --date="2010-01-01 18:00:00" && |
Kirill Smelkov | 6517cf7 | 2010-09-29 15:35:22 +0400 | [diff] [blame] | 20 | echo "bin: test version 2" >one.bin && |
Clément Poulain | 34bb92e | 2010-06-09 19:02:09 +0200 | [diff] [blame] | 21 | GIT_AUTHOR_NAME=Number2 git commit -a -m Second --date="2010-01-01 20:00:00" |
| 22 | ' |
| 23 | |
Ævar Arnfjörð Bjarmason | 68c69f9 | 2021-12-28 14:28:42 +0100 | [diff] [blame] | 24 | test_expect_success 'usage: <bad rev>' ' |
| 25 | cat >expect <<-\EOF && |
| 26 | fatal: Not a valid object name HEAD2 |
| 27 | EOF |
| 28 | test_must_fail git cat-file --textconv HEAD2 2>actual && |
| 29 | test_cmp expect actual |
| 30 | ' |
| 31 | |
| 32 | test_expect_success 'usage: <bad rev>:<bad path>' ' |
| 33 | cat >expect <<-\EOF && |
Ævar Arnfjörð Bjarmason | 245b948 | 2021-12-28 14:28:50 +0100 | [diff] [blame] | 34 | fatal: invalid object name '\''HEAD2'\''. |
Ævar Arnfjörð Bjarmason | 68c69f9 | 2021-12-28 14:28:42 +0100 | [diff] [blame] | 35 | EOF |
| 36 | test_must_fail git cat-file --textconv HEAD2:two.bin 2>actual && |
| 37 | test_cmp expect actual |
| 38 | ' |
| 39 | |
| 40 | test_expect_success 'usage: <rev>:<bad path>' ' |
| 41 | cat >expect <<-\EOF && |
Ævar Arnfjörð Bjarmason | 245b948 | 2021-12-28 14:28:50 +0100 | [diff] [blame] | 42 | fatal: path '\''two.bin'\'' does not exist in '\''HEAD'\'' |
Ævar Arnfjörð Bjarmason | 68c69f9 | 2021-12-28 14:28:42 +0100 | [diff] [blame] | 43 | EOF |
| 44 | test_must_fail git cat-file --textconv HEAD:two.bin 2>actual && |
| 45 | test_cmp expect actual |
| 46 | ' |
| 47 | |
| 48 | |
| 49 | test_expect_success 'usage: <rev> with no <path>' ' |
| 50 | cat >expect <<-\EOF && |
Ævar Arnfjörð Bjarmason | 245b948 | 2021-12-28 14:28:50 +0100 | [diff] [blame] | 51 | fatal: <object>:<path> required, only <object> '\''HEAD'\'' given |
Ævar Arnfjörð Bjarmason | 68c69f9 | 2021-12-28 14:28:42 +0100 | [diff] [blame] | 52 | EOF |
| 53 | test_must_fail git cat-file --textconv HEAD 2>actual && |
| 54 | test_cmp expect actual |
| 55 | ' |
| 56 | |
| 57 | |
| 58 | test_expect_success 'usage: <bad rev>:<good (in HEAD) path>' ' |
| 59 | cat >expect <<-\EOF && |
Ævar Arnfjörð Bjarmason | 245b948 | 2021-12-28 14:28:50 +0100 | [diff] [blame] | 60 | fatal: invalid object name '\''HEAD2'\''. |
Ævar Arnfjörð Bjarmason | 68c69f9 | 2021-12-28 14:28:42 +0100 | [diff] [blame] | 61 | EOF |
| 62 | test_must_fail git cat-file --textconv HEAD2:one.bin 2>actual && |
| 63 | test_cmp expect actual |
| 64 | ' |
| 65 | |
Clément Poulain | 34bb92e | 2010-06-09 19:02:09 +0200 | [diff] [blame] | 66 | cat >expected <<EOF |
Michael J Gruber | 3ac2161 | 2013-05-10 17:10:13 +0200 | [diff] [blame] | 67 | bin: test version 2 |
Clément Poulain | 34bb92e | 2010-06-09 19:02:09 +0200 | [diff] [blame] | 68 | EOF |
| 69 | |
| 70 | test_expect_success 'no filter specified' ' |
Michael J Gruber | 3ac2161 | 2013-05-10 17:10:13 +0200 | [diff] [blame] | 71 | git cat-file --textconv :one.bin >result && |
Clément Poulain | 34bb92e | 2010-06-09 19:02:09 +0200 | [diff] [blame] | 72 | test_cmp expected result |
| 73 | ' |
| 74 | |
| 75 | test_expect_success 'setup textconv filters' ' |
| 76 | echo "*.bin diff=test" >.gitattributes && |
| 77 | git config diff.test.textconv ./helper && |
| 78 | git config diff.test.cachetextconv false |
| 79 | ' |
| 80 | |
Clément Poulain | 34bb92e | 2010-06-09 19:02:09 +0200 | [diff] [blame] | 81 | test_expect_success 'cat-file without --textconv' ' |
| 82 | git cat-file blob :one.bin >result && |
| 83 | test_cmp expected result |
| 84 | ' |
| 85 | |
| 86 | cat >expected <<EOF |
Kirill Smelkov | 6517cf7 | 2010-09-29 15:35:22 +0400 | [diff] [blame] | 87 | bin: test |
Clément Poulain | 34bb92e | 2010-06-09 19:02:09 +0200 | [diff] [blame] | 88 | EOF |
| 89 | |
| 90 | test_expect_success 'cat-file without --textconv on previous commit' ' |
| 91 | git cat-file -p HEAD^:one.bin >result && |
| 92 | test_cmp expected result |
| 93 | ' |
| 94 | |
| 95 | cat >expected <<EOF |
| 96 | converted: test version 2 |
| 97 | EOF |
| 98 | |
| 99 | test_expect_success 'cat-file --textconv on last commit' ' |
| 100 | git cat-file --textconv :one.bin >result && |
| 101 | test_cmp expected result |
| 102 | ' |
| 103 | |
| 104 | cat >expected <<EOF |
| 105 | converted: test |
| 106 | EOF |
| 107 | |
| 108 | test_expect_success 'cat-file --textconv on previous commit' ' |
| 109 | git cat-file --textconv HEAD^:one.bin >result && |
| 110 | test_cmp expected result |
| 111 | ' |
Kirill Smelkov | ab3b7b9 | 2010-09-29 15:35:23 +0400 | [diff] [blame] | 112 | |
Johannes Sixt | 889c6f0 | 2013-06-07 22:53:28 +0200 | [diff] [blame] | 113 | test_expect_success 'cat-file without --textconv (symlink)' ' |
Michael J Gruber | 3ac2161 | 2013-05-10 17:10:13 +0200 | [diff] [blame] | 114 | printf "%s" "one.bin" >expected && |
Kirill Smelkov | ab3b7b9 | 2010-09-29 15:35:23 +0400 | [diff] [blame] | 115 | git cat-file blob :symlink.bin >result && |
Kirill Smelkov | ab3b7b9 | 2010-09-29 15:35:23 +0400 | [diff] [blame] | 116 | test_cmp expected result |
| 117 | ' |
| 118 | |
| 119 | |
Johannes Sixt | 889c6f0 | 2013-06-07 22:53:28 +0200 | [diff] [blame] | 120 | test_expect_success 'cat-file --textconv on index (symlink)' ' |
Michael J Gruber | 3ac2161 | 2013-05-10 17:10:13 +0200 | [diff] [blame] | 121 | git cat-file --textconv :symlink.bin >result && |
Kirill Smelkov | ab3b7b9 | 2010-09-29 15:35:23 +0400 | [diff] [blame] | 122 | test_cmp expected result |
| 123 | ' |
| 124 | |
Johannes Sixt | 889c6f0 | 2013-06-07 22:53:28 +0200 | [diff] [blame] | 125 | test_expect_success 'cat-file --textconv on HEAD (symlink)' ' |
Michael J Gruber | 3ac2161 | 2013-05-10 17:10:13 +0200 | [diff] [blame] | 126 | git cat-file --textconv HEAD:symlink.bin >result && |
Kirill Smelkov | ab3b7b9 | 2010-09-29 15:35:23 +0400 | [diff] [blame] | 127 | test_cmp expected result |
| 128 | ' |
| 129 | |
Clément Poulain | 34bb92e | 2010-06-09 19:02:09 +0200 | [diff] [blame] | 130 | test_done |