On Mon, Mar 28 2022, Robert Coup via GitGitGadget wrote: > From: Robert Coup <robert@xxxxxxxxxxx> > > 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@xxxxxxxxxxx> > --- > t/t5616-partial-clone.sh | 52 +++++++++++++++++++++++++++++++++++++++- > 1 file changed, 51 insertions(+), 1 deletion(-) > > diff --git a/t/t5616-partial-clone.sh b/t/t5616-partial-clone.sh > index 34469b6ac10..87ebf4b0b1c 100755 > --- a/t/t5616-partial-clone.sh > +++ b/t/t5616-partial-clone.sh > @@ -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 && Is 19999 just "arbitrary big number" here? > + 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 Does this test_line_count *really* want to be = 0, or does this mean test_must_be_empty? I.e. are we expecting content here, just not ending in a \n, or nothing at all? > +' > + > +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 && Why the GIT_TRACE=1? Seems to not be used.