mirror of
https://github.com/git/git
synced 2024-10-02 14:45:21 +00:00
150115aded
When the index says that the file in the work tree that corresponds to the blob object that is used for comparison is known to be unchanged, "diff" reads from the file and applies convert_to_git(), instead of inflating the object, to feed the internal diff engine with, because an earlier benchnark found that it tends to be faster to use this optimization. However, the index can lie when the path is marked as assume-unchanged. Disable the optimization for such paths. Signed-off-by: Junio C Hamano <gitster@pobox.com>
119 lines
2.4 KiB
Bash
Executable file
119 lines
2.4 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
test_description='external diff interface test'
|
|
|
|
. ./test-lib.sh
|
|
|
|
_z40=0000000000000000000000000000000000000000
|
|
|
|
test_expect_success setup '
|
|
|
|
test_tick &&
|
|
echo initial >file &&
|
|
git add file &&
|
|
git commit -m initial &&
|
|
|
|
test_tick &&
|
|
echo second >file &&
|
|
git add file &&
|
|
git commit -m second &&
|
|
|
|
test_tick &&
|
|
echo third >file
|
|
'
|
|
|
|
test_expect_success 'GIT_EXTERNAL_DIFF environment' '
|
|
|
|
GIT_EXTERNAL_DIFF=echo git diff | {
|
|
read path oldfile oldhex oldmode newfile newhex newmode &&
|
|
test "z$path" = zfile &&
|
|
test "z$oldmode" = z100644 &&
|
|
test "z$newhex" = "z$_z40" &&
|
|
test "z$newmode" = z100644 &&
|
|
oh=$(git rev-parse --verify HEAD:file) &&
|
|
test "z$oh" = "z$oldhex"
|
|
}
|
|
|
|
'
|
|
|
|
test_expect_success 'GIT_EXTERNAL_DIFF environment should apply only to diff' '
|
|
|
|
GIT_EXTERNAL_DIFF=echo git log -p -1 HEAD |
|
|
grep "^diff --git a/file b/file"
|
|
|
|
'
|
|
|
|
test_expect_success 'diff attribute' '
|
|
|
|
git config diff.parrot.command echo &&
|
|
|
|
echo >.gitattributes "file diff=parrot" &&
|
|
|
|
git diff | {
|
|
read path oldfile oldhex oldmode newfile newhex newmode &&
|
|
test "z$path" = zfile &&
|
|
test "z$oldmode" = z100644 &&
|
|
test "z$newhex" = "z$_z40" &&
|
|
test "z$newmode" = z100644 &&
|
|
oh=$(git rev-parse --verify HEAD:file) &&
|
|
test "z$oh" = "z$oldhex"
|
|
}
|
|
|
|
'
|
|
|
|
test_expect_success 'diff attribute should apply only to diff' '
|
|
|
|
git log -p -1 HEAD |
|
|
grep "^diff --git a/file b/file"
|
|
|
|
'
|
|
|
|
test_expect_success 'diff attribute' '
|
|
|
|
git config --unset diff.parrot.command &&
|
|
git config diff.color.command echo &&
|
|
|
|
echo >.gitattributes "file diff=color" &&
|
|
|
|
git diff | {
|
|
read path oldfile oldhex oldmode newfile newhex newmode &&
|
|
test "z$path" = zfile &&
|
|
test "z$oldmode" = z100644 &&
|
|
test "z$newhex" = "z$_z40" &&
|
|
test "z$newmode" = z100644 &&
|
|
oh=$(git rev-parse --verify HEAD:file) &&
|
|
test "z$oh" = "z$oldhex"
|
|
}
|
|
|
|
'
|
|
|
|
test_expect_success 'diff attribute should apply only to diff' '
|
|
|
|
git log -p -1 HEAD |
|
|
grep "^diff --git a/file b/file"
|
|
|
|
'
|
|
|
|
test_expect_success 'no diff with -diff' '
|
|
echo >.gitattributes "file -diff" &&
|
|
git diff | grep Binary
|
|
'
|
|
|
|
echo NULZbetweenZwords | perl -pe 'y/Z/\000/' > file
|
|
|
|
test_expect_success 'force diff with "diff"' '
|
|
echo >.gitattributes "file diff" &&
|
|
git diff >actual &&
|
|
test_cmp ../t4020/diff.NUL actual
|
|
'
|
|
|
|
test_expect_success 'diff --cached' '
|
|
git add file &&
|
|
git update-index --assume-unchanged file &&
|
|
echo second >file &&
|
|
git diff --cached >actual &&
|
|
test_cmp ../t4020/diff.NUL actual
|
|
'
|
|
|
|
test_done
|