]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t5615-partial-clone: add test for fetch --refetch
authorRobert Coup <robert@coup.net.nz>
Mon, 28 Mar 2022 14:02:09 +0000 (14:02 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 28 Mar 2022 17:25:52 +0000 (10:25 -0700)
Add a test for doing a refetch to apply a changed partial clone filter
under protocol v0 and v2.

Signed-off-by: Robert Coup <robert@coup.net.nz>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t5616-partial-clone.sh

index 34469b6ac10fef6dac4fb161f5377a8f47a6dd98..87ebf4b0b1c8a818ca78eca02be8b6f4820f2f64 100755 (executable)
@@ -166,6 +166,56 @@ test_expect_success 'manual prefetch of missing objects' '
        test_line_count = 0 observed.oids
 '
 
+# create new commits in "src" repo to establish a history on file.4.txt
+# and push to "srv.bare".
+test_expect_success 'push new commits to server for file.4.txt' '
+       for x in a b c d e f
+       do
+               echo "Mod file.4.txt $x" >src/file.4.txt &&
+               if list_contains "a,b" "$x"; then
+                       printf "%10000s" X >>src/file.4.txt
+               fi &&
+               if list_contains "c,d" "$x"; then
+                       printf "%20000s" X >>src/file.4.txt
+               fi &&
+               git -C src add file.4.txt &&
+               git -C src commit -m "mod $x" || return 1
+       done &&
+       git -C src push -u srv main
+'
+
+# Do partial fetch to fetch smaller files; then verify that without --refetch
+# applying a new filter does not refetch missing large objects. Then use
+# --refetch to apply the new filter on existing commits. Test it under both
+# protocol v2 & v0.
+test_expect_success 'apply a different filter using --refetch' '
+       git -C pc1 fetch --filter=blob:limit=999 origin &&
+       git -C pc1 rev-list --quiet --objects --missing=print \
+               main..origin/main >observed &&
+       test_line_count = 4 observed &&
+
+       git -C pc1 fetch --filter=blob:limit=19999 --refetch origin &&
+       git -C pc1 rev-list --quiet --objects --missing=print \
+               main..origin/main >observed &&
+       test_line_count = 2 observed &&
+
+       git -c protocol.version=0 -C pc1 fetch --filter=blob:limit=29999 \
+               --refetch origin &&
+       git -C pc1 rev-list --quiet --objects --missing=print \
+               main..origin/main >observed &&
+       test_line_count = 0 observed
+'
+
+test_expect_success 'fetch --refetch works with a shallow clone' '
+       git clone --no-checkout --depth=1 --filter=blob:none "file://$(pwd)/srv.bare" pc1s &&
+       git -C pc1s rev-list --objects --missing=print HEAD >observed &&
+       test_line_count = 6 observed &&
+
+       GIT_TRACE=1 git -C pc1s fetch --filter=blob:limit=999 --refetch origin &&
+       git -C pc1s rev-list --objects --missing=print HEAD >observed &&
+       test_line_count = 6 observed
+'
+
 test_expect_success 'partial clone with transfer.fsckobjects=1 works with submodules' '
        test_create_repo submodule &&
        test_commit -C submodule mycommit &&
@@ -225,7 +275,7 @@ test_expect_success 'use fsck before and after manually fetching a missing subtr
 
        # Auto-fetch all remaining trees and blobs with --missing=error
        git -C dst rev-list --missing=error --objects main >fetched_objects &&
-       test_line_count = 70 fetched_objects &&
+       test_line_count = 88 fetched_objects &&
 
        awk -f print_1.awk fetched_objects |
        xargs -n1 git -C dst cat-file -t >fetched_types &&