aboutsummaryrefslogtreecommitdiff
path: root/t/t4067-diff-partial-clone.sh
diff options
context:
space:
mode:
Diffstat (limited to 't/t4067-diff-partial-clone.sh')
-rwxr-xr-xt/t4067-diff-partial-clone.sh66
1 files changed, 66 insertions, 0 deletions
diff --git a/t/t4067-diff-partial-clone.sh b/t/t4067-diff-partial-clone.sh
index 581250dd2d..30813109ac 100755
--- a/t/t4067-diff-partial-clone.sh
+++ b/t/t4067-diff-partial-clone.sh
@@ -132,6 +132,72 @@ test_expect_success 'diff with rename detection batches blobs' '
test_line_count = 1 done_lines
'
+test_expect_success 'diff succeeds even if prefetch triggered by break-rewrites' '
+ test_when_finished "rm -rf server client trace" &&
+
+ test_create_repo server &&
+ echo xyz >server/foo &&
+ mkdir server/bar &&
+ test_seq -f "line %d" 1 100 >server/bar/baz &&
+ git -C server add -A &&
+ git -C server commit -m x &&
+
+ echo xyzz >server/foo &&
+ test_seq -f "line %d" 90 190 >server/bar/baz &&
+ git -C server add -A &&
+ git -C server commit -m x &&
+
+ test_config -C server uploadpack.allowfilter 1 &&
+ test_config -C server uploadpack.allowanysha1inwant 1 &&
+ git clone --filter=blob:limit=0 "file://$(pwd)/server" client &&
+
+ # Fetch bar/baz without fetching foo.
+ # Foo will be lazily fetched during break rewrites detection.
+ git -C client checkout HEAD~1 bar &&
+
+ # Ensure baz in the working tree is different from baz in HEAD~1.
+ # We need baz to trigger break-rewrites detection.
+ git -C client reset --hard HEAD &&
+
+ # break-rewrites detction in reset.
+ git -C client reset HEAD~1
+'
+
+test_expect_success 'diff succeeds even if entries are removed from queue' '
+ test_when_finished "rm -rf server client trace" &&
+
+ test_create_repo server &&
+ for l in a c e g i p
+ do
+ echo $l >server/$l &&
+ git -C server add $l || return 1
+ done &&
+ git -C server commit -m x &&
+
+ for l in a e i
+ do
+ git -C server rm $l || return 1
+ done &&
+
+ for l in b d f i
+ do
+ echo $l$l >server/$l &&
+ git -C server add $l || return 1
+ done &&
+ git -C server commit -a -m x &&
+
+ test_config -C server uploadpack.allowfilter 1 &&
+ test_config -C server uploadpack.allowanysha1inwant 1 &&
+ git clone --filter=blob:limit=0 "file://$(pwd)/server" client &&
+
+ for file in $(ls client)
+ do
+ cat client/$file >$file &&
+ mv $file client/$file || return 1
+ done &&
+ git -C client diff --name-only --relative HEAD^
+'
+
test_expect_success 'diff does not fetch anything if inexact rename detection is not needed' '
test_when_finished "rm -rf server client trace" &&