mirror of
https://github.com/git/git.git
synced 2026-04-11 01:10:11 +02:00
Merge branch 'jk/diff-convfilter-test-fix'
* jk/diff-convfilter-test-fix: Avoid using non-portable `echo -n` in tests. add userdiff textconv tests document the diff driver textconv feature diff: add missing static declaration Conflicts: Documentation/gitattributes.txt
This commit is contained in:
@@ -13,7 +13,7 @@ file if core.symlinks is false.'
|
||||
test_expect_success \
|
||||
'preparation' '
|
||||
git config core.symlinks false &&
|
||||
l=$(echo -n file | git hash-object -t blob -w --stdin) &&
|
||||
l=$(printf file | git hash-object -t blob -w --stdin) &&
|
||||
echo "120000 $l symlink" | git update-index --index-info'
|
||||
|
||||
test_expect_success \
|
||||
|
||||
@@ -13,12 +13,12 @@ even if a plain file is in the working tree if core.symlinks is false.'
|
||||
test_expect_success \
|
||||
'preparation' '
|
||||
git config core.symlinks false &&
|
||||
l=$(echo -n file | git hash-object -t blob -w --stdin) &&
|
||||
l=$(printf file | git hash-object -t blob -w --stdin) &&
|
||||
echo "120000 $l symlink" | git update-index --index-info'
|
||||
|
||||
test_expect_success \
|
||||
'modify the symbolic link' '
|
||||
echo -n new-file > symlink &&
|
||||
printf new-file > symlink &&
|
||||
git update-index symlink'
|
||||
|
||||
test_expect_success \
|
||||
|
||||
118
t/t4030-diff-textconv.sh
Executable file
118
t/t4030-diff-textconv.sh
Executable file
@@ -0,0 +1,118 @@
|
||||
#!/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' '
|
||||
printf 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
|
||||
@@ -18,11 +18,11 @@ git add file &&
|
||||
git commit -m initial &&
|
||||
git branch b-symlink &&
|
||||
git branch b-file &&
|
||||
l=$(echo -n file | git hash-object -t blob -w --stdin) &&
|
||||
l=$(printf file | git hash-object -t blob -w --stdin) &&
|
||||
echo "120000 $l symlink" | git update-index --index-info &&
|
||||
git commit -m master &&
|
||||
git checkout b-symlink &&
|
||||
l=$(echo -n file-different | git hash-object -t blob -w --stdin) &&
|
||||
l=$(printf file-different | git hash-object -t blob -w --stdin) &&
|
||||
echo "120000 $l symlink" | git update-index --index-info &&
|
||||
git commit -m b-symlink &&
|
||||
git checkout b-file &&
|
||||
|
||||
@@ -424,7 +424,7 @@ cd "$WORKDIR"
|
||||
test_expect_success 'cvs update (-p)' '
|
||||
touch really-empty &&
|
||||
echo Line 1 > no-lf &&
|
||||
echo -n Line 2 >> no-lf &&
|
||||
printf "Line 2" >> no-lf &&
|
||||
git add really-empty no-lf &&
|
||||
git commit -q -m "Update -p test" &&
|
||||
git push gitcvs.git >/dev/null &&
|
||||
|
||||
Reference in New Issue
Block a user