threads / discuss / 62871

Tags are no longer fetched when fetching specific commit

Subject: Tags are no longer fetched when fetching specific commit

## tl;dr

61 messages between Jan 30, 2025 and Mar 19, 2025.

replies: 60people: 6as markdown or json

Igor Todorovski· Jan 30, 2025, 03:49 UTC · lore
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.
Taylor Blau· Feb 13, 2025, 22:38 UTC · re: Igor Todorovski · lore

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
Bence Ferdinandy· Feb 14, 2025, 13:53 UTC · re: Taylor Blau · lore

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

Junio C Hamano· Feb 14, 2025, 18:35 UTC · re: Taylor Blau · lore

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.
Jeff King· Feb 21, 2025, 07:25 UTC · re: Junio C Hamano · lore

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
Taylor Blau· Mar 7, 2025, 23:27 UTC · re: Igor Todorovski · lore

[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
Taylor Blau· Mar 7, 2025, 23:32 UTC · re: Taylor Blau · lore

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

Junio C Hamano· Mar 8, 2025, 00:10 UTC · re: Taylor Blau · lore

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.
Bence Ferdinandy· Mar 8, 2025, 03:23 UTC · re: Taylor Blau · lore

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.g965d2fe18fa
Thanks for cleaning up my mess!
Jeff King· Mar 9, 2025, 03:01 UTC · re: Taylor Blau · lore

[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
Jeff King· Mar 9, 2025, 03:01 UTC · re: Jeff King · lore

[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
Taylor Blau· Mar 12, 2025, 21:30 UTC · re: Jeff King · lore

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

Jeff King· Mar 13, 2025, 05:37 UTC · re: Taylor Blau · lore

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
Jeff King· Mar 9, 2025, 03:01 UTC · re: Jeff King · lore

[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
Jeff King· Mar 9, 2025, 03:02 UTC · re: Jeff King · lore

[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
Taylor Blau· Mar 12, 2025, 21:30 UTC · re: Jeff King · lore

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

Jeff King· Mar 9, 2025, 03:02 UTC · re: Jeff King · lore

[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
Jeff King· Mar 9, 2025, 03:07 UTC · re: Jeff King · lore

[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
Taylor Blau· Mar 12, 2025, 21:38 UTC · re: Jeff King · lore

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

Jeff King· Mar 13, 2025, 05:41 UTC · re: Taylor Blau · lore

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
Junio C Hamano· Mar 13, 2025, 13:26 UTC · re: Jeff King · lore

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.
Taylor Blau· Mar 17, 2025, 22:24 UTC · re: Junio C Hamano · lore

[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
Taylor Blau· Mar 17, 2025, 22:24 UTC · re: Taylor Blau · lore

[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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
Jeff King· Mar 18, 2025, 00:24 UTC · re: Taylor Blau · lore

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
Jeff King· Mar 18, 2025, 00:26 UTC · re: Jeff King · lore

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
Taylor Blau· Mar 18, 2025, 22:44 UTC · re: Jeff King · lore

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

Taylor Blau· Mar 17, 2025, 22:24 UTC · re: Taylor Blau · lore

[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
Taylor Blau· Mar 17, 2025, 22:24 UTC · re: Taylor Blau · lore

[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
Taylor Blau· Mar 17, 2025, 22:24 UTC · re: Taylor Blau · lore

[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
Junio C Hamano· Mar 17, 2025, 23:26 UTC · re: Taylor Blau · lore

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-pairs
Somebody does not proofread their cover letter.  Sheesh ;-)
Taylor Blau· Mar 18, 2025, 22:40 UTC · re: Junio C Hamano · lore

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

Taylor Blau· Mar 18, 2025, 22:50 UTC · re: Junio C Hamano · lore

[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 variants
base-commit: c702dd48567cfebca3d4a06b691de97da3f8dc4a
-- 
2.49.0.3.gbb7a4a684c.dirty
Taylor Blau· Mar 18, 2025, 22:50 UTC · re: Taylor Blau · lore

[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
Taylor Blau· Mar 18, 2025, 22:50 UTC · re: Taylor Blau · lore

[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
Taylor Blau· Mar 18, 2025, 22:50 UTC · re: Taylor Blau · lore

[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
Taylor Blau· Mar 18, 2025, 22:50 UTC · re: Taylor Blau · lore

[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
Elijah Newren· Mar 19, 2025, 15:31 UTC · re: Taylor Blau · lore

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.dirty

I 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.

Taylor Blau· Mar 17, 2025, 22:00 UTC · re: Jeff King · lore

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
Junio C Hamano· Mar 17, 2025, 23:25 UTC · re: Taylor Blau · lore

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.
Taylor Blau· Mar 18, 2025, 22:47 UTC · re: Junio C Hamano · lore

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

Jeff King· Mar 9, 2025, 03:08 UTC · re: Jeff King · lore

[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
Taylor Blau· Mar 12, 2025, 21:43 UTC · re: Jeff King · lore

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

Jeff King· Mar 13, 2025, 05:46 UTC · re: Taylor Blau · lore

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
Junio C Hamano· Mar 13, 2025, 12:26 UTC · re: Jeff King · lore

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.

Taylor Blau· Mar 17, 2025, 22:23 UTC · re: Junio C Hamano · lore

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

Jeff King· Mar 9, 2025, 03:10 UTC · re: Jeff King · lore

[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
Taylor Blau· Mar 12, 2025, 21:45 UTC · re: Jeff King · lore

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

Jeff King· Mar 9, 2025, 03:20 UTC · re: Jeff King · lore

[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
Junio C Hamano· Mar 13, 2025, 15:53 UTC · re: Jeff King · lore

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.
Jeff King· Mar 17, 2025, 18:06 UTC · re: Junio C Hamano · lore

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
Junio C Hamano· Mar 17, 2025, 19:01 UTC · re: Jeff King · lore

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.
Jeff King· Mar 18, 2025, 05:39 UTC · re: Junio C Hamano · lore

[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(-)
Jeff King· Mar 18, 2025, 05:40 UTC · re: Jeff King · lore

[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
Taylor Blau· Mar 18, 2025, 23:02 UTC · re: Jeff King · lore

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

Jeff King· Mar 18, 2025, 05:41 UTC · re: Jeff King · lore

[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
Junio C Hamano· Mar 18, 2025, 19:18 UTC · re: Jeff King · lore

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.
Taylor Blau· Mar 18, 2025, 23:02 UTC · re: Junio C Hamano · lore

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

Jeff King· Mar 9, 2025, 03:21 UTC · re: Jeff King · lore

[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
Taylor Blau· Mar 12, 2025, 21:29 UTC · re: Jeff King · lore

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

Taylor Blau· Mar 12, 2025, 21:49 UTC · re: Taylor Blau · lore

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

Jeff King· Mar 13, 2025, 05:50 UTC · re: Taylor Blau · lore

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

← back to recent threads