You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
2.5 KiB
119 lines
2.5 KiB
16 years ago
|
#!/bin/sh
|
||
|
|
||
|
test_description='diff.*.textconv tests'
|
||
|
. ./test-lib.sh
|
||
|
|
||
|
find_diff() {
|
||
|
sed '1,/^index /d' | sed '/^-- $/,$d'
|
||
|
}
|
||
|
|
||
|
cat >expect.binary <<'EOF'
|
||
|
Binary files a/file and b/file differ
|
||
|
EOF
|
||
|
|
||
|
cat >expect.text <<'EOF'
|
||
|
--- a/file
|
||
|
+++ b/file
|
||
|
@@ -1 +1,2 @@
|
||
|
0
|
||
|
+1
|
||
|
EOF
|
||
|
|
||
|
cat >hexdump <<'EOF'
|
||
|
#!/bin/sh
|
||
|
perl -e '$/ = undef; $_ = <>; s/./ord($&)/ge; print $_' "$1"
|
||
|
EOF
|
||
|
chmod +x hexdump
|
||
|
|
||
|
test_expect_success 'setup binary file with history' '
|
||
|
printf "\\0\\n" >file &&
|
||
|
git add file &&
|
||
|
git commit -m one &&
|
||
|
printf "\\1\\n" >>file &&
|
||
|
git add file &&
|
||
|
git commit -m two
|
||
|
'
|
||
|
|
||
|
test_expect_success 'file is considered binary by porcelain' '
|
||
|
git diff HEAD^ HEAD >diff &&
|
||
|
find_diff <diff >actual &&
|
||
|
test_cmp expect.binary actual
|
||
|
'
|
||
|
|
||
|
test_expect_success 'file is considered binary by plumbing' '
|
||
|
git diff-tree -p HEAD^ HEAD >diff &&
|
||
|
find_diff <diff >actual &&
|
||
|
test_cmp expect.binary actual
|
||
|
'
|
||
|
|
||
|
test_expect_success 'setup textconv filters' '
|
||
|
echo file diff=foo >.gitattributes &&
|
||
|
git config diff.foo.textconv "$PWD"/hexdump &&
|
||
|
git config diff.fail.textconv false
|
||
|
'
|
||
|
|
||
|
test_expect_failure 'diff produces text' '
|
||
|
git diff HEAD^ HEAD >diff &&
|
||
|
find_diff <diff >actual &&
|
||
|
test_cmp expect.text actual
|
||
|
'
|
||
|
|
||
|
test_expect_success 'diff-tree produces binary' '
|
||
|
git diff-tree -p HEAD^ HEAD >diff &&
|
||
|
find_diff <diff >actual &&
|
||
|
test_cmp expect.binary actual
|
||
|
'
|
||
|
|
||
|
test_expect_failure 'log produces text' '
|
||
|
git log -1 -p >log &&
|
||
|
find_diff <log >actual &&
|
||
|
test_cmp expect.text actual
|
||
|
'
|
||
|
|
||
|
test_expect_failure 'format-patch produces binary' '
|
||
|
git format-patch --no-binary --stdout HEAD^ >patch &&
|
||
|
find_diff <patch >actual &&
|
||
|
test_cmp expect.binary actual
|
||
|
'
|
||
|
|
||
|
cat >expect.stat <<'EOF'
|
||
|
file | Bin 2 -> 4 bytes
|
||
|
1 files changed, 0 insertions(+), 0 deletions(-)
|
||
|
EOF
|
||
|
test_expect_failure 'diffstat does not run textconv' '
|
||
|
echo file diff=fail >.gitattributes &&
|
||
|
git diff --stat HEAD^ HEAD >actual &&
|
||
|
test_cmp expect.stat actual
|
||
|
'
|
||
|
# restore working setup
|
||
|
echo file diff=foo >.gitattributes
|
||
|
|
||
|
cat >expect.typechange <<'EOF'
|
||
|
--- a/file
|
||
|
+++ /dev/null
|
||
|
@@ -1,2 +0,0 @@
|
||
|
-0
|
||
|
-1
|
||
|
diff --git a/file b/file
|
||
|
new file mode 120000
|
||
|
index ad8b3d2..67be421
|
||
|
--- /dev/null
|
||
|
+++ b/file
|
||
|
@@ -0,0 +1 @@
|
||
|
+frotz
|
||
|
\ No newline at end of file
|
||
|
EOF
|
||
|
# make a symlink the hard way that works on symlink-challenged file systems
|
||
|
test_expect_failure 'textconv does not act on symlinks' '
|
||
|
echo -n frotz > file &&
|
||
|
git add file &&
|
||
|
git ls-files -s | sed -e s/100644/120000/ |
|
||
|
git update-index --index-info &&
|
||
|
git commit -m typechange &&
|
||
|
git show >diff &&
|
||
|
find_diff <diff >actual &&
|
||
|
test_cmp expect.typechange actual
|
||
|
'
|
||
|
|
||
|
test_done
|