Hi, we have noticed a change in behaviour with commit 3f763ddf28d28fe63963991513c8db4045eabadc.
Here’s the steps to reproduce:
mkdir git-test-dir
cd git-test-dir
git init --bare
git remote add origin -- https://github.com/golang/go
git -c protocol.version=2 fetch -f --depth=1 origin 16afa6a740fac7442e94dcd2ec5ea4a4853e45dc:refs/dummy
git -c log.showsignature=false log --no-decorate -n1 --format="format:%H %ct %D" 16afa6a740fac7442e94dcd2ec5ea4a4853e45dc --
# Expected:
# 16afa6a740fac7442e94dcd2ec5ea4a4853e45dc 1734108730 grafted, tag: go1.24rc1, refs/dummy
# Tags are not fetch when using 2.48.1:
# 16afa6a740fac7442e94dcd2ec5ea4a4853e45dc 1734108730 grafted
---
git bisect revealed 3f763ddf28d28fe63963991513c8db4045eabadc as the culprit:
commit 3f763ddf28d28fe63963991513c8db4045eabadc
Author: Bence Ferdinandy
Date: Fri Nov 22 13:28:50 2024 +0100
fetch: set remote/HEAD if it does not exist
When cloning a repository remote/HEAD is created, but when the user
creates a repository with git init, and later adds a remote, remote/HEAD
is only created if the user explicitly runs a variant of "remote
set-head". Attempt to set remote/HEAD during fetch, if the user does not
have it already set. Silently ignore any errors.
Signed-off-by: Bence Ferdinandy bence@ferdinandy.com
Signed-off-by: Junio C Hamano gitster@pobox.com
Is this intended?
This was initially reported under https://github.com/zopencommunity/gitport/issues/146.threads / discuss / 62871
Tags are no longer fetched when fetching specific commit
Subject: Tags are no longer fetched when fetching specific commit
Re: Tags are no longer fetched when fetching specific commit
On Thu, Jan 30, 2025 at 03:49:20AM +0000, Igor Todorovski wrote:
Show 36 quoted lines
> Hi, we have noticed a change in behaviour with commit 3f763ddf28d28fe63963991513c8db4045eabadc. > > Here’s the steps to reproduce: > > mkdir git-test-dir > cd git-test-dir > git init --bare > git remote add origin -- https://github.com/golang/go > git -c protocol.version=2 fetch -f --depth=1 origin 16afa6a740fac7442e94dcd2ec5ea4a4853e45dc:refs/dummy > git -c log.showsignature=false log --no-decorate -n1 --format="format:%H %ct %D" 16afa6a740fac7442e94dcd2ec5ea4a4853e45dc -- > > # Expected: > # 16afa6a740fac7442e94dcd2ec5ea4a4853e45dc 1734108730 grafted, tag: go1.24rc1, refs/dummy > > # Tags are not fetch when using 2.48.1: > # 16afa6a740fac7442e94dcd2ec5ea4a4853e45dc 1734108730 grafted > > --- > > git bisect revealed 3f763ddf28d28fe63963991513c8db4045eabadc as the culprit: > > commit 3f763ddf28d28fe63963991513c8db4045eabadc > Author: Bence Ferdinandy > Date: Fri Nov 22 13:28:50 2024 +0100 > > fetch: set remote/HEAD if it does not exist > > When cloning a repository remote/HEAD is created, but when the user > creates a repository with git init, and later adds a remote, remote/HEAD > is only created if the user explicitly runs a variant of "remote > set-head". Attempt to set remote/HEAD during fetch, if the user does not > have it already set. Silently ignore any errors. > > Signed-off-by: Bence Ferdinandy bence@ferdinandy.com > Signed-off-by: Junio C Hamano gitster@pobox.com >
Thanks for the report and bisection recipe. I was able to bisect the same issue myself, and also found myself at 3f763ddf28 (fetch: set remote/HEAD if it does not exist, 2024-11-22).
> Is this intended?
I don't think this was intentional, though the commit's author Bence (CC'd) can confirm.
I suspect what's going on here is that in 3f763ddf28 and onwards we are explicitly adding "HEAD" to the list of ref_prefixes, which causes the server to respond only to the prefixes being asked for. In a pre-3f763ddf28 world, the ref_prefixes list would be empty (if invoked according to your script above), which allowed us to learn about any tags pointing at that commit.
One way to fix it is to move adding the "HEAD" prefix to above where we check
if (tags == TAGS_SET || tags == TAGS_DEFAULT)
, which would allow us to enter the inner-most conditional which guards us actually adding the refs/tags prefix to our list.
But I don't love that solution, and I think even that is incomplete since as of 6c915c3f85 (fetch: do not ask for HEAD unnecessarily, 2024-12-06) we only ask for "HEAD" if we have a remote in the first place.
I think the real culprit is that we can no longer hold the same assumption from e70a3030e7 (fetch: do not list refs if fetching only hashes, 2018-09-27), which is that we can avoid asking for refs/tags as an explicit prefix if we're (a) fetching literal hashes, (b) tag following wasn't requested, and (c) the fetch is done with protocol v2.
So I think the right fix would really be something like:
--- 8< ---
diff --git a/builtin/fetch.c b/builtin/fetch.c index fe2b26c74a..0e63621e6c 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -1770,9 +1770,8 @@ static int do_fetch(struct transport *transport, if (tags == TAGS_SET || tags == TAGS_DEFAULT) { must_list_refs = 1; - if (transport_ls_refs_options.ref_prefixes.nr) - strvec_push(&transport_ls_refs_options.ref_prefixes, - "refs/tags/"); + strvec_push(&transport_ls_refs_options.ref_prefixes, + "refs/tags/"); } if (uses_remote_tracking(transport, rs)) { --- >8 --- But I'm unfamiliar enough with this area that I'd appreciate comments from the authors of these various commits, all of whom have been CC'd. Does this seem right to you, or am I totally down the wrong path? Thanks, Taylor
Re: Tags are no longer fetched when fetching specific commit
On Thu Feb 13, 2025 at 23:38, Taylor Blau <me@ttaylorr.com> wrote:
Show 97 quoted lines
> On Thu, Jan 30, 2025 at 03:49:20AM +0000, Igor Todorovski wrote:
>> Hi, we have noticed a change in behaviour with commit 3f763ddf28d28fe63963991513c8db4045eabadc.
>>
>> Here’s the steps to reproduce:
>>
>> mkdir git-test-dir
>> cd git-test-dir
>> git init --bare
>> git remote add origin -- https://github.com/golang/go
>> git -c protocol.version=2 fetch -f --depth=1 origin 16afa6a740fac7442e94dcd2ec5ea4a4853e45dc:refs/dummy
>> git -c log.showsignature=false log --no-decorate -n1 --format="format:%H %ct %D" 16afa6a740fac7442e94dcd2ec5ea4a4853e45dc --
>>
>> # Expected:
>> # 16afa6a740fac7442e94dcd2ec5ea4a4853e45dc 1734108730 grafted, tag: go1.24rc1, refs/dummy
>>
>> # Tags are not fetch when using 2.48.1:
>> # 16afa6a740fac7442e94dcd2ec5ea4a4853e45dc 1734108730 grafted
>>
>> ---
>>
>> git bisect revealed 3f763ddf28d28fe63963991513c8db4045eabadc as the culprit:
>>
>> commit 3f763ddf28d28fe63963991513c8db4045eabadc
>> Author: Bence Ferdinandy
>> Date: Fri Nov 22 13:28:50 2024 +0100
>>
>> fetch: set remote/HEAD if it does not exist
>>
>> When cloning a repository remote/HEAD is created, but when the user
>> creates a repository with git init, and later adds a remote, remote/HEAD
>> is only created if the user explicitly runs a variant of "remote
>> set-head". Attempt to set remote/HEAD during fetch, if the user does not
>> have it already set. Silently ignore any errors.
>>
>> Signed-off-by: Bence Ferdinandy bence@ferdinandy.com
>> Signed-off-by: Junio C Hamano gitster@pobox.com
>>
>
> Thanks for the report and bisection recipe. I was able to bisect the
> same issue myself, and also found myself at 3f763ddf28 (fetch: set
> remote/HEAD if it does not exist, 2024-11-22).
>
>> Is this intended?
>
> I don't think this was intentional, though the commit's author Bence
> (CC'd) can confirm.
>
> I suspect what's going on here is that in 3f763ddf28 and onwards we are
> explicitly adding "HEAD" to the list of ref_prefixes, which causes the
> server to respond only to the prefixes being asked for. In a
> pre-3f763ddf28 world, the ref_prefixes list would be empty (if invoked
> according to your script above), which allowed us to learn about any
> tags pointing at that commit.
>
> One way to fix it is to move adding the "HEAD" prefix to above where we
> check
>
> if (tags == TAGS_SET || tags == TAGS_DEFAULT)
>
> , which would allow us to enter the inner-most conditional which guards
> us actually adding the refs/tags prefix to our list.
>
> But I don't love that solution, and I think even that is incomplete
> since as of 6c915c3f85 (fetch: do not ask for HEAD unnecessarily,
> 2024-12-06) we only ask for "HEAD" if we have a remote in the first
> place.
>
> I think the real culprit is that we can no longer hold the same
> assumption from e70a3030e7 (fetch: do not list refs if fetching only
> hashes, 2018-09-27), which is that we can avoid asking for refs/tags as
> an explicit prefix if we're (a) fetching literal hashes, (b) tag
> following wasn't requested, and (c) the fetch is done with protocol v2.
>
> So I think the right fix would really be something like:
>
> --- 8< ---
> diff --git a/builtin/fetch.c b/builtin/fetch.c
> index fe2b26c74a..0e63621e6c 100644
> --- a/builtin/fetch.c
> +++ b/builtin/fetch.c
> @@ -1770,9 +1770,8 @@ static int do_fetch(struct transport *transport,
>
> if (tags == TAGS_SET || tags == TAGS_DEFAULT) {
> must_list_refs = 1;
> - if (transport_ls_refs_options.ref_prefixes.nr)
> - strvec_push(&transport_ls_refs_options.ref_prefixes,
> - "refs/tags/");
> + strvec_push(&transport_ls_refs_options.ref_prefixes,
> + "refs/tags/");
> }
>
> if (uses_remote_tracking(transport, rs)) {
> --- >8 ---
>
> But I'm unfamiliar enough with this area that I'd appreciate comments
> from the authors of these various commits, all of whom have been CC'd.
> Does this seem right to you, or am I totally down the wrong path?This is the same error that came up already in another thread, and I came to a similar conclusion as you did (also about asking previous authors, which is why it is a bit stuck I guess):
https://lore.kernel.org/git/D7D031QT4HEX.14TRNKRC6FC7S@ferdinandy.com/
I'll copy the relevant part of my previous message:
What is not quite clear to me, is that it looks like that the original intention was to pretty much always fetch tags, yet it was not achieved by always pushing `refs/tags` into ref_prefixes. Deleting the check for `ref_prefixes` being empty [1] breaks quite a lot of things, but reversing the order [2] does not. That feels a bit strange tbh since it feels like the two should bring about the same state ...
Hopefully someone more knowledgeable knows why things are as they are, but it seems that reversing the order really is a band-aid here.
1: https://github.com/ferdinandyb/git/commit/6074a9b8c88451e589eade4034282dd9b6c86345 2: https://github.com/ferdinandyb/git/commit/31e3f0a6b829d6c7953bf89d015b98e7edabe6b5
So there is some magic going on later on which I don't know enough about.
Best, Bence
Re: Tags are no longer fetched when fetching specific commit
Taylor Blau <me@ttaylorr.com> writes:
Show 14 quoted lines
> So I think the right fix would really be something like:
>
> --- 8< ---
> diff --git a/builtin/fetch.c b/builtin/fetch.c
> index fe2b26c74a..0e63621e6c 100644
> --- a/builtin/fetch.c
> +++ b/builtin/fetch.c
> @@ -1770,9 +1770,8 @@ static int do_fetch(struct transport *transport,
>
> if (tags == TAGS_SET || tags == TAGS_DEFAULT) {
> must_list_refs = 1;
> - if (transport_ls_refs_options.ref_prefixes.nr)
> - strvec_push(&transport_ls_refs_options.ref_prefixes,
> - "refs/tags/");I guess the original "if we are giving prefixes already, then make sure we learn about tags" is because the semantics of the ref-prefix is peculiar, in that without _any_, there is no limitation and the remote end would advertise all its refs, but if there is even one, the remote end would advertise only the ones that match any prefix?
> + strvec_push(&transport_ls_refs_options.ref_prefixes, > + "refs/tags/");
So this change would make sure that, even if somebody else already added a prefix earlier, we would always ask about tags if we come into this block. It also means when nobody has added a prefix before we reach here, we still add prefix to ask about tags. The implication of which may be rather grave. If a later code relied on us _not_ asking for tags here (because nobody is limiting the ls-refs request with prefix), after this change, that code will now see that there is some prefix requested already, and if we wanted to retain what that code does, we would need to adjust that code (and then the need for similar modification cascades X-<).
Show 8 quoted lines
> }
>
> if (uses_remote_tracking(transport, rs)) {
> --- >8 ---
>
> But I'm unfamiliar enough with this area that I'd appreciate comments
> from the authors of these various commits, all of whom have been CC'd.
> Does this seem right to you, or am I totally down the wrong path?I have no idea without doing a deep dive myself, for which I have failed to find time for so far.
I have to wonder if the first thing we should do is to update the logic to decide what ref prefixes to use, so that it does not do such an incremental strvec_push(). There are multiple questions in the form "Do we need to know about X?" the code path need to ask before deciding what prefixes to use, and before Bence's "We need to know about HEAD, because we want to know about its symref value", refs/tags hierarchy was one (and only?) thing we needed to ask about. The bug under discussion smells like the result of how brittle the code's assumption about what prefixes other parts would want to ask. This code did not assume there is anybody else, and that is why it broke when we started asking about HEAD. Now we have two possible X's in that question (refs/tags and HEAD). We may want to make sure the code is robust enough when we add the third one.
Thanks.
Re: Tags are no longer fetched when fetching specific commit
On Fri, Feb 14, 2025 at 10:35:14AM -0800, Junio C Hamano wrote:
Show 22 quoted lines
> Taylor Blau <me@ttaylorr.com> writes:
>
> > So I think the right fix would really be something like:
> >
> > --- 8< ---
> > diff --git a/builtin/fetch.c b/builtin/fetch.c
> > index fe2b26c74a..0e63621e6c 100644
> > --- a/builtin/fetch.c
> > +++ b/builtin/fetch.c
> > @@ -1770,9 +1770,8 @@ static int do_fetch(struct transport *transport,
> >
> > if (tags == TAGS_SET || tags == TAGS_DEFAULT) {
> > must_list_refs = 1;
> > - if (transport_ls_refs_options.ref_prefixes.nr)
> > - strvec_push(&transport_ls_refs_options.ref_prefixes,
> > - "refs/tags/");
>
> I guess the original "if we are giving prefixes already, then make
> sure we learn about tags" is because the semantics of the ref-prefix
> is peculiar, in that without _any_, there is no limitation and the
> remote end would advertise all its refs, but if there is even one,
> the remote end would advertise only the ones that match any prefix?Yes, I think that is accurate. We must either add prefixes for all bits of code interested in seeing the remote refs, or we must add none at all.
And so just removing the conditional like this:
Show 13 quoted lines
> > + strvec_push(&transport_ls_refs_options.ref_prefixes, > > + "refs/tags/"); > > So this change would make sure that, even if somebody else already > added a prefix earlier, we would always ask about tags if we come > into this block. It also means when nobody has added a prefix > before we reach here, we still add prefix to ask about tags. The > implication of which may be rather grave. If a later code relied > on us _not_ asking for tags here (because nobody is limiting the > ls-refs request with prefix), after this change, that code will > now see that there is some prefix requested already, and if we > wanted to retain what that code does, we would need to adjust that > code (and then the need for similar modification cascades X-<).
is not going to work. I _think_ for the reasons you're implying above, but your mention of "if later code relied on us..." confused me.
It is really the _earlier_ code that we are screwing up here. If the earlier block which conditionally added to ref_prefixes did not add anything, then unconditionally adding "refs/tags/" means that the refs that earlier code expected to find in the advertisement may not be present.
Of course it is the later code which actually starts the fetch and looks at the advertisement that will bear the effects of the missing refs. So maybe that is what you meant by "later code". ;)
Show 13 quoted lines
> I have to wonder if the first thing we should do is to update the > logic to decide what ref prefixes to use, so that it does not do > such an incremental strvec_push(). There are multiple questions in > the form "Do we need to know about X?" the code path need to ask > before deciding what prefixes to use, and before Bence's "We need to > know about HEAD, because we want to know about its symref value", > refs/tags hierarchy was one (and only?) thing we needed to ask > about. The bug under discussion smells like the result of how > brittle the code's assumption about what prefixes other parts would > want to ask. This code did not assume there is anybody else, and > that is why it broke when we started asking about HEAD. Now we have > two possible X's in that question (refs/tags and HEAD). We may want > to make sure the code is robust enough when we add the third one.
There are three spots, really: the refs we are fetching, the tags for following, and now HEAD.
But they are not all equal. The decision of "can we limit the ref advertisement at all" comes from the first one, the set of refs we are fetching[1]. And then the other ancillary data must follow that lead (either adding bits they are interested in, or not touching it at all if we are going to see the whole advertisement).
So I think the bug is in adding the HEAD prefix: it should only happen if we are otherwise limiting the advertisement. I.e., this should fix the problem in this thread:
diff --git a/builtin/fetch.c b/builtin/fetch.c index 1c740d5aac..c80afc6477 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -1777,7 +1777,8 @@ static int do_fetch(struct transport *transport, if (uses_remote_tracking(transport, rs)) { must_list_refs = 1; - strvec_push(&transport_ls_refs_options.ref_prefixes, "HEAD"); + if (transport_ls_refs_options.ref_prefixes.nr) + strvec_push(&transport_ls_refs_options.ref_prefixes, "HEAD"); } if (must_list_refs) { as well as other possible ones (where asking for HEAD caused us to suppress the advertisement for the refs we actually wanted to fetch; though see my footnote below). I do agree this dependency is subtle. I'm not sure how to make it less awkward in the code, though. It's really a property of the protocol, and not the code itself. So this: > about. The bug under discussion smells like the result of how > brittle the code's assumption about what prefixes other parts would > want to ask. This code did not assume there is anybody else, and > that is why it broke when we started asking about HEAD. Now we have > two possible X's in that question (refs/tags and HEAD). We may want > to make sure the code is robust enough when we add the third one. is always going to have that brittle-ness. You can't just have every spot register "I am interested in this prefix", because the _lack_ of registering means something, too. But it's less bad than one might think, because the primary decision about whether to use prefixes at all happens first, and all three spots are contained in a single function. We could perhaps add a boolean "restrict_ref_prefixes" flag to make it a bit more obvious. But the code would still look like: if (...some complicated logic...) { restrict_ref_prefixes = 1; strvec_push(&ref_prefixes, ...); } if (...we want tags...) { if (restrict_ref_prefixes) strvec_push(&ref_prefixes, "refs/tags/"); } if (...we want HEAD...) { if (restrict_ref_prefixes) strvec_push(&ref_prefixes, "HEAD"); } That is perhaps a little more self-documenting, but it introduces a new possible bug: that flag must be set if-and-only-if ref_prefixes is non-empty. In the pseudo-code above that is not too bad, but in the real code there are actually three branching paths which handle it. So it's do-able, but I kind of wonder if a big comment explaining the situation would make more sense. -Peff [1] One thing that I didn't dig into is why we would ever not pass ref prefixes at all. Skimming the code, I think we reach that state if we don't have any configure or command-line refspecs, and no branch-merge config. So something like: git init git fetch /path/to/some-repo.git But in that case I think we're just fetching HEAD into FETCH_HEAD? In which case we probably ought to just ask for HEAD, I'd think, to avoid pointless extra advertisement. And that's why the "other possible problems" I mentioned earlier might not exist. If we only hit the no-prefixes state when we're just fetching HEAD, then accidentally adding "HEAD" to the prefix list and limiting ourselves happens to do the right thing. ;) A patch like this: diff --git a/builtin/fetch.c b/builtin/fetch.c index 1c740d5aac..3364546d2a 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -1766,13 +1766,19 @@ static int do_fetch(struct transport *transport, branch->merge[i]->src); } } + /* + * If there are no refs specified to fetch, then we just + * fetch HEAD; mention that to narrow the advertisement. + */ + if (!transport_ls_refs_options.ref_prefixes.nr) + strvec_push(&transport_ls_refs_options.ref_prefixes, + "HEAD"); } if (tags == TAGS_SET || tags == TAGS_DEFAULT) { must_list_refs = 1; - if (transport_ls_refs_options.ref_prefixes.nr) - strvec_push(&transport_ls_refs_options.ref_prefixes, - "refs/tags/"); + strvec_push(&transport_ls_refs_options.ref_prefixes, + "refs/tags/"); } if (uses_remote_tracking(transport, rs)) { does that limiting in a more explicit way, reducing the advertisement for this kind of HEAD-only fetch. And as a bonus, it means that we'll _always_ have the correct prefixes set, so further code for tags or HEAD can unconditionally append to the prefix list. It fixes the case that started this thread, and passes all the tests. But I'm not 100% sure that this is thinking through all of the cases. In particular, the one in this thread is fetching a raw sha1, which is why there's no refspec (and thus no ref prefix set). In that case asking for HEAD is actually pointless (assuming we don't care about tag following or setting a configured $remote/HEAD, we would not need any ref advertisement at all!). Asking for HEAD is not too bad an outcome, but I think the "right" answer is really to suppress the advertisement totally. There's not protocol support for that, though, so asking for HEAD as a default is maybe a not-too-bad workaround? -Peff
[PATCH] fetch: fix following tags when fetching specific OID
In 3f763ddf28 (fetch: set remote/HEAD if it does not exist, 2024-11-22), unconditionally adds "HEAD" to the list of ref prefixes we send to the server.
This breaks a core assumption that the list of prefixes we send to the server is complete. We must either send all prefixes we care about, or none at all (in the latter case the server then advertises everything).
The tag following code is careful to only add "refs/tags/" to the list of prefixes if there are already entries in the prefix list. But because the new code from 3f763ddf28 runs after the tag code, and because it unconditionally adds to the prefix list, we may end up with a prefix list that _should_ have "refs/tags/" in it, but doesn't.
When that is the case, the server does not advertise any tags, and our auto-following breaks because we never learned about any tags in the first place.
Fix this by only adding "HEAD" to the ref prefixes when we know that we are already limiting the advertisement. In either case we'll learn about HEAD (either through the limited advertisement, or implicitly through a full advertisement).
Reported-by: Igor Todorovski <itodorov@ca.ibm.com> Co-authored-by: Jeff King <peff@peff.net> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Taylor Blau <me@ttaylorr.com> --- Peff and I talked about this today, and neither of us could find any reasons not to pursue the approach listed in the footnote of
<20250221072558.GA572877@coredump.intra.peff.net>
, but this is a more conservative approach that should fix the issue and apply cleanly on top of 'maint'. It may be worth picking this into 2.49, even though we are already quite late into the -rc cycle, this is a fairly nasty bug.
builtin/fetch.c | 4 +++- t/t5503-tagfollow.sh | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/builtin/fetch.c b/builtin/fetch.c index fe2b26c74ae..a06d1305016 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -1777,7 +1777,9 @@ static int do_fetch(struct transport *transport, if (uses_remote_tracking(transport, rs)) { must_list_refs = 1; - strvec_push(&transport_ls_refs_options.ref_prefixes, "HEAD"); + if (transport_ls_refs_options.ref_prefixes.nr) + strvec_push(&transport_ls_refs_options.ref_prefixes, + "HEAD"); } if (must_list_refs) { diff --git a/t/t5503-tagfollow.sh b/t/t5503-tagfollow.sh index 195fc64dd44..8495730e264 100755 --- a/t/t5503-tagfollow.sh +++ b/t/t5503-tagfollow.sh @@ -160,4 +160,19 @@ test_expect_success 'new clone fetch main and tags' ' test_cmp expect actual ' +test_expect_success 'fetch specific OID with tag following' ' + rm -f $U && + git init --bare clone3.git && + ( + cd clone3.git && + git remote add origin .. && + git fetch origin $B:refs/heads/main && + + git -C .. for-each-ref >expect && + git for-each-ref >actual && + + test_cmp expect actual + ) +' + test_done base-commit: f93ff170b93a1782659637824b25923245ac9dd1 -- 2.48.1.1.g965d2fe18fa
Re: [PATCH] fetch: fix following tags when fetching specific OID
On Fri, Mar 07, 2025 at 06:27:03PM -0500, Taylor Blau wrote:
Show 10 quoted lines
> diff --git a/t/t5503-tagfollow.sh b/t/t5503-tagfollow.sh > index 195fc64dd44..8495730e264 100755 > --- a/t/t5503-tagfollow.sh > +++ b/t/t5503-tagfollow.sh > @@ -160,4 +160,19 @@ test_expect_success 'new clone fetch main and tags' ' > test_cmp expect actual > ' > > +test_expect_success 'fetch specific OID with tag following' ' > + rm -f $U &&
Oops. This line is stray from when I wrote the test with a more conservative approach that matches the above. It's harmless, but could equally be removed while queueing.
Sorry for not catching earlier.
Thanks, Taylor
Re: [PATCH] fetch: fix following tags when fetching specific OID
Taylor Blau <me@ttaylorr.com> writes:
> Fix this by only adding "HEAD" to the ref prefixes when we know that we > are already limiting the advertisement. In either case we'll learn about > HEAD (either through the limited advertisement, or implicitly through a > full advertisement).
Good. "implicitly through a full advertisement" is a good thing to explicitly state here ;-)
Show 14 quoted lines
> Reported-by: Igor Todorovski <itodorov@ca.ibm.com> > Co-authored-by: Jeff King <peff@peff.net> > Signed-off-by: Jeff King <peff@peff.net> > Signed-off-by: Taylor Blau <me@ttaylorr.com> > --- > Peff and I talked about this today, and neither of us could find any > reasons not to pursue the approach listed in the footnote of > > <20250221072558.GA572877@coredump.intra.peff.net> > > , but this is a more conservative approach that should fix the issue and > apply cleanly on top of 'maint'. It may be worth picking this into 2.49, > even though we are already quite late into the -rc cycle, this is a > fairly nasty bug.
Thanks, both.
Re: [PATCH] fetch: fix following tags when fetching specific OID
2025. márc. 8. 0:27:43 Taylor Blau <me@ttaylorr.com>:
Show 91 quoted lines
> In 3f763ddf28 (fetch: set remote/HEAD if it does not exist,
> 2024-11-22),
> unconditionally adds "HEAD" to the list of ref prefixes we send to the
> server.
>
> This breaks a core assumption that the list of prefixes we send to the
> server is complete. We must either send all prefixes we care about, or
> none at all (in the latter case the server then advertises everything).
>
> The tag following code is careful to only add "refs/tags/" to the list
> of prefixes if there are already entries in the prefix list. But
> because
> the new code from 3f763ddf28 runs after the tag code, and because it
> unconditionally adds to the prefix list, we may end up with a prefix
> list that _should_ have "refs/tags/" in it, but doesn't.
>
> When that is the case, the server does not advertise any tags, and our
> auto-following breaks because we never learned about any tags in the
> first place.
>
> Fix this by only adding "HEAD" to the ref prefixes when we know that we
> are already limiting the advertisement. In either case we'll learn
> about
> HEAD (either through the limited advertisement, or implicitly through a
> full advertisement).
>
> Reported-by: Igor Todorovski <itodorov@ca.ibm.com>
> Co-authored-by: Jeff King <peff@peff.net>
> Signed-off-by: Jeff King <peff@peff.net>
> Signed-off-by: Taylor Blau <me@ttaylorr.com>
> ---
> Peff and I talked about this today, and neither of us could find any
> reasons not to pursue the approach listed in the footnote of
>
> <20250221072558.GA572877@coredump.intra.peff.net>
>
> , but this is a more conservative approach that should fix the issue
> and
> apply cleanly on top of 'maint'. It may be worth picking this into
> 2.49,
> even though we are already quite late into the -rc cycle, this is a
> fairly nasty bug.
>
> builtin/fetch.c | 4 +++-
> t/t5503-tagfollow.sh | 15 +++++++++++++++
> 2 files changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/builtin/fetch.c b/builtin/fetch.c
> index fe2b26c74ae..a06d1305016 100644
> --- a/builtin/fetch.c
> +++ b/builtin/fetch.c
> @@ -1777,7 +1777,9 @@ static int do_fetch(struct transport *transport,
>
> if (uses_remote_tracking(transport, rs)) {
> must_list_refs = 1;
> - strvec_push(&transport_ls_refs_options.ref_prefixes, "HEAD");
> + if (transport_ls_refs_options.ref_prefixes.nr)
> + strvec_push(&transport_ls_refs_options.ref_prefixes,
> + "HEAD");
> }
>
> if (must_list_refs) {
> diff --git a/t/t5503-tagfollow.sh b/t/t5503-tagfollow.sh
> index 195fc64dd44..8495730e264 100755
> --- a/t/t5503-tagfollow.sh
> +++ b/t/t5503-tagfollow.sh
> @@ -160,4 +160,19 @@ test_expect_success 'new clone fetch main and
> tags' '
> test_cmp expect actual
> '
>
> +test_expect_success 'fetch specific OID with tag following' '
> + rm -f $U &&
> + git init --bare clone3.git &&
> + (
> + cd clone3.git &&
> + git remote add origin .. &&
> + git fetch origin $B:refs/heads/main &&
> +
> + git -C .. for-each-ref >expect &&
> + git for-each-ref >actual &&
> +
> + test_cmp expect actual
> + )
> +'
> +
> test_done
>
> base-commit: f93ff170b93a1782659637824b25923245ac9dd1
> --
> 2.48.1.1.g965d2fe18faThanks for cleaning up my mess!
[PATCH 0/9] fetch: further ref-prefix cleanups and optimizations
On Fri, Mar 07, 2025 at 06:27:03PM -0500, Taylor Blau wrote:
Show 9 quoted lines
> Peff and I talked about this today, and neither of us could find any > reasons not to pursue the approach listed in the footnote of > > <20250221072558.GA572877@coredump.intra.peff.net> > > , but this is a more conservative approach that should fix the issue and > apply cleanly on top of 'maint'. It may be worth picking this into 2.49, > even though we are already quite late into the -rc cycle, this is a > fairly nasty bug.
Yeah, I favor doing this simple fix first, and then trying the larger (and slightly riskier) change on top.
I started to write up that larger patch, and found a number of interesting things. ;) So here's a 9-patch series, which would apply on top of tb/fetch-follow-tags-fix (but can very much wait to cook in the next development cycle).
[1/9]: t5702: fix typo in test name [2/9]: t5516: prefer "oid" to "sha1" in some test titles [3/9]: t5516: drop NEEDSWORK about v2 reachability behavior
Just some cosmetic fixes in nearby areas.
[4/9]: t5516: beef up exact-oid ref prefixes test
Improving test coverage in an area I'm about to touch.
[5/9]: refspec_ref_prefixes(): clean up refspec_item logic
Code clean-up. Not necessary (textually or semantically) for the
other patches.[6/9]: fetch: ask server to advertise HEAD for config-less fetch [7/9]: fetch: stop protecting additions to ref-prefix list [8/9]: fetch: avoid ls-refs only to ask for HEAD symref update
Here we get to the interesting bits. These get rid of the subtle
dependency that led to this bug in the first place, and also
optimize a few cases where we can narrow the ref advertisement. The third one is a bit optimization, where we avoid a whole
round-trip to the server. It's correct as far as the rest of the
code behaves, but I'm not 100% sure that the new origin/HEAD update
feature isn't a little buggy. See my comments there.[9/9]: fetch: use ref prefix list to skip ls-refs
And then this is just a final bit of cleanup enabled by the earlier
patches.builtin/fetch.c | 46 +++++++++++++++++------------------------- refspec.c | 22 ++++++++++++++------ t/t5516-fetch-push.sh | 12 ++++++----- t/t5702-protocol-v2.sh | 44 +++++++++++++++++++++++++++++++++++++++- 4 files changed, 85 insertions(+), 39 deletions(-)
-Peff
[PATCH 1/9] t5702: fix typo in test name
Signed-off-by: Jeff King <peff@peff.net> --- t/t5702-protocol-v2.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/t/t5702-protocol-v2.sh b/t/t5702-protocol-v2.sh index d3df81e785..cea8f92a3d 100755 --- a/t/t5702-protocol-v2.sh +++ b/t/t5702-protocol-v2.sh @@ -665,7 +665,7 @@ test_expect_success 'even with handcrafted request, filter does not work if not test-tool -C server serve-v2 --stateless-rpc <in >/dev/null ' -test_expect_success 'default refspec is used to filter ref when fetchcing' ' +test_expect_success 'default refspec is used to filter ref when fetching' ' test_when_finished "rm -f log" && GIT_TRACE_PACKET="$(pwd)/log" git -C file_child -c protocol.version=2 \
-- 2.49.0.rc1.381.gc60f5426ff
Re: [PATCH 1/9] t5702: fix typo in test name
On Sat, Mar 08, 2025 at 10:01:23PM -0500, Jeff King wrote:
Show 15 quoted lines
> Signed-off-by: Jeff King <peff@peff.net> > --- > t/t5702-protocol-v2.sh | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/t/t5702-protocol-v2.sh b/t/t5702-protocol-v2.sh > index d3df81e785..cea8f92a3d 100755 > --- a/t/t5702-protocol-v2.sh > +++ b/t/t5702-protocol-v2.sh > @@ -665,7 +665,7 @@ test_expect_success 'even with handcrafted request, filter does not work if not > test-tool -C server serve-v2 --stateless-rpc <in >/dev/null > ' > > -test_expect_success 'default refspec is used to filter ref when fetchcing' ' > +test_expect_success 'default refspec is used to filter ref when fetching' '
Maybe I am not seeing enough of the context below to know for sure, but
s/ref/&s
?
Thanks, Taylor
Re: [PATCH 1/9] t5702: fix typo in test name
On Wed, Mar 12, 2025 at 05:30:03PM -0400, Taylor Blau wrote:
Show 22 quoted lines
> On Sat, Mar 08, 2025 at 10:01:23PM -0500, Jeff King wrote: > > Signed-off-by: Jeff King <peff@peff.net> > > --- > > t/t5702-protocol-v2.sh | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/t/t5702-protocol-v2.sh b/t/t5702-protocol-v2.sh > > index d3df81e785..cea8f92a3d 100755 > > --- a/t/t5702-protocol-v2.sh > > +++ b/t/t5702-protocol-v2.sh > > @@ -665,7 +665,7 @@ test_expect_success 'even with handcrafted request, filter does not work if not > > test-tool -C server serve-v2 --stateless-rpc <in >/dev/null > > ' > > > > -test_expect_success 'default refspec is used to filter ref when fetchcing' ' > > +test_expect_success 'default refspec is used to filter ref when fetching' ' > > Maybe I am not seeing enough of the context below to know for sure, but > > s/ref/&s > > ?
Possibly.
I think you could read it as "it should filter refs" (which it obviously should). But you could also read it as "it should filter some singular ref that we do not expect to find in the result". Of course the test itself seems to just snoop on the protocol conversation, which I guess is more like the first reading.
I didn't really want to get into word-smithing the test titles. I just couldn't handle seeing that typo over and over while working on adjacent tests.
-Peff
[PATCH 2/9] t5516: prefer "oid" to "sha1" in some test titles
These old tests refer to object ids as "sha1". These days we prefer the more algorithm-agnostic "oid".
There are a few more tests that mention sha1 in the title and also use it in variables throughout the test. I've left them for now, as changing them is more involved (and they're linked to the allowTipSHA1InWant config, which as a v0-only thing actually is always sha1).
Signed-off-by: Jeff King <peff@peff.net> --- t/t5516-fetch-push.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh index 85ed049627..e7629fc536 100755 --- a/t/t5516-fetch-push.sh +++ b/t/t5516-fetch-push.sh @@ -495,7 +495,7 @@ test_expect_success 'push tag with non-existent, incomplete dest' ' ' -test_expect_success 'push sha1 with non-existent, incomplete dest' ' +test_expect_success 'push oid with non-existent, incomplete dest' ' mk_test testrepo && test_must_fail git push testrepo $(git rev-parse main):foo @@ -1251,7 +1251,7 @@ do ' done -test_expect_success 'fetch exact SHA1' ' +test_expect_success 'fetch exact oid' ' mk_test testrepo heads/main hidden/one && git push testrepo main:refs/hidden/one && ( @@ -1297,7 +1297,7 @@ test_expect_success 'fetch exact SHA1' ' ) ' -test_expect_success 'fetch exact SHA1 in protocol v2' ' +test_expect_success 'fetch exact oid in protocol v2' ' mk_test testrepo heads/main hidden/one && git push testrepo main:refs/hidden/one && git -C testrepo config transfer.hiderefs refs/hidden &&
-- 2.49.0.rc1.381.gc60f5426ff
[PATCH 3/9] t5516: drop NEEDSWORK about v2 reachability behavior
When this test was added in 6c301adb0a (fetch: do not pass ref-prefixes for fetch by exact SHA1, 2018-05-31), there was still some uncertainty about the v2 protocol's looser behavior with serving objects that are not directly pointed at by a ref.
At this point that behavior is well established, and I do not think we would ever change v2 to match the v0 behavior (and if we did, remembering to update this test is the least of our concerns).
Signed-off-by: Jeff King <peff@peff.net> --- t/t5516-fetch-push.sh | 1 - 1 file changed, 1 deletion(-)
diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh index e7629fc536..e4008f3ca6 100755 --- a/t/t5516-fetch-push.sh +++ b/t/t5516-fetch-push.sh @@ -1312,7 +1312,6 @@ test_expect_success 'fetch exact oid in protocol v2' ' test_must_fail git -C child cat-file -t $the_commit && # fetching the hidden object succeeds by default - # NEEDSWORK: should this match the v0 behavior instead? git -C child fetch -v ../testrepo $the_commit:refs/heads/copy '
-- 2.49.0.rc1.381.gc60f5426ff
Re: [PATCH 3/9] t5516: drop NEEDSWORK about v2 reachability behavior
On Sat, Mar 08, 2025 at 10:02:03PM -0500, Jeff King wrote:
> At this point that behavior is well established, and I do not think we > would ever change v2 to match the v0 behavior (and if we did, > remembering to update this test is the least of our concerns).
;-), indeed.
Thanks, Taylor
[PATCH 4/9] t5516: beef up exact-oid ref prefixes test
Commit 6c301adb0a (fetch: do not pass ref-prefixes for fetch by exact SHA1, 2018-05-31) added a test that fetching an exact oid with the v2 protocol works. Originally it failed without the code change from that commit, because fetch failed with "no matching remote head".
That changed in 0177565148 (transport: do not list refs if possible, 2018-09-27), which made fetch more forgiving of this case.
But that now meant the test passes even without its fix! So let's also have it check the packet listing to make sure we did not ask for the bogus prefix (ultimately this is less important than whether the command fails, since it's just an optimization, but we should make sure not to regress it).
Signed-off-by: Jeff King <peff@peff.net> --- t/t5516-fetch-push.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh index e4008f3ca6..2904399e97 100755 --- a/t/t5516-fetch-push.sh +++ b/t/t5516-fetch-push.sh @@ -1312,7 +1312,10 @@ test_expect_success 'fetch exact oid in protocol v2' ' test_must_fail git -C child cat-file -t $the_commit && # fetching the hidden object succeeds by default - git -C child fetch -v ../testrepo $the_commit:refs/heads/copy + GIT_TRACE_PACKET=$PWD/trace.out \ + git -C child fetch -v ../testrepo $the_commit:refs/heads/copy && + + test_grep ! "ref-prefix.*$the_commit" trace.out ' for configallowtipsha1inwant in true false
-- 2.49.0.rc1.381.gc60f5426ff
[PATCH 5/9] refspec_ref_prefixes(): clean up refspec_item logic
The point of refspec_ref_prefixes() is to look over the set of refspecs and set up an appropriate list of "ref-prefix" strings to send to the server.
The logic for handling individual refspec_items has some confusing bits. The final part of our if/else cascade checks this:
else if (item->src && !item->exact_sha1) prefix = item->src;
But we know that "item->exact_sha1" can never be true, because earlier we did:
if (item->exact_sha1 || item->negative) continue;
This is due to 6c301adb0a (fetch: do not pass ref-prefixes for fetch by exact SHA1, 2018-05-31), which added the continue. So it is tempting to remove the extra exact_sha1 at the end of the cascade, leaving the one at the top of the loop.
But I don't think that's quite right. The full cascade is:
if (rs->fetch == REFSPEC_FETCH) prefix = item->src; else if (item->dst) prefix = item->dst; else if (item->src && !item->exact_sha1) prefix = item->src;
which all comes from 6373cb598e (refspec: consolidate ref-prefix generation logic, 2018-05-16). That first "if" is supposed to handle fetches, where we care about the source name, since that is coming from the server. And the rest should be for pushes, where we care about the destination, since that's the name the server will use. And we get that either explicitly from "dst" (for something like "foo:bar") or implicitly from the source (a refspec like "foo" is treated as "foo:foo").
But how should exact_sha1 interact with those? For a fetch, exact_sha1 always means we do not care about sending a name to the server (there is no server refname at all). But pushing an exact sha1 should still care about the destination on the server! It is only if we have to fall back to the implicit source that we need to care if it is a real ref (though arguably such a push does not even make sense; where would the server store it?).
So I think that 6c301adb0a "broke" the push case by always skipping exact_sha1 items, even though a push should only care about the destination.
Of course this is all completely academic. We have still not implemented a v2 push protocol, so even though we do call this function for pushes, we'd never actually send these ref-prefix lines.
However, given the effort I spent to figure out what was going on here, and the overlapping exact_sha1 checks, I'd like to rewrite this to preemptively fix the bug, and hopefully make it less confusing.
This splits the "if" at the top-level into fetch vs push, and then each handles exact_sha1 appropriately itself. The check for negative refspecs remains outside of either (there is no protocol support for them, so we never send them to the server, but rather use them only to reduce the advertisement we receive).
The resulting behavior should be identical for fetches, but hopefully sets us up better for a potential future v2 push.
Signed-off-by: Jeff King <peff@peff.net> --- This could be dropped without affecting the rest of the series if it's too churn-y.
refspec.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/refspec.c b/refspec.c index 4cb80b5208..c6ad515f04 100644 --- a/refspec.c +++ b/refspec.c @@ -246,14 +246,24 @@ void refspec_ref_prefixes(const struct refspec *rs, const struct refspec_item *item = &rs->items[i]; const char *prefix = NULL; - if (item->exact_sha1 || item->negative) + if (item->negative) continue; - if (rs->fetch == REFSPEC_FETCH) - prefix = item->src; - else if (item->dst) - prefix = item->dst; - else if (item->src && !item->exact_sha1) + + if (rs->fetch == REFSPEC_FETCH) { + if (item->exact_sha1) + continue; prefix = item->src; + } else { + /* + * Pushes can have an explicit destination like + * "foo:bar", or can implicitly use the src for both + * ("foo" is the same as "foo:foo"). + */ + if (item->dst) + prefix = item->dst; + else if (item->src && !item->exact_sha1) + prefix = item->src; + } if (!prefix) continue;
-- 2.49.0.rc1.381.gc60f5426ff
Re: [PATCH 5/9] refspec_ref_prefixes(): clean up refspec_item logic
On Sat, Mar 08, 2025 at 10:07:06PM -0500, Jeff King wrote:
> The point of refspec_ref_prefixes() is to look over the set of refspecs > and set up an appropriate list of "ref-prefix" strings to send to the > server.
While we're cleaning things up, I wonder if it is worth (slightly) renaming this function to something more descriptive, like:
refspecs_to_ref_prefixes()
, where we pluralize "refspec" and add "to" to make it clear that we're converting from one to the other.
Show 7 quoted lines
> Of course this is all completely academic. We have still not implemented > a v2 push protocol, so even though we do call this function for pushes, > we'd never actually send these ref-prefix lines. > > However, given the effort I spent to figure out what was going on here, > and the overlapping exact_sha1 checks, I'd like to rewrite this to > preemptively fix the bug, and hopefully make it less confusing.
All makes sense.
Show 35 quoted lines
> This splits the "if" at the top-level into fetch vs push, and then each
> handles exact_sha1 appropriately itself. The check for negative refspecs
> remains outside of either (there is no protocol support for them, so we
> never send them to the server, but rather use them only to reduce the
> advertisement we receive).
>
> The resulting behavior should be identical for fetches, but hopefully
> sets us up better for a potential future v2 push.
>
> Signed-off-by: Jeff King <peff@peff.net>
> ---
> This could be dropped without affecting the rest of the series if it's
> too churn-y.
>
> refspec.c | 22 ++++++++++++++++------
> 1 file changed, 16 insertions(+), 6 deletions(-)
>
> diff --git a/refspec.c b/refspec.c
> index 4cb80b5208..c6ad515f04 100644
> --- a/refspec.c
> +++ b/refspec.c
> @@ -246,14 +246,24 @@ void refspec_ref_prefixes(const struct refspec *rs,
> const struct refspec_item *item = &rs->items[i];
> const char *prefix = NULL;
>
> - if (item->exact_sha1 || item->negative)
> + if (item->negative)
> continue;
> - if (rs->fetch == REFSPEC_FETCH)
> - prefix = item->src;
> - else if (item->dst)
> - prefix = item->dst;
> - else if (item->src && !item->exact_sha1)
> +
> + if (rs->fetch == REFSPEC_FETCH) {Do you think it'd be worth handling rs->fetch in a switch/case block? At least that would allow us to catch unknown values more easily, though it seems unlikely we'd ever add any :-).
Show 14 quoted lines
> + if (item->exact_sha1)
> + continue;
> prefix = item->src;
> + } else {
> + /*
> + * Pushes can have an explicit destination like
> + * "foo:bar", or can implicitly use the src for both
> + * ("foo" is the same as "foo:foo").
> + */
> + if (item->dst)
> + prefix = item->dst;
> + else if (item->src && !item->exact_sha1)
> + prefix = item->src;
> + }All makes sense.
Thanks, Taylor
Re: [PATCH 5/9] refspec_ref_prefixes(): clean up refspec_item logic
On Wed, Mar 12, 2025 at 05:38:05PM -0400, Taylor Blau wrote:
Show 12 quoted lines
> On Sat, Mar 08, 2025 at 10:07:06PM -0500, Jeff King wrote: > > The point of refspec_ref_prefixes() is to look over the set of refspecs > > and set up an appropriate list of "ref-prefix" strings to send to the > > server. > > While we're cleaning things up, I wonder if it is worth (slightly) > renaming this function to something more descriptive, like: > > refspecs_to_ref_prefixes() > > , where we pluralize "refspec" and add "to" to make it clear that we're > converting from one to the other.
I think a "struct refspec" is plural (despite the name). The singular is "refspec_item".
And...
Show 22 quoted lines
> > diff --git a/refspec.c b/refspec.c
> > index 4cb80b5208..c6ad515f04 100644
> > --- a/refspec.c
> > +++ b/refspec.c
> > @@ -246,14 +246,24 @@ void refspec_ref_prefixes(const struct refspec *rs,
> > const struct refspec_item *item = &rs->items[i];
> > const char *prefix = NULL;
> >
> > - if (item->exact_sha1 || item->negative)
> > + if (item->negative)
> > continue;
> > - if (rs->fetch == REFSPEC_FETCH)
> > - prefix = item->src;
> > - else if (item->dst)
> > - prefix = item->dst;
> > - else if (item->src && !item->exact_sha1)
> > +
> > + if (rs->fetch == REFSPEC_FETCH) {
>
> Do you think it'd be worth handling rs->fetch in a switch/case block? At
> least that would allow us to catch unknown values more easily, though it
> seems unlikely we'd ever add any :-)....this whole thing is badly named. It is called "fetch", but the only two values are true/false. But for some reason we named them REFSPEC_FETCH and REFSPEC_PUSH. Surely it should be "type" or "operation" or something if we were going to use an enum and switch?
I tried to limit the extent of my changes on opinionated matters like this. I almost dropped the patch entirely, but I did enough head-scratching to find that latent bug that I didn't want to lose it.
If you want to fix the name and other clarity issues on top, I don't mind, though. ;)
-Peff
Re: [PATCH 5/9] refspec_ref_prefixes(): clean up refspec_item logic
Jeff King <peff@peff.net> writes:
Show 10 quoted lines
>> > + if (rs->fetch == REFSPEC_FETCH) {
>>
>> Do you think it'd be worth handling rs->fetch in a switch/case block? At
>> least that would allow us to catch unknown values more easily, though it
>> seems unlikely we'd ever add any :-).
>
> ...this whole thing is badly named. It is called "fetch", but the only
> two values are true/false. But for some reason we named them
> REFSPEC_FETCH and REFSPEC_PUSH. Surely it should be "type" or
> "operation" or something if we were going to use an enum and switch?Sorry, I suspect that it is my fault. I've never been good at naming, and if the allowed values for this member are FETCH and PUSH, then the member itself shouldn't be called fetch or push.
Perhaps 'direction'.
But such a name improvement is clearly outside the scope of this fix.
Thanks.
[PATCH 0/4] refspec: treat 'fetch' as a Boolean value
This series explores treating the 'fetch' field of 'struct refspec' as a Boolean, instead of taking on values called "REFSPEC_FETCH" and "REFSPEC_PUSH".
The refactoring takes place in a couple of steps, but IMHO the end result is pleasing and an improvement in clarity over the existing API.
For reference, in one of the patches above, I had suggested replacing something like:
if (refspec->fetch == REFSPEC_FETCH) {
/* something */
} else {
/* something else */
}with a switch/case-statement, only to realize that 'refspec->fetch' is really a Boolean in disguise.
I am not overly attached to these patches one way or the other. I think they do improve the refspec.h API, but they're also ripe for bike-shedding. So if we agree that they are good, I'm happy to see them move forward. But if not, I'd rather not spend the list's time bike-shedding here, so I'd just as soon drop them.
Thanks in advance for your review!
Taylor Blau (4): refspec: treat 'fetch' as a Boolean value refspec: replace `refspec_init()` with fetch/push variants refspec: remove refspec_item_init_or_die() refspec: replace `refspec_item_init()` with fetch/push variants
builtin/fetch.c | 2 +- builtin/pull.c | 3 ++- git-diff-pairs | Bin 0 -> 12166200 bytes refspec.c | 38 +++++++++++++++++++++++++++----------- refspec.h | 18 +++++++----------- remote.c | 4 ++-- transport-helper.c | 2 +- 7 files changed, 40 insertions(+), 27 deletions(-) create mode 100755 git-diff-pairs
base-commit: c702dd48567cfebca3d4a06b691de97da3f8dc4a
-- 2.49.0.rc2.13.g95783265fd
[PATCH 1/4] refspec: treat 'fetch' as a Boolean value
Since 6d4c057859 (refspec: introduce struct refspec, 2018-05-16), we have constants called REFSPEC_FETCH and REFSPEC_PUSH. This misleadingly suggests that we might introduce other modes in the future.
But these values are treated as a Boolean, and stored in a struct field called 'fetch'. So the following:
if (refspec->fetch == REFSPEC_FETCH) { ... }, and
if (refspec->fetch) { ... }are equivalent. Let's avoid renaming the Boolean values "true" and "false" here and remove the two REFSPEC_ constants mentioned above.
Since this value is truly a Boolean and will only ever take on a value of 0 or 1, we can declare it as a single bit unsigned field. In practice this won't shrink the size of 'struct refspec', but it more clearly indicates the intent.
Note that this introduces some awkwardness like:
refspec_item_init_or_die(&spec, refspec, 1);
, where it's unclear what the final "1" does. This will be addressed in the following commits.
Signed-off-by: Taylor Blau <me@ttaylorr.com> --- builtin/pull.c | 2 +- git-diff-pairs | Bin 0 -> 12166200 bytes refspec.c | 4 ++-- refspec.h | 9 +++------ remote.c | 4 ++-- transport-helper.c | 2 +- 6 files changed, 9 insertions(+), 12 deletions(-) create mode 100755 git-diff-pairs
diff --git a/builtin/pull.c b/builtin/pull.c index 9c4a00620a..8bbfcce729 100644 --- a/builtin/pull.c +++ b/builtin/pull.c @@ -738,7 +738,7 @@ static const char *get_tracking_branch(const char *remote, const char *refspec) const char *spec_src; const char *merge_branch; - refspec_item_init_or_die(&spec, refspec, REFSPEC_FETCH); + refspec_item_init_or_die(&spec, refspec, 1); spec_src = spec.src; if (!*spec_src || !strcmp(spec_src, "HEAD")) spec_src = "HEAD"; diff --git a/git-diff-pairs b/git-diff-pairs new file mode 100755 index 0000000000000000000000000000000000000000..8eebe3117848710e6c09590e6e5481111801d698 GIT binary patch literal 12166200 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≠bG%V_##c?E%;j3n$L{e@OknMyzsoK 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∨*LJ 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
Re: [PATCH 1/4] refspec: treat 'fetch' as a Boolean value
On Mon, Mar 17, 2025 at 06:24:24PM -0400, Taylor Blau wrote:
> Since 6d4c057859 (refspec: introduce struct refspec, 2018-05-16), we > have constants called REFSPEC_FETCH and REFSPEC_PUSH. This misleadingly > suggests that we might introduce other modes in the future.
I don't know that I'd call it misleading. We _could_ introduce new modes if we had new operations. But I do agree it's unlikely (even if we had other operations like git-archive, cat-file, etc, they would probably not have refspecs).
So it seems like a reasonable direction to me.
The one thing I don't like is:
Show 10 quoted lines
> diff --git a/builtin/pull.c b/builtin/pull.c > index 9c4a00620a..8bbfcce729 100644 > --- a/builtin/pull.c > +++ b/builtin/pull.c > @@ -738,7 +738,7 @@ static const char *get_tracking_branch(const char *remote, const char *refspec) > const char *spec_src; > const char *merge_branch; > > - refspec_item_init_or_die(&spec, refspec, REFSPEC_FETCH); > + refspec_item_init_or_die(&spec, refspec, 1);
The third argument here (and elsewhere) becomes much more mysterious to the reader. Maybe not a big deal, though.
> diff --git a/git-diff-pairs b/git-diff-pairs
Hmm.... :)
-Peff
Re: [PATCH 1/4] refspec: treat 'fetch' as a Boolean value
On Mon, Mar 17, 2025 at 08:24:36PM -0400, Jeff King wrote:
Show 5 quoted lines
> > - refspec_item_init_or_die(&spec, refspec, REFSPEC_FETCH); > > + refspec_item_init_or_die(&spec, refspec, 1); > > The third argument here (and elsewhere) becomes much more mysterious to > the reader. Maybe not a big deal, though.
Oh, I should have read the other patches. :)
The end result resolves my complaint nicely.
-Peff
Re: [PATCH 1/4] refspec: treat 'fetch' as a Boolean value
On Mon, Mar 17, 2025 at 08:24:36PM -0400, Jeff King wrote:
Show 12 quoted lines
> On Mon, Mar 17, 2025 at 06:24:24PM -0400, Taylor Blau wrote: > > > Since 6d4c057859 (refspec: introduce struct refspec, 2018-05-16), we > > have constants called REFSPEC_FETCH and REFSPEC_PUSH. This misleadingly > > suggests that we might introduce other modes in the future. > > I don't know that I'd call it misleading. We _could_ introduce new modes > if we had new operations. But I do agree it's unlikely (even if we had > other operations like git-archive, cat-file, etc, they would probably > not have refspecs). > > So it seems like a reasonable direction to me.
Fair, I think a more accurate statement might be to swap "misleadingly" for "confusingly". I'll swap that and amend the paragraph to say "[...], which is possible, but highly unlikely"
Show 15 quoted lines
> The one thing I don't like is: > > > diff --git a/builtin/pull.c b/builtin/pull.c > > index 9c4a00620a..8bbfcce729 100644 > > --- a/builtin/pull.c > > +++ b/builtin/pull.c > > @@ -738,7 +738,7 @@ static const char *get_tracking_branch(const char *remote, const char *refspec) > > const char *spec_src; > > const char *merge_branch; > > > > - refspec_item_init_or_die(&spec, refspec, REFSPEC_FETCH); > > + refspec_item_init_or_die(&spec, refspec, 1); > > The third argument here (and elsewhere) becomes much more mysterious to > the reader. Maybe not a big deal, though.
Hmm. I see later on in the thread that the final patch resolves this awkwardness. I figured that readers might have a similar thought here, which is why I included "Note that this introduces some awkwardness like [...]", so perhaps there is a way to clarify that. But...
> > diff --git a/git-diff-pairs b/git-diff-pairs > > Hmm.... :)
...I could forgive you for not noticing given this ugliness ;-).
Thanks, Taylor
[PATCH 2/4] refspec: replace `refspec_init()` with fetch/push variants
To avoid having a Boolean argument in the refspec_init() function, replace it with two variants:
- `refspec_init_fetch()` - `refspec_init_push()`
to codify the meaning of that Boolean into the function's name itself.
Signed-off-by: Taylor Blau <me@ttaylorr.com> --- refspec.c | 12 +++++++++--- refspec.h | 3 ++- remote.c | 4 ++-- transport-helper.c | 2 +- 4 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/refspec.c b/refspec.c index db5a1c34a5..f6be0c54d7 100644 --- a/refspec.c +++ b/refspec.c @@ -178,10 +178,16 @@ void refspec_item_clear(struct refspec_item *item) item->exact_sha1 = 0; } -void refspec_init(struct refspec *rs, int fetch) +void refspec_init_fetch(struct refspec *rs) { - memset(rs, 0, sizeof(*rs)); - rs->fetch = fetch; + struct refspec blank = REFSPEC_INIT_FETCH; + memcpy(rs, &blank, sizeof(*rs)); +} + +void refspec_init_push(struct refspec *rs) +{ + struct refspec blank = REFSPEC_INIT_PUSH; + memcpy(rs, &blank, sizeof(*rs)); } void refspec_append(struct refspec *rs, const char *refspec) diff --git a/refspec.h b/refspec.h index 155494cd3a..7db68e56c8 100644 --- a/refspec.h +++ b/refspec.h @@ -52,7 +52,8 @@ int refspec_item_init(struct refspec_item *item, const char *refspec, void refspec_item_init_or_die(struct refspec_item *item, const char *refspec, int fetch); void refspec_item_clear(struct refspec_item *item); -void refspec_init(struct refspec *rs, int fetch); +void refspec_init_fetch(struct refspec *rs); +void refspec_init_push(struct refspec *rs); void refspec_append(struct refspec *rs, const char *refspec); __attribute__((format (printf,2,3))) void refspec_appendf(struct refspec *rs, const char *fmt, ...); diff --git a/remote.c b/remote.c index addd4a9999..25af97a44b 100644 --- a/remote.c +++ b/remote.c @@ -143,8 +143,8 @@ static struct remote *make_remote(struct remote_state *remote_state, ret->prune = -1; /* unspecified */ ret->prune_tags = -1; /* unspecified */ ret->name = xstrndup(name, len); - refspec_init(&ret->push, 0); - refspec_init(&ret->fetch, 1); + refspec_init_push(&ret->push); + refspec_init_fetch(&ret->fetch); string_list_init_dup(&ret->server_options); ALLOC_GROW(remote_state->remotes, remote_state->remotes_nr + 1, diff --git a/transport-helper.c b/transport-helper.c index 43cd760119..69391ee7d2 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -162,7 +162,7 @@ static struct child_process *get_helper(struct transport *transport) data->helper = helper; data->no_disconnect_req = 0; - refspec_init(&data->rs, 1); + refspec_init_fetch(&data->rs); /* * Open the output as FILE* so strbuf_getline_*() family of
-- 2.49.0.rc2.13.g95783265fd
[PATCH 3/4] refspec: remove refspec_item_init_or_die()
There are two callers of this function, which ensures that a dispatched call to refspec_item_init() does not fail.
In the following commit, we're going to add fetch/push-specific variants of refspec_item_init(), which will turn one function into two. To avoid introducing yet another pair of new functions (such as refspec_item_init_push_or_die() and refspec_item_init_fetch_or_die()), let's remove the thin wrapper entirely.
This duplicates a single line of code among two callers, but thins the refspec.h API by one function, and prevents introducing two more in the following commit.
Note that we still have a trailing Boolean argument in the function `refspec_item_init()`. The following commit will address this.
Signed-off-by: Taylor Blau <me@ttaylorr.com> --- builtin/pull.c | 3 ++- refspec.c | 10 ++-------- refspec.h | 2 -- 3 files changed, 4 insertions(+), 11 deletions(-)
diff --git a/builtin/pull.c b/builtin/pull.c index 8bbfcce729..a68a9955de 100644 --- a/builtin/pull.c +++ b/builtin/pull.c @@ -738,7 +738,8 @@ static const char *get_tracking_branch(const char *remote, const char *refspec) const char *spec_src; const char *merge_branch; - refspec_item_init_or_die(&spec, refspec, 1); + if (!refspec_item_init(&spec, refspec, 1)) + die(_("invalid refspec '%s'"), refspec); spec_src = spec.src; if (!*spec_src || !strcmp(spec_src, "HEAD")) spec_src = "HEAD"; diff --git a/refspec.c b/refspec.c index f6be0c54d7..3aeb697505 100644 --- a/refspec.c +++ b/refspec.c @@ -160,13 +160,6 @@ int refspec_item_init(struct refspec_item *item, const char *refspec, int fetch) return parse_refspec(item, refspec, fetch); } -void refspec_item_init_or_die(struct refspec_item *item, const char *refspec, - int fetch) -{ - if (!refspec_item_init(item, refspec, fetch)) - die(_("invalid refspec '%s'"), refspec); -} - void refspec_item_clear(struct refspec_item *item) { FREE_AND_NULL(item->src); @@ -194,7 +187,8 @@ void refspec_append(struct refspec *rs, const char *refspec) { struct refspec_item item; - refspec_item_init_or_die(&item, refspec, rs->fetch); + if (!refspec_item_init(&item, refspec, rs->fetch)) + die(_("invalid refspec '%s'"), refspec); ALLOC_GROW(rs->items, rs->nr + 1, rs->alloc); rs->items[rs->nr] = item; diff --git a/refspec.h b/refspec.h index 7db68e56c8..614f34554e 100644 --- a/refspec.h +++ b/refspec.h @@ -49,8 +49,6 @@ struct refspec { int refspec_item_init(struct refspec_item *item, const char *refspec, int fetch); -void refspec_item_init_or_die(struct refspec_item *item, const char *refspec, - int fetch); void refspec_item_clear(struct refspec_item *item); void refspec_init_fetch(struct refspec *rs); void refspec_init_push(struct refspec *rs);
-- 2.49.0.rc2.13.g95783265fd
[PATCH 4/4] refspec: replace `refspec_item_init()` with fetch/push variants
For similar reasons as in the previous refactoring of `refspec_init()` into `refspec_init_fetch()` and `refspec_init_push()`, apply the same refactoring to `refspec_item_init()`.
Signed-off-by: Taylor Blau <me@ttaylorr.com> --- builtin/fetch.c | 2 +- builtin/pull.c | 2 +- refspec.c | 22 +++++++++++++++++++--- refspec.h | 4 ++-- 4 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/builtin/fetch.c b/builtin/fetch.c index 02af505469..9830c09011 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -586,7 +586,7 @@ static struct ref *get_ref_map(struct remote *remote, struct refspec_item tag_refspec; /* also fetch all tags */ - refspec_item_init(&tag_refspec, TAG_REFSPEC, 0); + refspec_item_init_push(&tag_refspec, TAG_REFSPEC); get_fetch_map(remote_refs, &tag_refspec, &tail, 0); refspec_item_clear(&tag_refspec); } else if (tags == TAGS_DEFAULT && *autotags) { diff --git a/builtin/pull.c b/builtin/pull.c index a68a9955de..a1ebc6ad33 100644 --- a/builtin/pull.c +++ b/builtin/pull.c @@ -738,7 +738,7 @@ static const char *get_tracking_branch(const char *remote, const char *refspec) const char *spec_src; const char *merge_branch; - if (!refspec_item_init(&spec, refspec, 1)) + if (!refspec_item_init_fetch(&spec, refspec)) die(_("invalid refspec '%s'"), refspec); spec_src = spec.src; if (!*spec_src || !strcmp(spec_src, "HEAD")) diff --git a/refspec.c b/refspec.c index 3aeb697505..0775358d96 100644 --- a/refspec.c +++ b/refspec.c @@ -153,13 +153,24 @@ static int parse_refspec(struct refspec_item *item, const char *refspec, int fet return 1; } -int refspec_item_init(struct refspec_item *item, const char *refspec, int fetch) +static int refspec_item_init(struct refspec_item *item, const char *refspec, + int fetch) { memset(item, 0, sizeof(*item)); item->raw = xstrdup(refspec); return parse_refspec(item, refspec, fetch); } +int refspec_item_init_fetch(struct refspec_item *item, const char *refspec) +{ + return refspec_item_init(item, refspec, 1); +} + +int refspec_item_init_push(struct refspec_item *item, const char *refspec) +{ + return refspec_item_init(item, refspec, 0); +} + void refspec_item_clear(struct refspec_item *item) { FREE_AND_NULL(item->src); @@ -186,8 +197,13 @@ void refspec_init_push(struct refspec *rs) void refspec_append(struct refspec *rs, const char *refspec) { struct refspec_item item; + int ret; - if (!refspec_item_init(&item, refspec, rs->fetch)) + if (rs->fetch) + ret = refspec_item_init_fetch(&item, refspec); + else + ret = refspec_item_init_push(&item, refspec); + if (!ret) die(_("invalid refspec '%s'"), refspec); ALLOC_GROW(rs->items, rs->nr + 1, rs->alloc); @@ -233,7 +249,7 @@ void refspec_clear(struct refspec *rs) int valid_fetch_refspec(const char *fetch_refspec_str) { struct refspec_item refspec; - int ret = refspec_item_init(&refspec, fetch_refspec_str, 1); + int ret = refspec_item_init_fetch(&refspec, fetch_refspec_str); refspec_item_clear(&refspec); return ret; } diff --git a/refspec.h b/refspec.h index 614f34554e..8b04f9995e 100644 --- a/refspec.h +++ b/refspec.h @@ -47,8 +47,8 @@ struct refspec { unsigned fetch : 1; }; -int refspec_item_init(struct refspec_item *item, const char *refspec, - int fetch); +int refspec_item_init_fetch(struct refspec_item *item, const char *refspec); +int refspec_item_init_push(struct refspec_item *item, const char *refspec); void refspec_item_clear(struct refspec_item *item); void refspec_init_fetch(struct refspec *rs); void refspec_init_push(struct refspec *rs);
-- 2.49.0.rc2.13.g95783265fd
Re: [PATCH 0/4] refspec: treat 'fetch' as a Boolean value
Taylor Blau <me@ttaylorr.com> writes:
Show 42 quoted lines
> This series explores treating the 'fetch' field of 'struct refspec' as a
> Boolean, instead of taking on values called "REFSPEC_FETCH" and
> "REFSPEC_PUSH".
>
> The refactoring takes place in a couple of steps, but IMHO the end
> result is pleasing and an improvement in clarity over the existing API.
>
> For reference, in one of the patches above, I had suggested replacing
> something like:
>
> if (refspec->fetch == REFSPEC_FETCH) {
> /* something */
> } else {
> /* something else */
> }
>
> with a switch/case-statement, only to realize that 'refspec->fetch' is
> really a Boolean in disguise.
>
> I am not overly attached to these patches one way or the other. I think
> they do improve the refspec.h API, but they're also ripe for
> bike-shedding. So if we agree that they are good, I'm happy to see them
> move forward. But if not, I'd rather not spend the list's time
> bike-shedding here, so I'd just as soon drop them.
>
> Thanks in advance for your review!
>
> Taylor Blau (4):
> refspec: treat 'fetch' as a Boolean value
> refspec: replace `refspec_init()` with fetch/push variants
> refspec: remove refspec_item_init_or_die()
> refspec: replace `refspec_item_init()` with fetch/push variants
>
> builtin/fetch.c | 2 +-
> builtin/pull.c | 3 ++-
> git-diff-pairs | Bin 0 -> 12166200 bytes
> refspec.c | 38 +++++++++++++++++++++++++++-----------
> refspec.h | 18 +++++++-----------
> remote.c | 4 ++--
> transport-helper.c | 2 +-
> 7 files changed, 40 insertions(+), 27 deletions(-)
> create mode 100755 git-diff-pairsSomebody does not proofread their cover letter. Sheesh ;-)
Re: [PATCH 0/4] refspec: treat 'fetch' as a Boolean value
On Mon, Mar 17, 2025 at 04:26:28PM -0700, Junio C Hamano wrote:
Show 11 quoted lines
> > builtin/fetch.c | 2 +- > > builtin/pull.c | 3 ++- > > git-diff-pairs | Bin 0 -> 12166200 bytes > > refspec.c | 38 +++++++++++++++++++++++++++----------- > > refspec.h | 18 +++++++----------- > > remote.c | 4 ++-- > > transport-helper.c | 2 +- > > 7 files changed, 40 insertions(+), 27 deletions(-) > > create mode 100755 git-diff-pairs > > Somebody does not proofread their cover letter. Sheesh ;-)
Ugh, for goodness sake. Sorry about that, I'll send another round.
Thanks, Taylor
[PATCH v2 0/4] refspec: treat 'fetch' as a Boolean value
Here's a small reroll that cleans up some wording in the first patch, and drops the accidental inclusion of a stray 'git-diff-pairs' binary that was sitting in my working tree at the time of writing the initial commit.
Otherwise the series is unchanged, but a range-diff is attached nonetheless. Thanks for reviewing :-).
Taylor Blau (4): refspec: treat 'fetch' as a Boolean value refspec: replace `refspec_init()` with fetch/push variants refspec: remove refspec_item_init_or_die() refspec: replace `refspec_item_init()` with fetch/push variants
builtin/fetch.c | 2 +- builtin/pull.c | 3 ++- refspec.c | 38 +++++++++++++++++++++++++++----------- refspec.h | 18 +++++++----------- remote.c | 4 ++-- transport-helper.c | 2 +- 6 files changed, 40 insertions(+), 27 deletions(-)
Range-diff against v1:
1: 7e662acb5a ! 1: 04e1ab8209 refspec: treat 'fetch' as a Boolean value
@@ Commit message
refspec: treat 'fetch' as a Boolean value
Since 6d4c057859 (refspec: introduce struct refspec, 2018-05-16), we
- have constants called REFSPEC_FETCH and REFSPEC_PUSH. This misleadingly
- suggests that we might introduce other modes in the future.
+ have macros called REFSPEC_FETCH and REFSPEC_PUSH. This confusingly
+ suggests that we might introduce other modes in the future, which, while
+ possible, is highly unlikely.
But these values are treated as a Boolean, and stored in a struct field
called 'fetch'. So the following:
@@ Commit message
if (refspec->fetch) { ... }
are equivalent. Let's avoid renaming the Boolean values "true" and
- "false" here and remove the two REFSPEC_ constants mentioned above.
+ "false" here and remove the two REFSPEC_ macros mentioned above.
Since this value is truly a Boolean and will only ever take on a value
of 0 or 1, we can declare it as a single bit unsigned field. In
@@ builtin/pull.c: static const char *get_tracking_branch(const char *remote, const
if (!*spec_src || !strcmp(spec_src, "HEAD"))
spec_src = "HEAD";
- ## git-diff-pairs (new) ##
- Binary files /dev/null and git-diff-pairs differ
-
## refspec.c ##
@@ refspec.c: void refspec_clear(struct refspec *rs)
int valid_fetch_refspec(const char *fetch_refspec_str)
2: fd2354dade = 2: c3021b82ce refspec: replace `refspec_init()` with fetch/push variants
3: 49b470de61 = 3: 88f6a91c46 refspec: remove refspec_item_init_or_die()
4: 95783265fd = 4: f0c323988f refspec: replace `refspec_item_init()` with fetch/push variantsbase-commit: c702dd48567cfebca3d4a06b691de97da3f8dc4a
-- 2.49.0.3.gbb7a4a684c.dirty
[PATCH v2 1/4] refspec: treat 'fetch' as a Boolean value
Since 6d4c057859 (refspec: introduce struct refspec, 2018-05-16), we have macros called REFSPEC_FETCH and REFSPEC_PUSH. This confusingly suggests that we might introduce other modes in the future, which, while possible, is highly unlikely.
But these values are treated as a Boolean, and stored in a struct field called 'fetch'. So the following:
if (refspec->fetch == REFSPEC_FETCH) { ... }, and
if (refspec->fetch) { ... }are equivalent. Let's avoid renaming the Boolean values "true" and "false" here and remove the two REFSPEC_ macros mentioned above.
Since this value is truly a Boolean and will only ever take on a value of 0 or 1, we can declare it as a single bit unsigned field. In practice this won't shrink the size of 'struct refspec', but it more clearly indicates the intent.
Note that this introduces some awkwardness like:
refspec_item_init_or_die(&spec, refspec, 1);
, where it's unclear what the final "1" does. This will be addressed in the following commits.
Signed-off-by: Taylor Blau <me@ttaylorr.com> --- builtin/pull.c | 2 +- refspec.c | 4 ++-- refspec.h | 9 +++------ remote.c | 4 ++-- transport-helper.c | 2 +- 5 files changed, 9 insertions(+), 12 deletions(-)
diff --git a/builtin/pull.c b/builtin/pull.c index 9c4a00620a..8bbfcce729 100644 --- a/builtin/pull.c +++ b/builtin/pull.c @@ -738,7 +738,7 @@ static const char *get_tracking_branch(const char *remote, const char *refspec) const char *spec_src; const char *merge_branch; - refspec_item_init_or_die(&spec, refspec, REFSPEC_FETCH); + refspec_item_init_or_die(&spec, refspec, 1); spec_src = spec.src; if (!*spec_src || !strcmp(spec_src, "HEAD")) spec_src = "HEAD"; diff --git a/refspec.c b/refspec.c index c6ad515f04..db5a1c34a5 100644 --- a/refspec.c +++ b/refspec.c @@ -233,7 +233,7 @@ void refspec_clear(struct refspec *rs) int valid_fetch_refspec(const char *fetch_refspec_str) { struct refspec_item refspec; - int ret = refspec_item_init(&refspec, fetch_refspec_str, REFSPEC_FETCH); + int ret = refspec_item_init(&refspec, fetch_refspec_str, 1); refspec_item_clear(&refspec); return ret; } @@ -249,7 +249,7 @@ void refspec_ref_prefixes(const struct refspec *rs, if (item->negative) continue; - if (rs->fetch == REFSPEC_FETCH) { + if (rs->fetch) { if (item->exact_sha1) continue; prefix = item->src; diff --git a/refspec.h b/refspec.h index e2b5cc54ef..155494cd3a 100644 --- a/refspec.h +++ b/refspec.h @@ -32,11 +32,8 @@ struct refspec_item { struct string_list; -#define REFSPEC_FETCH 1 -#define REFSPEC_PUSH 0 - -#define REFSPEC_INIT_FETCH { .fetch = REFSPEC_FETCH } -#define REFSPEC_INIT_PUSH { .fetch = REFSPEC_PUSH } +#define REFSPEC_INIT_FETCH { .fetch = 1 } +#define REFSPEC_INIT_PUSH { .fetch = 0 } /** * An array of strings can be parsed into a struct refspec using @@ -47,7 +44,7 @@ struct refspec { int alloc; int nr; - int fetch; + unsigned fetch : 1; }; int refspec_item_init(struct refspec_item *item, const char *refspec, diff --git a/remote.c b/remote.c index e609cf5c56..addd4a9999 100644 --- a/remote.c +++ b/remote.c @@ -143,8 +143,8 @@ static struct remote *make_remote(struct remote_state *remote_state, ret->prune = -1; /* unspecified */ ret->prune_tags = -1; /* unspecified */ ret->name = xstrndup(name, len); - refspec_init(&ret->push, REFSPEC_PUSH); - refspec_init(&ret->fetch, REFSPEC_FETCH); + refspec_init(&ret->push, 0); + refspec_init(&ret->fetch, 1); string_list_init_dup(&ret->server_options); ALLOC_GROW(remote_state->remotes, remote_state->remotes_nr + 1, diff --git a/transport-helper.c b/transport-helper.c index d457b42550..43cd760119 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -162,7 +162,7 @@ static struct child_process *get_helper(struct transport *transport) data->helper = helper; data->no_disconnect_req = 0; - refspec_init(&data->rs, REFSPEC_FETCH); + refspec_init(&data->rs, 1); /* * Open the output as FILE* so strbuf_getline_*() family of
-- 2.49.0.3.gbb7a4a684c.dirty
[PATCH v2 2/4] refspec: replace `refspec_init()` with fetch/push variants
To avoid having a Boolean argument in the refspec_init() function, replace it with two variants:
- `refspec_init_fetch()` - `refspec_init_push()`
to codify the meaning of that Boolean into the function's name itself.
Signed-off-by: Taylor Blau <me@ttaylorr.com> --- refspec.c | 12 +++++++++--- refspec.h | 3 ++- remote.c | 4 ++-- transport-helper.c | 2 +- 4 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/refspec.c b/refspec.c index db5a1c34a5..f6be0c54d7 100644 --- a/refspec.c +++ b/refspec.c @@ -178,10 +178,16 @@ void refspec_item_clear(struct refspec_item *item) item->exact_sha1 = 0; } -void refspec_init(struct refspec *rs, int fetch) +void refspec_init_fetch(struct refspec *rs) { - memset(rs, 0, sizeof(*rs)); - rs->fetch = fetch; + struct refspec blank = REFSPEC_INIT_FETCH; + memcpy(rs, &blank, sizeof(*rs)); +} + +void refspec_init_push(struct refspec *rs) +{ + struct refspec blank = REFSPEC_INIT_PUSH; + memcpy(rs, &blank, sizeof(*rs)); } void refspec_append(struct refspec *rs, const char *refspec) diff --git a/refspec.h b/refspec.h index 155494cd3a..7db68e56c8 100644 --- a/refspec.h +++ b/refspec.h @@ -52,7 +52,8 @@ int refspec_item_init(struct refspec_item *item, const char *refspec, void refspec_item_init_or_die(struct refspec_item *item, const char *refspec, int fetch); void refspec_item_clear(struct refspec_item *item); -void refspec_init(struct refspec *rs, int fetch); +void refspec_init_fetch(struct refspec *rs); +void refspec_init_push(struct refspec *rs); void refspec_append(struct refspec *rs, const char *refspec); __attribute__((format (printf,2,3))) void refspec_appendf(struct refspec *rs, const char *fmt, ...); diff --git a/remote.c b/remote.c index addd4a9999..25af97a44b 100644 --- a/remote.c +++ b/remote.c @@ -143,8 +143,8 @@ static struct remote *make_remote(struct remote_state *remote_state, ret->prune = -1; /* unspecified */ ret->prune_tags = -1; /* unspecified */ ret->name = xstrndup(name, len); - refspec_init(&ret->push, 0); - refspec_init(&ret->fetch, 1); + refspec_init_push(&ret->push); + refspec_init_fetch(&ret->fetch); string_list_init_dup(&ret->server_options); ALLOC_GROW(remote_state->remotes, remote_state->remotes_nr + 1, diff --git a/transport-helper.c b/transport-helper.c index 43cd760119..69391ee7d2 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -162,7 +162,7 @@ static struct child_process *get_helper(struct transport *transport) data->helper = helper; data->no_disconnect_req = 0; - refspec_init(&data->rs, 1); + refspec_init_fetch(&data->rs); /* * Open the output as FILE* so strbuf_getline_*() family of
-- 2.49.0.3.gbb7a4a684c.dirty
[PATCH v2 3/4] refspec: remove refspec_item_init_or_die()
There are two callers of this function, which ensures that a dispatched call to refspec_item_init() does not fail.
In the following commit, we're going to add fetch/push-specific variants of refspec_item_init(), which will turn one function into two. To avoid introducing yet another pair of new functions (such as refspec_item_init_push_or_die() and refspec_item_init_fetch_or_die()), let's remove the thin wrapper entirely.
This duplicates a single line of code among two callers, but thins the refspec.h API by one function, and prevents introducing two more in the following commit.
Note that we still have a trailing Boolean argument in the function `refspec_item_init()`. The following commit will address this.
Signed-off-by: Taylor Blau <me@ttaylorr.com> --- builtin/pull.c | 3 ++- refspec.c | 10 ++-------- refspec.h | 2 -- 3 files changed, 4 insertions(+), 11 deletions(-)
diff --git a/builtin/pull.c b/builtin/pull.c index 8bbfcce729..a68a9955de 100644 --- a/builtin/pull.c +++ b/builtin/pull.c @@ -738,7 +738,8 @@ static const char *get_tracking_branch(const char *remote, const char *refspec) const char *spec_src; const char *merge_branch; - refspec_item_init_or_die(&spec, refspec, 1); + if (!refspec_item_init(&spec, refspec, 1)) + die(_("invalid refspec '%s'"), refspec); spec_src = spec.src; if (!*spec_src || !strcmp(spec_src, "HEAD")) spec_src = "HEAD"; diff --git a/refspec.c b/refspec.c index f6be0c54d7..3aeb697505 100644 --- a/refspec.c +++ b/refspec.c @@ -160,13 +160,6 @@ int refspec_item_init(struct refspec_item *item, const char *refspec, int fetch) return parse_refspec(item, refspec, fetch); } -void refspec_item_init_or_die(struct refspec_item *item, const char *refspec, - int fetch) -{ - if (!refspec_item_init(item, refspec, fetch)) - die(_("invalid refspec '%s'"), refspec); -} - void refspec_item_clear(struct refspec_item *item) { FREE_AND_NULL(item->src); @@ -194,7 +187,8 @@ void refspec_append(struct refspec *rs, const char *refspec) { struct refspec_item item; - refspec_item_init_or_die(&item, refspec, rs->fetch); + if (!refspec_item_init(&item, refspec, rs->fetch)) + die(_("invalid refspec '%s'"), refspec); ALLOC_GROW(rs->items, rs->nr + 1, rs->alloc); rs->items[rs->nr] = item; diff --git a/refspec.h b/refspec.h index 7db68e56c8..614f34554e 100644 --- a/refspec.h +++ b/refspec.h @@ -49,8 +49,6 @@ struct refspec { int refspec_item_init(struct refspec_item *item, const char *refspec, int fetch); -void refspec_item_init_or_die(struct refspec_item *item, const char *refspec, - int fetch); void refspec_item_clear(struct refspec_item *item); void refspec_init_fetch(struct refspec *rs); void refspec_init_push(struct refspec *rs);
-- 2.49.0.3.gbb7a4a684c.dirty
[PATCH v2 4/4] refspec: replace `refspec_item_init()` with fetch/push variants
For similar reasons as in the previous refactoring of `refspec_init()` into `refspec_init_fetch()` and `refspec_init_push()`, apply the same refactoring to `refspec_item_init()`.
Signed-off-by: Taylor Blau <me@ttaylorr.com> --- builtin/fetch.c | 2 +- builtin/pull.c | 2 +- refspec.c | 22 +++++++++++++++++++--- refspec.h | 4 ++-- 4 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/builtin/fetch.c b/builtin/fetch.c index 02af505469..9830c09011 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -586,7 +586,7 @@ static struct ref *get_ref_map(struct remote *remote, struct refspec_item tag_refspec; /* also fetch all tags */ - refspec_item_init(&tag_refspec, TAG_REFSPEC, 0); + refspec_item_init_push(&tag_refspec, TAG_REFSPEC); get_fetch_map(remote_refs, &tag_refspec, &tail, 0); refspec_item_clear(&tag_refspec); } else if (tags == TAGS_DEFAULT && *autotags) { diff --git a/builtin/pull.c b/builtin/pull.c index a68a9955de..a1ebc6ad33 100644 --- a/builtin/pull.c +++ b/builtin/pull.c @@ -738,7 +738,7 @@ static const char *get_tracking_branch(const char *remote, const char *refspec) const char *spec_src; const char *merge_branch; - if (!refspec_item_init(&spec, refspec, 1)) + if (!refspec_item_init_fetch(&spec, refspec)) die(_("invalid refspec '%s'"), refspec); spec_src = spec.src; if (!*spec_src || !strcmp(spec_src, "HEAD")) diff --git a/refspec.c b/refspec.c index 3aeb697505..0775358d96 100644 --- a/refspec.c +++ b/refspec.c @@ -153,13 +153,24 @@ static int parse_refspec(struct refspec_item *item, const char *refspec, int fet return 1; } -int refspec_item_init(struct refspec_item *item, const char *refspec, int fetch) +static int refspec_item_init(struct refspec_item *item, const char *refspec, + int fetch) { memset(item, 0, sizeof(*item)); item->raw = xstrdup(refspec); return parse_refspec(item, refspec, fetch); } +int refspec_item_init_fetch(struct refspec_item *item, const char *refspec) +{ + return refspec_item_init(item, refspec, 1); +} + +int refspec_item_init_push(struct refspec_item *item, const char *refspec) +{ + return refspec_item_init(item, refspec, 0); +} + void refspec_item_clear(struct refspec_item *item) { FREE_AND_NULL(item->src); @@ -186,8 +197,13 @@ void refspec_init_push(struct refspec *rs) void refspec_append(struct refspec *rs, const char *refspec) { struct refspec_item item; + int ret; - if (!refspec_item_init(&item, refspec, rs->fetch)) + if (rs->fetch) + ret = refspec_item_init_fetch(&item, refspec); + else + ret = refspec_item_init_push(&item, refspec); + if (!ret) die(_("invalid refspec '%s'"), refspec); ALLOC_GROW(rs->items, rs->nr + 1, rs->alloc); @@ -233,7 +249,7 @@ void refspec_clear(struct refspec *rs) int valid_fetch_refspec(const char *fetch_refspec_str) { struct refspec_item refspec; - int ret = refspec_item_init(&refspec, fetch_refspec_str, 1); + int ret = refspec_item_init_fetch(&refspec, fetch_refspec_str); refspec_item_clear(&refspec); return ret; } diff --git a/refspec.h b/refspec.h index 614f34554e..8b04f9995e 100644 --- a/refspec.h +++ b/refspec.h @@ -47,8 +47,8 @@ struct refspec { unsigned fetch : 1; }; -int refspec_item_init(struct refspec_item *item, const char *refspec, - int fetch); +int refspec_item_init_fetch(struct refspec_item *item, const char *refspec); +int refspec_item_init_push(struct refspec_item *item, const char *refspec); void refspec_item_clear(struct refspec_item *item); void refspec_init_fetch(struct refspec *rs); void refspec_init_push(struct refspec *rs);
-- 2.49.0.3.gbb7a4a684c.dirty
Re: [PATCH v2 0/4] refspec: treat 'fetch' as a Boolean value
On Tue, Mar 18, 2025 at 3:50 PM Taylor Blau <me@ttaylorr.com> wrote:
Show 63 quoted lines
>
> Here's a small reroll that cleans up some wording in the first patch,
> and drops the accidental inclusion of a stray 'git-diff-pairs' binary
> that was sitting in my working tree at the time of writing the initial
> commit.
>
> Otherwise the series is unchanged, but a range-diff is attached
> nonetheless. Thanks for reviewing :-).
>
> Taylor Blau (4):
> refspec: treat 'fetch' as a Boolean value
> refspec: replace `refspec_init()` with fetch/push variants
> refspec: remove refspec_item_init_or_die()
> refspec: replace `refspec_item_init()` with fetch/push variants
>
> builtin/fetch.c | 2 +-
> builtin/pull.c | 3 ++-
> refspec.c | 38 +++++++++++++++++++++++++++-----------
> refspec.h | 18 +++++++-----------
> remote.c | 4 ++--
> transport-helper.c | 2 +-
> 6 files changed, 40 insertions(+), 27 deletions(-)
>
> Range-diff against v1:
> 1: 7e662acb5a ! 1: 04e1ab8209 refspec: treat 'fetch' as a Boolean value
> @@ Commit message
> refspec: treat 'fetch' as a Boolean value
>
> Since 6d4c057859 (refspec: introduce struct refspec, 2018-05-16), we
> - have constants called REFSPEC_FETCH and REFSPEC_PUSH. This misleadingly
> - suggests that we might introduce other modes in the future.
> + have macros called REFSPEC_FETCH and REFSPEC_PUSH. This confusingly
> + suggests that we might introduce other modes in the future, which, while
> + possible, is highly unlikely.
>
> But these values are treated as a Boolean, and stored in a struct field
> called 'fetch'. So the following:
> @@ Commit message
> if (refspec->fetch) { ... }
>
> are equivalent. Let's avoid renaming the Boolean values "true" and
> - "false" here and remove the two REFSPEC_ constants mentioned above.
> + "false" here and remove the two REFSPEC_ macros mentioned above.
>
> Since this value is truly a Boolean and will only ever take on a value
> of 0 or 1, we can declare it as a single bit unsigned field. In
> @@ builtin/pull.c: static const char *get_tracking_branch(const char *remote, const
> if (!*spec_src || !strcmp(spec_src, "HEAD"))
> spec_src = "HEAD";
>
> - ## git-diff-pairs (new) ##
> - Binary files /dev/null and git-diff-pairs differ
> -
> ## refspec.c ##
> @@ refspec.c: void refspec_clear(struct refspec *rs)
> int valid_fetch_refspec(const char *fetch_refspec_str)
> 2: fd2354dade = 2: c3021b82ce refspec: replace `refspec_init()` with fetch/push variants
> 3: 49b470de61 = 3: 88f6a91c46 refspec: remove refspec_item_init_or_die()
> 4: 95783265fd = 4: f0c323988f refspec: replace `refspec_item_init()` with fetch/push variants
>
> base-commit: c702dd48567cfebca3d4a06b691de97da3f8dc4a
> --
> 2.49.0.3.gbb7a4a684c.dirtyI read through the four patches, and it seems like a straightforward translation of the previous state to essentially a boolean. I usually would have picked an enum based on avoiding passing a 0 or 1 to functions as you have in the intermediate state, but you didn't stop at that intermediate state and refactored the function names which makes the end result pretty nice. Series looks good to me.
Re: [PATCH 5/9] refspec_ref_prefixes(): clean up refspec_item logic
On Thu, Mar 13, 2025 at 01:41:07AM -0400, Jeff King wrote:
Show 15 quoted lines
> > Do you think it'd be worth handling rs->fetch in a switch/case block? At > > least that would allow us to catch unknown values more easily, though it > > seems unlikely we'd ever add any :-). > > ...this whole thing is badly named. It is called "fetch", but the only > two values are true/false. But for some reason we named them > REFSPEC_FETCH and REFSPEC_PUSH. Surely it should be "type" or > "operation" or something if we were going to use an enum and switch? > > I tried to limit the extent of my changes on opinionated matters like > this. I almost dropped the patch entirely, but I did enough > head-scratching to find that latent bug that I didn't want to lose it. > > If you want to fix the name and other clarity issues on top, I don't > mind, though. ;)
OK... I agree that these are at least named confusingly ;-). We could do something like:
--- 8< ---
diff --git a/refspec.c b/refspec.c index c6ad515f04..07d401bc71 100644 --- a/refspec.c +++ b/refspec.c @@ -181,14 +181,14 @@ void refspec_item_clear(struct refspec_item *item) void refspec_init(struct refspec *rs, int fetch) { memset(rs, 0, sizeof(*rs)); - rs->fetch = fetch; + rs->type = fetch ? REFSPEC_FETCH : REFSPEC_PUSH; } void refspec_append(struct refspec *rs, const char *refspec) { struct refspec_item item; - refspec_item_init_or_die(&item, refspec, rs->fetch); + refspec_item_init_or_die(&item, refspec, rs->type); ALLOC_GROW(rs->items, rs->nr + 1, rs->alloc); rs->items[rs->nr] = item; @@ -227,7 +227,7 @@ void refspec_clear(struct refspec *rs) rs->alloc = 0; rs->nr = 0; - rs->fetch = 0; + rs->type = 0; } int valid_fetch_refspec(const char *fetch_refspec_str) @@ -249,11 +249,13 @@ void refspec_ref_prefixes(const struct refspec *rs, if (item->negative) continue; - if (rs->fetch == REFSPEC_FETCH) { + switch (rs->type) { + case REFSPEC_FETCH: if (item->exact_sha1) continue; prefix = item->src; - } else { + break; + case REFSPEC_PUSH: /* * Pushes can have an explicit destination like * "foo:bar", or can implicitly use the src for both @@ -263,6 +265,9 @@ void refspec_ref_prefixes(const struct refspec *rs, prefix = item->dst; else if (item->src && !item->exact_sha1) prefix = item->src; + break; + default: + BUG("unexpected refspec type %d", rs->type); } if (!prefix) diff --git a/refspec.h b/refspec.h index 382ba2d5c1..a20cf883e4 100644 --- a/refspec.h +++ b/refspec.h @@ -32,8 +32,8 @@ struct refspec_item { struct string_list; -#define REFSPEC_INIT_PUSH { .fetch = REFSPEC_PUSH } -#define REFSPEC_INIT_FETCH { .fetch = REFSPEC_FETCH } +#define REFSPEC_INIT_PUSH { .type = REFSPEC_PUSH } +#define REFSPEC_INIT_FETCH { .type = REFSPEC_FETCH } /** * An array of strings can be parsed into a struct refspec using @@ -45,9 +45,9 @@ struct refspec { int nr; enum { - REFSPEC_PUSH + REFSPEC_PUSH, REFSPEC_FETCH, - } fetch; + } type; }; int refspec_item_init(struct refspec_item *item, const char *refspec, --- >8 --- , which gives us the "default" case in the switch statement. But this really is a boolean. I wonder if we should just use 0/1 constants and leave the field name alone. That would turn something like: if (rs->fetch == REFSPEC_FETCH) { ... } into: if (rs->fetch) { ... } , which I think is cleaner. There's no reason to rename true/false to FETCH and PUSH if the field name itself is already 'fetch'. Thanks, Taylor
Re: [PATCH 5/9] refspec_ref_prefixes(): clean up refspec_item logic
Taylor Blau <me@ttaylorr.com> writes:
> OK... I agree that these are at least named confusingly ;-). We could do > something like:
"Type" is so overly generic a word that it is only marginally better than .fetch that is not a Boolean. And in a sense it is worse. At least .fetch hints us that it wants to choose between fetch and something else, most likely push, but .type does not tell us what kind of type it is about.
Do we anticipate that we would acquire a new "type" other than FETCH and PUSH? If not, .fetch = yes/no might be a better choice and if the meaning of the member is so obvious, we may even be able to lose REFSPEC_{FETCH,PUSH} symbols for its value.
On the other hand, if we were to add new kind of refspec used when doing something other than fetch and push (perhaps when bundling? I dunno), then the member specifies how the transfer goes, perhaps, so .transfer = REFSPEC_{FETCH,PUSH,BUNDLE} might be a better choice. But the refspecs are per remote thing (whether the remote is configured or the refspec is used as a one-shot basis fetching from or pushing to a remote) and while you can fetch from a bundle, you cannot push to it, and even if the system is updated to allow pushing into a bundle (which I do not think is such a bad idea), the refspec used in such a case would still be either fetch refspec or push refspec, so perhaps a new, third kind of refspec would not fit well within the design after all.
So, if we can reasonably expect that the choice will stay between fetch and push and we wouldn't be adding a new kind, I think reverting the meaning of .fetch to yes/no and getting rid of REFSPEC_{FETCH,PUSH} may be a better approach. If we stil want to keep the descriptive CPP macro, then perhaps .transfer (or .direction) that lets us choose between fetch or push? I dunno.
Show 12 quoted lines
> , which gives us the "default" case in the switch statement. But this
> really is a boolean. I wonder if we should just use 0/1 constants and
> leave the field name alone. That would turn something like:
>
> if (rs->fetch == REFSPEC_FETCH) { ... }
>
> into:
>
> if (rs->fetch) { ... }
>
> , which I think is cleaner. There's no reason to rename true/false to
> FETCH and PUSH if the field name itself is already 'fetch'.Yup, that makes two of us.
Re: [PATCH 5/9] refspec_ref_prefixes(): clean up refspec_item logic
On Mon, Mar 17, 2025 at 04:25:07PM -0700, Junio C Hamano wrote:
Show 6 quoted lines
> So, if we can reasonably expect that the choice will stay between
> fetch and push and we wouldn't be adding a new kind, I think
> reverting the meaning of .fetch to yes/no and getting rid of
> REFSPEC_{FETCH,PUSH} may be a better approach. If we stil want to
> keep the descriptive CPP macro, then perhaps .transfer (or
> .direction) that lets us choose between fetch or push? I dunno.I suppose adding a new direction/mode/transfer/etc is always possible. But I think that it's unlikely enough to happen any time soon (if at all) in my view that we should simplify the code anyway. If that changes in the future *and* those changes fit will in the design of REFSPEC_FETCH and friends, then we can always resurrect those macros and reinterpret this field.
But I don't think that we should carry this extra baggage around in the meantime if we don't need to.
Show 14 quoted lines
> > , which gives us the "default" case in the switch statement. But this
> > really is a boolean. I wonder if we should just use 0/1 constants and
> > leave the field name alone. That would turn something like:
> >
> > if (rs->fetch == REFSPEC_FETCH) { ... }
> >
> > into:
> >
> > if (rs->fetch) { ... }
> >
> > , which I think is cleaner. There's no reason to rename true/false to
> > FETCH and PUSH if the field name itself is already 'fetch'.
>
> Yup, that makes two of us.Good :-). I'll send a small reroll of the topic anyway to avoid sending a patch that has a git-diff-pairs binary in it :-<.
Thanks, Taylor
[PATCH 6/9] fetch: ask server to advertise HEAD for config-less fetch
If we're not given any refspecs (either on the command line or via config) and we have no branch merge config, then we fetch the remote HEAD into our local FETCH_HEAD. In that case we do not send any ref-prefix option to the server at all, and we see the full advertisement.
But this is sub-optimal. We only care about HEAD, so we can just ask for that, and ignore all of the other refs.
The new test demonstrates a case where we see fewer refs (in this case only one less, but in theory we could be ignoring millions of them).
This also removes the only case where we care about seeing some refs from the other side, but don't add anything to the ref_prefixes list. Cleaning this up means one less maintenance burden. Before this patch, any code which wanted to add to the list had to make sure the list was not empty, since an empty list meant "ask for everything". Now it really means "we are not interested in any refs".
This should let us optimize a few more cases in subsequent patches.
Note that we'll add "HEAD" to the list of prefixes, and later code for updating "refs/remotes/<remote>/HEAD" may likewise do so. In theory this could cause duplicates in the list, but in practice these can't both trigger. We hit our new case only if there are no refspecs, and the "<remote>/HEAD" feature is enabled only when we are fetching from a remote with configured refspecs. We could be defensive with a flag, but it didn't seem worth it to me (the absolute worse case is a useless redundant ref-prefix line sent to the server).
Signed-off-by: Jeff King <peff@peff.net> --- builtin/fetch.c | 8 ++++++++ t/t5702-protocol-v2.sh | 15 +++++++++++++++ 2 files changed, 23 insertions(+)
diff --git a/builtin/fetch.c b/builtin/fetch.c index 95fd0018b9..f142756441 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -1766,6 +1766,14 @@ static int do_fetch(struct transport *transport, branch->merge[i]->src); } } + + /* + * If there are no refs specified to fetch, then we just + * fetch HEAD; mention that to narrow the advertisement. + */ + if (!transport_ls_refs_options.ref_prefixes.nr) + strvec_push(&transport_ls_refs_options.ref_prefixes, + "HEAD"); } if (tags == TAGS_SET || tags == TAGS_DEFAULT) { diff --git a/t/t5702-protocol-v2.sh b/t/t5702-protocol-v2.sh index cea8f92a3d..2f0a52a72d 100755 --- a/t/t5702-protocol-v2.sh +++ b/t/t5702-protocol-v2.sh @@ -679,6 +679,21 @@ test_expect_success 'default refspec is used to filter ref when fetching' ' grep "ref-prefix refs/tags/" log ' +test_expect_success 'set up parent for prefix tests' ' + git init prefix-parent && + git -C prefix-parent commit --allow-empty -m foo && + git -C prefix-parent branch unrelated-branch +' + +test_expect_success 'empty refspec filters refs when fetching' ' + git init configless-child && + + test_when_finished "rm -f log" && + GIT_TRACE_PACKET="$(pwd)/log" \ + git -C configless-child fetch ../prefix-parent && + test_grep ! unrelated-branch log +' + test_expect_success 'fetch supports various ways of have lines' ' rm -rf server client trace && git init server &&
-- 2.49.0.rc1.381.gc60f5426ff
Re: [PATCH 6/9] fetch: ask server to advertise HEAD for config-less fetch
On Sat, Mar 08, 2025 at 10:08:47PM -0500, Jeff King wrote:
Show 18 quoted lines
> If we're not given any refspecs (either on the command line or via > config) and we have no branch merge config, then we fetch the remote > HEAD into our local FETCH_HEAD. In that case we do not send any > ref-prefix option to the server at all, and we see the full > advertisement. > > But this is sub-optimal. We only care about HEAD, so we can just ask > for that, and ignore all of the other refs. > > The new test demonstrates a case where we see fewer refs (in this case > only one less, but in theory we could be ignoring millions of them). > > This also removes the only case where we care about seeing some refs > from the other side, but don't add anything to the ref_prefixes list. > Cleaning this up means one less maintenance burden. Before this patch, > any code which wanted to add to the list had to make sure the list was > not empty, since an empty list meant "ask for everything". Now it really > means "we are not interested in any refs".
Yes. The optimization is nice on its own, but I think this is the real benefit to this patch IMHO.
> This should let us optimize a few more cases in subsequent patches.
;-).
Show 8 quoted lines
> Note that we'll add "HEAD" to the list of prefixes, and later code for > updating "refs/remotes/<remote>/HEAD" may likewise do so. In theory this > could cause duplicates in the list, but in practice these can't both > trigger. We hit our new case only if there are no refspecs, and the > "<remote>/HEAD" feature is enabled only when we are fetching from a > remote with configured refspecs. We could be defensive with a flag, but > it didn't seem worth it to me (the absolute worse case is a useless > redundant ref-prefix line sent to the server).
Yeah, I think that we already do this in some instances that you and I talked about off-list, but I can't remember exactly what I did to provoke it. In either case, the server responds correctly, so I don't think it's so urgent to deal with ATM.
Show 16 quoted lines
> diff --git a/builtin/fetch.c b/builtin/fetch.c > index 95fd0018b9..f142756441 100644 > --- a/builtin/fetch.c > +++ b/builtin/fetch.c > @@ -1766,6 +1766,14 @@ static int do_fetch(struct transport *transport, > branch->merge[i]->src); > } > } > + > + /* > + * If there are no refs specified to fetch, then we just > + * fetch HEAD; mention that to narrow the advertisement. > + */ > + if (!transport_ls_refs_options.ref_prefixes.nr) > + strvec_push(&transport_ls_refs_options.ref_prefixes, > + "HEAD");
Makes sense. If we know that we just want to fetch HEAD into FETCH_HEAD and we haven't already limited the advertisement, we are free to do so now.
Show 12 quoted lines
> if (tags == TAGS_SET || tags == TAGS_DEFAULT) {
> diff --git a/t/t5702-protocol-v2.sh b/t/t5702-protocol-v2.sh
> index cea8f92a3d..2f0a52a72d 100755
> --- a/t/t5702-protocol-v2.sh
> +++ b/t/t5702-protocol-v2.sh
> @@ -679,6 +679,21 @@ test_expect_success 'default refspec is used to filter ref when fetching' '
> grep "ref-prefix refs/tags/" log
> '
>
> +test_expect_success 'set up parent for prefix tests' '
> + git init prefix-parent &&
> + git -C prefix-parent commit --allow-empty -m foo &&Any reason to use a bona-fide "commit" here instead of "test_commit"?
Not a big deal either way, of course, I'm just curious.
Show 10 quoted lines
> + git -C prefix-parent branch unrelated-branch > +' > + > +test_expect_success 'empty refspec filters refs when fetching' ' > + git init configless-child && > + > + test_when_finished "rm -f log" && > + GIT_TRACE_PACKET="$(pwd)/log" \ > + git -C configless-child fetch ../prefix-parent && > + test_grep ! unrelated-branch log
Very clean, nice.
Thanks, Taylor
Re: [PATCH 6/9] fetch: ask server to advertise HEAD for config-less fetch
On Wed, Mar 12, 2025 at 05:43:24PM -0400, Taylor Blau wrote:
Show 13 quoted lines
> > Note that we'll add "HEAD" to the list of prefixes, and later code for > > updating "refs/remotes/<remote>/HEAD" may likewise do so. In theory this > > could cause duplicates in the list, but in practice these can't both > > trigger. We hit our new case only if there are no refspecs, and the > > "<remote>/HEAD" feature is enabled only when we are fetching from a > > remote with configured refspecs. We could be defensive with a flag, but > > it didn't seem worth it to me (the absolute worse case is a useless > > redundant ref-prefix line sent to the server). > > Yeah, I think that we already do this in some instances that you and I > talked about off-list, but I can't remember exactly what I did to > provoke it. In either case, the server responds correctly, so I don't > think it's so urgent to deal with ATM.
Yeah, I thought we did, too, but after looking at the code, I doubt it. I think we were always playing with exact-oid refspecs, so we'd always hit the "if (rs->nr)" side of that conditional.
In order to hit the case touched by this patch, you can't have refspecs, but still need to somehow get a true answer out of uses_remote_tracking().
Show 7 quoted lines
> > +test_expect_success 'set up parent for prefix tests' ' > > + git init prefix-parent && > > + git -C prefix-parent commit --allow-empty -m foo && > > Any reason to use a bona-fide "commit" here instead of "test_commit"? > > Not a big deal either way, of course, I'm just curious.
Nope, I mostly just reach for "git commit" without thinking because that's what I naturally do while debugging or exploring.
But since you asked...;)
I do find test_commit a bit bloated in general. It takes several commands versus one, leaves cruft files in the working tree (that you need to care about not using again, lest your commit fail with "no changes"), and by default makes tags that sometimes cause confusion about fetching, reachability, and so on.
The one thing it does do that git-commit doesn't is increment test_tick. That sometimes is important (if you care about traversal ordering), but usually doesn't.
So I dunno. Maybe I am a bad person for not using test_commit by default and we should have a style suggestion there.
-Peff
Re: [PATCH 6/9] fetch: ask server to advertise HEAD for config-less fetch
Jeff King <peff@peff.net> writes:
Show 21 quoted lines
>> Any reason to use a bona-fide "commit" here instead of "test_commit"? >> >> Not a big deal either way, of course, I'm just curious. > > Nope, I mostly just reach for "git commit" without thinking because > that's what I naturally do while debugging or exploring. > > But since you asked...;) > > I do find test_commit a bit bloated in general. It takes several > commands versus one, leaves cruft files in the working tree (that you > need to care about not using again, lest your commit fail with "no > changes"), and by default makes tags that sometimes cause confusion > about fetching, reachability, and so on. > > The one thing it does do that git-commit doesn't is increment test_tick. > That sometimes is important (if you care about traversal ordering), but > usually doesn't. > > So I dunno. Maybe I am a bad person for not using test_commit by default > and we should have a style suggestion there.
FWIW, my assessment on test_commit exactly matches yours. The cruft files it creates are often not what I want, the tags left by default are even worse, and the only good thing about it is the tick support but even that does not make much of difference in many scenarios.
To its defence, I _suspect_ the automated creation of default changes were useful back when there were no "allow-empty" support. But I think it outlived its usefulness.
Re: [PATCH 6/9] fetch: ask server to advertise HEAD for config-less fetch
On Thu, Mar 13, 2025 at 05:26:41AM -0700, Junio C Hamano wrote:
Show 32 quoted lines
> Jeff King <peff@peff.net> writes: > > >> Any reason to use a bona-fide "commit" here instead of "test_commit"? > >> > >> Not a big deal either way, of course, I'm just curious. > > > > Nope, I mostly just reach for "git commit" without thinking because > > that's what I naturally do while debugging or exploring. > > > > But since you asked...;) > > > > I do find test_commit a bit bloated in general. It takes several > > commands versus one, leaves cruft files in the working tree (that you > > need to care about not using again, lest your commit fail with "no > > changes"), and by default makes tags that sometimes cause confusion > > about fetching, reachability, and so on. > > > > The one thing it does do that git-commit doesn't is increment test_tick. > > That sometimes is important (if you care about traversal ordering), but > > usually doesn't. > > > > So I dunno. Maybe I am a bad person for not using test_commit by default > > and we should have a style suggestion there. > > FWIW, my assessment on test_commit exactly matches yours. The cruft > files it creates are often not what I want, the tags left by default > are even worse, and the only good thing about it is the tick support > but even that does not make much of difference in many scenarios. > > To its defence, I _suspect_ the automated creation of default > changes were useful back when there were no "allow-empty" support. > But I think it outlived its usefulness.
I don't disagree, but converting the 2,570 instances of 'test_commit' that I have in my tree would be difficult to do without disrupting lots of in-flight work ;-).
Thanks, Taylor
[PATCH 7/9] fetch: stop protecting additions to ref-prefix list
When using the ref-prefix feature of protocol v2, a client which sends no prefixes at all will get the full advertisement. And so the code in git-fetch was historically loose about setting up that list based on our refspecs. There were cases where we needed to know about some refs, so we just didn't add anything to the ref-prefix list.
And hence further code, like that for tag-following and updating origin/HEAD, had to be careful about adding to an empty list. E.g., see the bug fixed by bd52d9a058 (fetch: fix following tags when fetching specific OID, 2025-03-07).
But the previous commit removed the last such case, and now we know an empty ref-prefix list (at least inside git-fetch's do_fetch() function) means that we really don't need to see any refs. So we can drop those extra conditionals.
This simplifies the code a little. But it also means that some cases can now use ref prefixes when they would not otherwise. As the test shows, fetching an exact oid into a local ref can now avoid enumerating all of the refs. The refspec itself doesn't need to know about any remote refs, and the tag auto-following can just ask about refs/tags/.
The same is true for asking about HEAD to update the local origin/HEAD. I didn't add a test for that yet, though, as we can optimize it even further.
Signed-off-by: Jeff King <peff@peff.net> --- builtin/fetch.c | 10 ++++------ t/t5702-protocol-v2.sh | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/builtin/fetch.c b/builtin/fetch.c index f142756441..6ab101fa6d 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -1778,16 +1778,14 @@ static int do_fetch(struct transport *transport, if (tags == TAGS_SET || tags == TAGS_DEFAULT) { must_list_refs = 1; - if (transport_ls_refs_options.ref_prefixes.nr) - strvec_push(&transport_ls_refs_options.ref_prefixes, - "refs/tags/"); + strvec_push(&transport_ls_refs_options.ref_prefixes, + "refs/tags/"); } if (uses_remote_tracking(transport, rs)) { must_list_refs = 1; - if (transport_ls_refs_options.ref_prefixes.nr) - strvec_push(&transport_ls_refs_options.ref_prefixes, - "HEAD"); + strvec_push(&transport_ls_refs_options.ref_prefixes, + "HEAD"); } if (must_list_refs) { diff --git a/t/t5702-protocol-v2.sh b/t/t5702-protocol-v2.sh index 2f0a52a72d..626deb05f0 100755 --- a/t/t5702-protocol-v2.sh +++ b/t/t5702-protocol-v2.sh @@ -682,6 +682,7 @@ test_expect_success 'default refspec is used to filter ref when fetching' ' test_expect_success 'set up parent for prefix tests' ' git init prefix-parent && git -C prefix-parent commit --allow-empty -m foo && + git -C prefix-parent tag my-tag && git -C prefix-parent branch unrelated-branch ' @@ -694,6 +695,19 @@ test_expect_success 'empty refspec filters refs when fetching' ' test_grep ! unrelated-branch log ' +test_expect_success 'exact oid fetch with tag following' ' + git init exact-oid-tags && + + commit=$(git -C prefix-parent rev-parse --verify HEAD) && + + test_when_finished "rm -f log" && + GIT_TRACE_PACKET="$(pwd)/log" \ + git -C exact-oid-tags fetch ../prefix-parent \ + $commit:refs/heads/exact && + test_grep ! unrelated-branch log && + git -C exact-oid-tags rev-parse --verify my-tag +' + test_expect_success 'fetch supports various ways of have lines' ' rm -rf server client trace && git init server &&
-- 2.49.0.rc1.381.gc60f5426ff
Re: [PATCH 7/9] fetch: stop protecting additions to ref-prefix list
On Sat, Mar 08, 2025 at 10:10:39PM -0500, Jeff King wrote:
> --- > builtin/fetch.c | 10 ++++------ > t/t5702-protocol-v2.sh | 14 ++++++++++++++ > 2 files changed, 18 insertions(+), 6 deletions(-)
No comments from me here, since this is very clearly explained and setup within the context of the rest of the series. The end result is very, very nice indeed.
Thanks, Taylor
[PATCH 8/9] fetch: avoid ls-refs only to ask for HEAD symref update
When we fetch from a configured remote, we may try to update the local refs/remotes/<origin>/HEAD, and so we ask the server to advertise its HEAD to us.
But if we aren't otherwise asking about any refs at all, then we know this HEAD update can never happen! To consider a new value for HEAD, the set_head() function uses guess_remote_head(). And even if it sees an explicit symref value for HEAD, it will only report that as a match if we also saw that remote ref advertised, and it mapped to a local tracking ref via get_fetch_map().
In other words, a fetch like this:
git fetch origin $exact_oid:refs/heads/foo
can never update HEAD, because we will never have fetched (nor even see the advertisement for) the ref that HEAD points to.
Currently the command above will still call ls-refs to ask about the HEAD, even though it is pointless. This patch teaches it to skip the ls-refs call entirely in this case, which avoids a round-trip to the server.
Signed-off-by: Jeff King <peff@peff.net> --- This describes the current behavior of set_head(). But I do wonder if it should be more aggressive. If we found out that the other side is pointing to refs/heads/foo, should we map that ourselves to find that it would be stored as refs/remotes/origin/foo, and update HEAD anyway?
That would let us actually update HEAD in this case (and also in many other cases where we fetch a specific ref that is not pointed to by the remote HEAD).
OTOH, it would mean we basically always do an ls-refs just to find out about HEAD. Which is working against the optimization from e70a3030e7 (fetch: do not list refs if fetching only hashes, 2018-09-27), and the code before this patch might even be considered a regression.
I also wonder if the uses_remote_tracking() check added by 6c915c3f85 (fetch: do not ask for HEAD unnecessarily, 2024-12-06) is not quite right. It is looking for a configured remote along with at least one refspec with a destination. But wouldn't it need to have both a source ref (not an exact oid) and a destination to work? I suspect we could do the fix there and end up with the same optimized behavior as I have here.
builtin/fetch.c | 5 ++--- t/t5702-protocol-v2.sh | 13 +++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/builtin/fetch.c b/builtin/fetch.c index 6ab101fa6d..c26866e674 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -1782,11 +1782,10 @@ static int do_fetch(struct transport *transport, "refs/tags/"); } - if (uses_remote_tracking(transport, rs)) { - must_list_refs = 1; + if (must_list_refs && + uses_remote_tracking(transport, rs)) strvec_push(&transport_ls_refs_options.ref_prefixes, "HEAD"); - } if (must_list_refs) { trace2_region_enter("fetch", "remote_refs", the_repository); diff --git a/t/t5702-protocol-v2.sh b/t/t5702-protocol-v2.sh index 626deb05f0..4d0cbe9872 100755 --- a/t/t5702-protocol-v2.sh +++ b/t/t5702-protocol-v2.sh @@ -708,6 +708,19 @@ test_expect_success 'exact oid fetch with tag following' ' git -C exact-oid-tags rev-parse --verify my-tag ' +test_expect_success 'exact oid fetch avoids pointless HEAD request' ' + git init exact-oid-head && + git -C exact-oid-head remote add origin ../prefix-parent && + + commit=$(git -C prefix-parent rev-parse --verify HEAD) && + + test_when_finished "rm -f log" && + GIT_TRACE_PACKET="$(pwd)/log" \ + git -C exact-oid-head fetch --no-tags origin \ + $commit:refs/heads/exact && + test_grep ! command=ls-refs log +' + test_expect_success 'fetch supports various ways of have lines' ' rm -rf server client trace && git init server &&
-- 2.49.0.rc1.381.gc60f5426ff
Re: [PATCH 8/9] fetch: avoid ls-refs only to ask for HEAD symref update
Jeff King <peff@peff.net> writes:
> When we fetch from a configured remote, we may try to update the local > refs/remotes/<origin>/HEAD, and so we ask the server to advertise its > HEAD to us.
Yes.
I _think_ flipping the remote-tracking HEAD should be tied to the case where we are fetching to update the remote-tracking branches.
Show 13 quoted lines
> But if we aren't otherwise asking about any refs at all, then we know > this HEAD update can never happen! To consider a new value for HEAD, > the set_head() function uses guess_remote_head(). And even if it sees an > explicit symref value for HEAD, it will only report that as a match if > we also saw that remote ref advertised, and it mapped to a local > tracking ref via get_fetch_map(). > > In other words, a fetch like this: > > git fetch origin $exact_oid:refs/heads/foo > > can never update HEAD, because we will never have fetched (nor even see > the advertisement for) the ref that HEAD points to.
Good observation, and I actually think it would be counter-intuitive if remote HEAD gets updated by a fetch that does not even update the remote-tracking branches.
My preference is to keep the rule simple.
If you fetch using the configured fetch refspec, i.e. "git fetch
[<remote>]" without any refspec command line arguments, that is
an operation to maintain your remote-tracking branches for that
remote up-to-date, hence we also try to flip remote-tracking
HEAD (if you told us to) during such a fetch.If you are doing a single-object fetch (perhaps as a lazy-fill from promisor remote), I do not think I want to see anything else happen than that the single-object comes here.
Thanks.
Re: [PATCH 8/9] fetch: avoid ls-refs only to ask for HEAD symref update
On Thu, Mar 13, 2025 at 08:53:53AM -0700, Junio C Hamano wrote:
Show 22 quoted lines
> > In other words, a fetch like this: > > > > git fetch origin $exact_oid:refs/heads/foo > > > > can never update HEAD, because we will never have fetched (nor even see > > the advertisement for) the ref that HEAD points to. > > Good observation, and I actually think it would be counter-intuitive > if remote HEAD gets updated by a fetch that does not even update the > remote-tracking branches. > > My preference is to keep the rule simple. > > If you fetch using the configured fetch refspec, i.e. "git fetch > [<remote>]" without any refspec command line arguments, that is > an operation to maintain your remote-tracking branches for that > remote up-to-date, hence we also try to flip remote-tracking > HEAD (if you told us to) during such a fetch. > > If you are doing a single-object fetch (perhaps as a lazy-fill from > promisor remote), I do not think I want to see anything else happen > than that the single-object comes here.
That was my intuition, too, but there's a case in between. Doing:
git fetch origin main
will update HEAD, too (with the current code). But if and only if it points to "main"! Is that something we want to keep? It feels like it could sometimes be useful, but it is awfully hard to explain.
So I could see going in two different directions:
1. Only do the HEAD update when we are using the configured refspecs.
2. Do the HEAD update even when we are not fetching its destination,
but do not otherwise trigger ls-refs to discover it (so basically,
not on object-only fetches). This kicks in for more cases, but is
hard to explain.Both are a user-visible divergence from how the feature behaves now (and so I did not want to touch that in my series), but if we are all in agreement, we can fix it on top. I do think option 1 (i.e., what you are suggesting in your email) is how I would have done it if starting from scratch. And the current rules are weird enough and the feature is new enough that I think it is OK to change.
-Peff
Re: [PATCH 8/9] fetch: avoid ls-refs only to ask for HEAD symref update
Jeff King <peff@peff.net> writes:
Show 5 quoted lines
> That was my intuition, too, but there's a case in between. Doing: > > git fetch origin main > > will update HEAD, too (with the current code).
Good point, and I do not think it should.
> But if and only if it > points to "main"! Is that something we want to keep? It feels like it > could sometimes be useful, but it is awfully hard to explain.
Again, I do not think it should update HEAD. Is this something hard to fix? When I say "please tell me where their main branch is", that is what I mean. I didn't ask about their HEAD, period. Unlike "git fetch" (that default to 'origin') and "git fetch origin", which is "please update our view of 'origin'" and should update HEAD if it is missing (or configured to be updated every time).
Show 15 quoted lines
> So I could see going in two different directions: > > 1. Only do the HEAD update when we are using the configured refspecs. > > 2. Do the HEAD update even when we are not fetching its destination, > but do not otherwise trigger ls-refs to discover it (so basically, > not on object-only fetches). This kicks in for more cases, but is > hard to explain. > > Both are a user-visible divergence from how the feature behaves now (and > so I did not want to touch that in my series), but if we are all in > agreement, we can fix it on top. I do think option 1 (i.e., what you are > suggesting in your email) is how I would have done it if starting from > scratch. And the current rules are weird enough and the feature is new > enough that I think it is OK to change.
Yup, I do think #1 is the way to go.
Thanks.
[PATCH 0/2] limiting followRemoteHEAD being used
On Mon, Mar 17, 2025 at 12:01:21PM -0700, Junio C Hamano wrote:
Show 17 quoted lines
> > So I could see going in two different directions: > > > > 1. Only do the HEAD update when we are using the configured refspecs. > > > > 2. Do the HEAD update even when we are not fetching its destination, > > but do not otherwise trigger ls-refs to discover it (so basically, > > not on object-only fetches). This kicks in for more cases, but is > > hard to explain. > > > > Both are a user-visible divergence from how the feature behaves now (and > > so I did not want to touch that in my series), but if we are all in > > agreement, we can fix it on top. I do think option 1 (i.e., what you are > > suggesting in your email) is how I would have done it if starting from > > scratch. And the current rules are weird enough and the feature is new > > enough that I think it is OK to change. > > Yup, I do think #1 is the way to go.
It turned out to be pretty easy to do; the code ends up even shorter. These patches apply on top of jk/fetch-ref-prefix-cleanup.
There is one interesting case we haven't discussed. What should:
git fetch origin HEAD
do with respect to refs/remotes/origin/HEAD? Right now it does nothing (at least with the v2 protocol). We ask about HEAD, but since we didn't fetch the matching ref, set_head() won't accept it. And after my patches, we would not even try to call set_head() at all (since we are not using the full refspecs).
But it's also something I could see somebody doing to try to update refs/remotes/origin/HEAD. I've left it alone for now, since my series does not change the behavior either way. But it might be something we could do on top (though it gets funny, because with the code as it is now, we'd have to ask for all of refs/heads/ to see the pointed-to branch advertised).
Anyway, here's what I think we should do now. The first one is the change we discussed, and the second is a related optimization I noticed.
[1/2]: fetch: only respect followRemoteHEAD with configured refspecs [2/2]: fetch: don't ask for remote HEAD if followRemoteHEAD is "never"
Documentation/config/remote.adoc | 3 ++- builtin/fetch.c | 29 +++++++---------------------- t/t5505-remote.sh | 2 +- t/t5510-fetch.sh | 19 ++++++++++++++++++- 4 files changed, 28 insertions(+), 25 deletions(-)
[PATCH 1/2] fetch: only respect followRemoteHEAD with configured refspecs
The new followRemoteHEAD feature is triggered for almost every fetch, causing us to ask the server about the remote "HEAD" and to consider updating our local tracking HEAD symref. This patch limits the feature only to the case when we are fetching a remote using its configured refspecs (typically into its refs/remotes/ hierarchy). There are two reasons for this.
One is efficiency. E.g., the fixes in 6c915c3f85 (fetch: do not ask for HEAD unnecessarily, 2024-12-06) and 20010b8c20 (fetch: avoid ls-refs only to ask for HEAD symref update, 2025-03-08) were aimed at reducing the work we do when we would not be able to update HEAD anyway. But they do not quite cover all cases. The remaining one is:
git fetch origin refs/heads/foo:refs/remotes/origin/foo
which _sometimes_ can update HEAD, but usually not. And that leads us to the second point, which is being simple and explainable.
The code for updating the tracking HEAD symref requires both that we learned which ref the remote HEAD points at, and that the server advertised that ref to us. But because the v2 protocol narrows the server's advertisement, the command above would not typically update HEAD at all, unless it happened to point to the "foo" branch. Or even weirder, it probably _would_ update if the server is very old and supports only the v0 protocol, which always gives a full advertisement.
This creates confusing behavior for the user: sometimes we may try to update HEAD and sometimes not, depending on vague rules.
One option here would be to loosen the update code to accept the remote HEAD even if the server did not advertise that ref. I think that could work, but it may also lead to interesting corner cases (e.g., creating a dangling symref locally, even though the branch is not unborn on the server, if we happen not to have fetched it).
So let's instead simplify the rules: we'll only consider updating the tracking HEAD symref when we're doing a full fetch of the remote's configured refs. This is easy to implement; we can just set a flag at the moment we realize we're using the configured refspecs. And we can drop the special case code added by 6c915c3f85 and 20010b8c20, since this covers those cases. The existing tests from those commits still pass.
In t5505, an incidental call to "git fetch <remote> <refspec>" updated HEAD, which caused us to adjust the test in 3f763ddf28 (fetch: set remote/HEAD if it does not exist, 2024-11-22). We can now adjust that back to how it was before the feature was added.
Even though t5505 is incidentally testing our new desired behavior, we'll add an explicit test in t5510 to make sure it is covered.
Signed-off-by: Jeff King <peff@peff.net> --- The test is weird with the way it calls "cd", but it matches the nearby ones. I think that could all be simplified, but I'll leave that for another day (or never).
Documentation/config/remote.adoc | 3 ++- builtin/fetch.c | 25 ++++++------------------- t/t5505-remote.sh | 2 +- t/t5510-fetch.sh | 14 ++++++++++++++ 4 files changed, 23 insertions(+), 21 deletions(-)
diff --git a/Documentation/config/remote.adoc b/Documentation/config/remote.adoc index 25fe219d10..91e46f66f5 100644 --- a/Documentation/config/remote.adoc +++ b/Documentation/config/remote.adoc @@ -108,7 +108,8 @@ the values inherited from a lower priority configuration files (e.g. `$HOME/.gitconfig`). remote.<name>.followRemoteHEAD:: - How linkgit:git-fetch[1] should handle updates to `remotes/<name>/HEAD`. + How linkgit:git-fetch[1] should handle updates to `remotes/<name>/HEAD` + when fetching using the configured refspecs of a remote. The default value is "create", which will create `remotes/<name>/HEAD` if it exists on the remote, but not locally; this will not touch an already existing local reference. Setting it to "warn" will print diff --git a/builtin/fetch.c b/builtin/fetch.c index 02af505469..66f5ae31b6 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -1691,21 +1691,6 @@ static int set_head(const struct ref *remote_refs, struct remote *remote) return result; } -static int uses_remote_tracking(struct transport *transport, struct refspec *rs) -{ - if (!remote_is_configured(transport->remote, 0)) - return 0; - - if (!rs->nr) - rs = &transport->remote->fetch; - - for (int i = 0; i < rs->nr; i++) - if (rs->items[i].dst) - return 1; - - return 0; -} - static int do_fetch(struct transport *transport, struct refspec *rs, const struct fetch_config *config) @@ -1720,6 +1705,7 @@ static int do_fetch(struct transport *transport, TRANSPORT_LS_REFS_OPTIONS_INIT; struct fetch_head fetch_head = { 0 }; struct strbuf err = STRBUF_INIT; + int do_set_head = 0; if (tags == TAGS_DEFAULT) { if (transport->remote->fetch_tags == 2) @@ -1740,9 +1726,11 @@ static int do_fetch(struct transport *transport, } else { struct branch *branch = branch_get(NULL); - if (transport->remote->fetch.nr) + if (transport->remote->fetch.nr) { refspec_ref_prefixes(&transport->remote->fetch, &transport_ls_refs_options.ref_prefixes); + do_set_head = 1; + } if (branch_has_merge_config(branch) && !strcmp(branch->remote_name, transport->remote->name)) { int i; @@ -1765,8 +1753,7 @@ static int do_fetch(struct transport *transport, strvec_push(&transport_ls_refs_options.ref_prefixes, "refs/tags/"); - if (transport_ls_refs_options.ref_prefixes.nr && - uses_remote_tracking(transport, rs)) + if (do_set_head) strvec_push(&transport_ls_refs_options.ref_prefixes, "HEAD"); @@ -1918,7 +1905,7 @@ static int do_fetch(struct transport *transport, "you need to specify exactly one branch with the --set-upstream option")); } } - if (set_head(remote_refs, transport->remote)) + if (do_set_head && set_head(remote_refs, transport->remote)) ; /* * Way too many cases where this can go wrong diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh index bb7e0c6879..fed5823e85 100755 --- a/t/t5505-remote.sh +++ b/t/t5505-remote.sh @@ -499,7 +499,7 @@ test_expect_success 'set-head --auto has no problem w/multiple HEADs' ' cd test && git fetch two "refs/heads/*:refs/remotes/two/*" && git remote set-head --auto two >output 2>&1 && - echo "${SQ}two/HEAD${SQ} is unchanged and points to ${SQ}main${SQ}" >expect && + echo "${SQ}two/HEAD${SQ} is now created and points to ${SQ}main${SQ}" >expect && test_cmp expect output ) ' diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh index 5f350facf5..ad23dd11ef 100755 --- a/t/t5510-fetch.sh +++ b/t/t5510-fetch.sh @@ -250,6 +250,20 @@ test_expect_success "fetch test followRemoteHEAD always" ' ) ' +test_expect_success 'followRemoteHEAD does not kick in with refspecs' ' + test_when_finished "git config unset remote.origin.followRemoteHEAD" && + ( + cd "$D" && + cd two && + git remote set-head origin other && + git config set remote.origin.followRemoteHEAD always && + git fetch origin refs/heads/main:refs/remotes/origin/main && + echo refs/remotes/origin/other >expect && + git symbolic-ref refs/remotes/origin/HEAD >actual && + test_cmp expect actual + ) +' + test_expect_success 'fetch --prune on its own works as expected' ' cd "$D" && git clone . prune &&
-- 2.49.0.390.gc9996a6a6c
Re: [PATCH 1/2] fetch: only respect followRemoteHEAD with configured refspecs
On Tue, Mar 18, 2025 at 01:40:17AM -0400, Jeff King wrote:
Show 9 quoted lines
> @@ -1918,7 +1905,7 @@ static int do_fetch(struct transport *transport, > "you need to specify exactly one branch with the --set-upstream option")); > } > } > - if (set_head(remote_refs, transport->remote)) > + if (do_set_head && set_head(remote_refs, transport->remote)) > ; > /* > * Way too many cases where this can go wrong
This empty "if" statement is a little odd, though not the fault of your patch. I probably would have rewritten this like:
if (do_set_head) {
/*
* Way too many cases where this can go wrong
* so let's just fail silently for now.
*/
set_head(remote, transport->remote);
}, but it's obviously NBD here, just something I noticed idly while reading the rest of the patch, which looks great to me.
Thanks, Taylor
[PATCH 2/2] fetch: don't ask for remote HEAD if followRemoteHEAD is "never"
When we are going to consider updating the refs/remotes/*/HEAD symref, we have to ask the remote side where its HEAD points. But if we know that the feature is disabled by config, we don't need to bother!
This saves a little bit of work and network communication for the server. And even a little bit of effort on the client, as our local set_head() function did a bit of work matching the remote HEAD before realizing that we're not going to do anything with it.
Signed-off-by: Jeff King <peff@peff.net> --- I guess we could leave the check inside set_head() in case somebody else ever called it without checking the value of follow_remote_head. But it's a static function that is called once, so I'd rather not keep the dead code around.
builtin/fetch.c | 6 ++---- t/t5510-fetch.sh | 5 ++++- 2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/builtin/fetch.c b/builtin/fetch.c index 66f5ae31b6..3658509740 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -1643,9 +1643,6 @@ static int set_head(const struct ref *remote_refs, struct remote *remote) string_list_append(&heads, strip_refshead(ref->name)); } - if (follow_remote_head == FOLLOW_REMOTE_NEVER) - goto cleanup; - if (!heads.nr) result = 1; else if (heads.nr > 1) @@ -1729,7 +1726,8 @@ static int do_fetch(struct transport *transport, if (transport->remote->fetch.nr) { refspec_ref_prefixes(&transport->remote->fetch, &transport_ls_refs_options.ref_prefixes); - do_set_head = 1; + if (transport->remote->follow_remote_head != FOLLOW_REMOTE_NEVER) + do_set_head = 1; } if (branch_has_merge_config(branch) && !strcmp(branch->remote_name, transport->remote->name)) { diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh index ad23dd11ef..5f0eb5684e 100755 --- a/t/t5510-fetch.sh +++ b/t/t5510-fetch.sh @@ -119,7 +119,10 @@ test_expect_success "fetch test followRemoteHEAD never" ' cd two && git update-ref --no-deref -d refs/remotes/origin/HEAD && git config set remote.origin.followRemoteHEAD "never" && - git fetch && + GIT_TRACE_PACKET=$PWD/trace.out git fetch && + # Confirm that we do not even ask for HEAD when we are + # not going to act on it. + test_grep ! "ref-prefix HEAD" trace.out && test_must_fail git rev-parse --verify refs/remotes/origin/HEAD ) '
-- 2.49.0.390.gc9996a6a6c
Re: [PATCH 0/2] limiting followRemoteHEAD being used
Jeff King <peff@peff.net> writes:
Show 16 quoted lines
> There is one interesting case we haven't discussed. What should: > > git fetch origin HEAD > > do with respect to refs/remotes/origin/HEAD? Right now it does nothing > (at least with the v2 protocol). We ask about HEAD, but since we didn't > fetch the matching ref, set_head() won't accept it. And after my > patches, we would not even try to call set_head() at all (since we are > not using the full refspecs). > > But it's also something I could see somebody doing to try to update > refs/remotes/origin/HEAD. I've left it alone for now, since my series > does not change the behavior either way. But it might be something we > could do on top (though it gets funny, because with the code as it is > now, we'd have to ask for all of refs/heads/ to see the pointed-to > branch advertised).
With v2 protocol, we have direct knowledge of where their HEAD points at (when we ask for it), so we shouldn't even have to know about what they have under "refs/heads/". I do not think it is within our contract that we'd somehow make sure that HEAD in a remote-tracking hierarchy is not dangling, or something.
In any case, I agree that it is sensible to leave it out of these changes for now.
Thanks.
Re: [PATCH 0/2] limiting followRemoteHEAD being used
On Tue, Mar 18, 2025 at 12:18:41PM -0700, Junio C Hamano wrote:
Show 27 quoted lines
> Jeff King <peff@peff.net> writes: > > > There is one interesting case we haven't discussed. What should: > > > > git fetch origin HEAD > > > > do with respect to refs/remotes/origin/HEAD? Right now it does nothing > > (at least with the v2 protocol). We ask about HEAD, but since we didn't > > fetch the matching ref, set_head() won't accept it. And after my > > patches, we would not even try to call set_head() at all (since we are > > not using the full refspecs). > > > > But it's also something I could see somebody doing to try to update > > refs/remotes/origin/HEAD. I've left it alone for now, since my series > > does not change the behavior either way. But it might be something we > > could do on top (though it gets funny, because with the code as it is > > now, we'd have to ask for all of refs/heads/ to see the pointed-to > > branch advertised). > > With v2 protocol, we have direct knowledge of where their HEAD > points at (when we ask for it), so we shouldn't even have to know > about what they have under "refs/heads/". I do not think it is > within our contract that we'd somehow make sure that HEAD in a > remote-tracking hierarchy is not dangling, or something. > > In any case, I agree that it is sensible to leave it out of these > changes for now.
Ditto, and I am quite happy with the end-state of this series.
> Thanks.
Thanks, Taylor
[PATCH 9/9] fetch: use ref prefix list to skip ls-refs
In git-fetch we have an optimization to avoid issuing an ls-refs command to the server if we don't care about the value of any refs (e.g., because we are fetching exact object ids), saving a round-trip to the server. This comes from e70a3030e7 (fetch: do not list refs if fetching only hashes, 2018-09-27).
It uses an explicit flag "must_list_refs" to decide when we need to do so. That was needed back then, because the list of ref-prefixes was not always complete. If it was empty, it did not necessarily mean that we were not interested in any refs). But that is no longer the case; an empty list of prefixes means that we truly do not care about any refs.
And so rather than an explicit flag, we can just check whether we are interested in any ref prefixes. This simplifies the code slightly, as there is now a single source of truth for the decision.
It also fixes a bug in / optimizes a very unlikely case, which is:
git fetch $remote ^foo $oid
I.e., a negative refspec combined with an exact oid fetch. This is somewhat nonsense, in that there are no positive refspecs mentioning refs to countermand with the negative one. But we should be able to do this without issuing an ls-refs command (excluding "foo" from the empty set will obviously still be the empty set).
However, the current code does not do so. The negative refspec is not counted as a noop in un-setting the must_list_refs flag (hardly the fault of e70a3030e7, as negative refspecs did not appear until much later). But by using the prefix list as a source of truth, this naturally just works; the negative refspec does not add a prefix to ask about, and hence does not trigger the ls-refs call.
This is esoteric enough that I didn't bother adding a test. The real value here is in the code simplification.
Signed-off-by: Jeff King <peff@peff.net> --- builtin/fetch.c | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-)
diff --git a/builtin/fetch.c b/builtin/fetch.c index c26866e674..02af505469 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -1718,7 +1718,6 @@ static int do_fetch(struct transport *transport, const struct ref *remote_refs; struct transport_ls_refs_options transport_ls_refs_options = TRANSPORT_LS_REFS_OPTIONS_INIT; - int must_list_refs = 1; struct fetch_head fetch_head = { 0 }; struct strbuf err = STRBUF_INIT; @@ -1737,21 +1736,7 @@ static int do_fetch(struct transport *transport, } if (rs->nr) { - int i; - refspec_ref_prefixes(rs, &transport_ls_refs_options.ref_prefixes); - - /* - * We can avoid listing refs if all of them are exact - * OIDs - */ - must_list_refs = 0; - for (i = 0; i < rs->nr; i++) { - if (!rs->items[i].exact_sha1) { - must_list_refs = 1; - break; - } - } } else { struct branch *branch = branch_get(NULL); @@ -1776,18 +1761,20 @@ static int do_fetch(struct transport *transport, "HEAD"); } - if (tags == TAGS_SET || tags == TAGS_DEFAULT) { - must_list_refs = 1; + if (tags == TAGS_SET || tags == TAGS_DEFAULT) strvec_push(&transport_ls_refs_options.ref_prefixes, "refs/tags/"); - } - if (must_list_refs && + if (transport_ls_refs_options.ref_prefixes.nr && uses_remote_tracking(transport, rs)) strvec_push(&transport_ls_refs_options.ref_prefixes, "HEAD"); - if (must_list_refs) { + /* + * Only initiate ref listing if we have at least one ref we want to + * know about. + */ + if (transport_ls_refs_options.ref_prefixes.nr) { trace2_region_enter("fetch", "remote_refs", the_repository); remote_refs = transport_get_remote_refs(transport, &transport_ls_refs_options);
-- 2.49.0.rc1.381.gc60f5426ff
Re: [PATCH 0/9] fetch: further ref-prefix cleanups and optimizations
On Sat, Mar 08, 2025 at 10:01:01PM -0500, Jeff King wrote:
Show 14 quoted lines
> On Fri, Mar 07, 2025 at 06:27:03PM -0500, Taylor Blau wrote: > > > Peff and I talked about this today, and neither of us could find any > > reasons not to pursue the approach listed in the footnote of > > > > <20250221072558.GA572877@coredump.intra.peff.net> > > > > , but this is a more conservative approach that should fix the issue and > > apply cleanly on top of 'maint'. It may be worth picking this into 2.49, > > even though we are already quite late into the -rc cycle, this is a > > fairly nasty bug. > > Yeah, I favor doing this simple fix first, and then trying the larger > (and slightly riskier) change on top.
Yeah, definitely. I think fixing the issue immediately is the most important thing we can do, but cleaning up the code (once the immediate issue has been resolved) is also worth doing.
> I started to write up that larger patch, and found a number of > interesting things. ;) So here's a 9-patch series, which would apply on > top of tb/fetch-follow-tags-fix (but can very much wait to cook in the > next development cycle).
What?! You found other things to clean up along the way? Blasphemy.
Show 5 quoted lines
> builtin/fetch.c | 46 +++++++++++++++++------------------------- > refspec.c | 22 ++++++++++++++------ > t/t5516-fetch-push.sh | 12 ++++++----- > t/t5702-protocol-v2.sh | 44 +++++++++++++++++++++++++++++++++++++++- > 4 files changed, 85 insertions(+), 39 deletions(-)
Kidding, of course, I am looking forward to reviewing it now.
Thanks, Taylor
Re: [PATCH 0/9] fetch: further ref-prefix cleanups and optimizations
On Wed, Mar 12, 2025 at 05:29:28PM -0400, Taylor Blau wrote:
Show 7 quoted lines
> > builtin/fetch.c | 46 +++++++++++++++++------------------------- > > refspec.c | 22 ++++++++++++++------ > > t/t5516-fetch-push.sh | 12 ++++++----- > > t/t5702-protocol-v2.sh | 44 +++++++++++++++++++++++++++++++++++++++- > > 4 files changed, 85 insertions(+), 39 deletions(-) > > Kidding, of course, I am looking forward to reviewing it now.
This looks great to me. I left a few minor comments throughout, but am unsurprisingly on-board with the overall approach as you and I discussed this off-list a week or two ago.
Reviewed-by: Taylor Blau <me@ttaylorr.com>
Thanks, Taylor
Re: [PATCH 0/9] fetch: further ref-prefix cleanups and optimizations
On Wed, Mar 12, 2025 at 05:49:26PM -0400, Taylor Blau wrote:
Show 14 quoted lines
> On Wed, Mar 12, 2025 at 05:29:28PM -0400, Taylor Blau wrote: > > > builtin/fetch.c | 46 +++++++++++++++++------------------------- > > > refspec.c | 22 ++++++++++++++------ > > > t/t5516-fetch-push.sh | 12 ++++++----- > > > t/t5702-protocol-v2.sh | 44 +++++++++++++++++++++++++++++++++++++++- > > > 4 files changed, 85 insertions(+), 39 deletions(-) > > > > Kidding, of course, I am looking forward to reviewing it now. > > This looks great to me. I left a few minor comments throughout, but am > unsurprisingly on-board with the overall approach as you and I discussed > this off-list a week or two ago. > > Reviewed-by: Taylor Blau <me@ttaylorr.com>
Thanks. My biggest question is on patch 8, and whether the existing set_head() feature really ought to be more aggressive about pointing at stuff we didn't fetch (and that could even be unborn on our side!).
I don't have a strong opinion either way, but it would mean adjusting the idea of when set_head() kicks in (e.g., should we do it for every fetch, or should exact-oid fetches continue to optimize out the ls-refs call?).
-Peff