summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2016-08-10 11:55:28 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2016-08-10 11:55:28 -0700
commitcee6c5b47bfa5d20fdf504fd61d200c0ee5eb777 (patch)
tree5c360d8309d55bd393234f25f2740cd2a3209940 /t
parentMerge branch 'pm/build-persistent-https-with-recent-go' into maint (diff)
parentdiff: do not reuse worktree files that need "clean" conversion (diff)
downloadtgif-cee6c5b47bfa5d20fdf504fd61d200c0ee5eb777.tar.xz
Merge branch 'jk/diff-do-not-reuse-wtf-needs-cleaning' into maint
There is an optimization used in "git diff $treeA $treeB" to borrow an already checked-out copy in the working tree when it is known to be the same as the blob being compared, expecting that open/mmap of such a file is faster than reading it from the object store, which involves inflating and applying delta. This however kicked in even when the checked-out copy needs to go through the convert-to-git conversion (including the clean filter), which defeats the whole point of the optimization. The optimization has been disabled when the conversion is necessary. * jk/diff-do-not-reuse-wtf-needs-cleaning: diff: do not reuse worktree files that need "clean" conversion
Diffstat (limited to 't')
-rwxr-xr-xt/t0021-conversion.sh11
1 files changed, 11 insertions, 0 deletions
diff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh
index 7bac2bcf26..e799e59544 100755
--- a/t/t0021-conversion.sh
+++ b/t/t0021-conversion.sh
@@ -268,4 +268,15 @@ test_expect_success 'disable filter with empty override' '
test_must_be_empty err
'
+test_expect_success 'diff does not reuse worktree files that need cleaning' '
+ test_config filter.counter.clean "echo . >>count; sed s/^/clean:/" &&
+ echo "file filter=counter" >.gitattributes &&
+ test_commit one file &&
+ test_commit two file &&
+
+ >count &&
+ git diff-tree -p HEAD &&
+ test_line_count = 0 count
+'
+
test_done