From: René Scharfe Date: Tue, 05 May 2026 20:34:37 GMT Subject: Re: [Bug] fetch --deepen truncates history in v2.54.0 Message-ID: In-Reply-To: <2afd4a28a9a542f8baeab488cb0801d6b98adb0a.camel@t-2.net> On 5/5/26 9:27 PM, Samo Pogačnik wrote: > > Hi, thanks for pointing out this edge case. Would you care to check the > following change (the provided test is also a bit modified): There's spurious wrapping in the patch, but the changes look good to me. Care to send them with a commit message and sign-off? René > diff --git a/shallow.c b/shallow.c > index a156006d88..ec95653132 100644 > --- a/shallow.c > +++ b/shallow.c > @@ -245,7 +245,11 @@ struct commit_list *get_shallow_commits(struct object_array > *heads, > int depth, int shallow_flag, int > not_shallow_flag) > { > if (shallows && deepen_relative) { > - depth += get_shallows_depth(heads, shallows); > + int cur_shallow_depth = get_shallows_depth(heads, shallows); > + if (cur_shallow_depth) > + depth += cur_shallow_depth; > + else > + return NULL; Nice. get_shallows_depth() returns 0 on full clones; translating it to an empty list of shallow commits makes sense. > } > return get_shallows_or_depth(heads, NULL, NULL, > depth, shallow_flag, not_shallow_flag); > diff --git a/t/t5537-fetch-shallow.sh b/t/t5537-fetch-shallow.sh > index 6588ce6226..9982dd2aa6 100755 > --- a/t/t5537-fetch-shallow.sh > +++ b/t/t5537-fetch-shallow.sh > @@ -251,6 +251,16 @@ test_expect_success '.git/shallow is edited by repack' ' > origin "+refs/heads/*:refs/remotes/origin/*" > ' > > +test_expect_success 'fetch --deepen does not truncate' ' > + git clone --no-local .git full-clone && > + git -C full-clone rev-parse --is-shallow-repository >expect && > + git -C full-clone log --oneline >>expect && > + git -C full-clone fetch --deepen=1 && > + git -C full-clone rev-parse --is-shallow-repository >actual && > + git -C full-clone log --oneline >>actual && Using the exact same commands to prepare expect and actual creates a pleasant symmetry. > + test_cmp expect actual > +' > + > . "$TEST_DIRECTORY"/lib-httpd.sh > start_httpd >