Subject: Re: [PATCH v3 2/2] bundle-uri: add test for bundle-uri clones with tags

From: Junio C Hamano <[email-masked]>
Date: Thu, 20 Mar 2025 23:31:45 -0700

Phillip Wood <[email-masked]> writes:

> Hi Scott
>
> On 18/03/2025 15:36, Scott Chacon via GitGitGadget wrote:
>> From: Scott Chacon <[email-masked]>
>> +test_expect_success 'clone with tags bundle' '
>> +	git clone --bundle-uri="clone-from-tags/ALL.bundle" \
>> +		clone-from-tags clone-tags-path &&
>> +	git -C clone-tags-path for-each-ref --format="%(refname)" >refs &&
>> +	grep "refs/bundles/tags/" refs >actual &&
>
> Thanks for adding this test. Calling "git for-each-ref" followed by
> "grep" follows the pattern of the existing tests but I'm not sure why
> they don't just pass the pattern to "for-each-ref" and avoid the extra
> process.

Yup, if we really care about a single ref, we should just go in the
clone and check with 'git show-ref'.

> Do we want to just test for tags or are we really interested to see
> all the bundle refs created when cloning? This applies to the previous
> patch as well - we obviously need to change the expected output but
> I'm not sure changing the ref pattern is necessarily a good
> idea. After all the point of this series is to create refs under
> refs/bundles for all the refs in the bundle.

The really interesting case that the original behaviour could have
been "working around existing bugs" would be

 - prepare an annotated tag.

 - include that annotated tag in the bundle specified by the
   bundle-uri feature (whose SOLE purpose is to speed up the main
   part of the tranfer, WITHOUT affecting the resulting remote
   tracking refs and global tag namespace).

 - prepare a repository that uses that bundle as bundle-uri when
   getting cloned (let's call it the 'origin' repository).  It
   probably is convenient if you make this a repository  separate
   from where you prepared the bundle above.  Make sure that this
   repository does *not* (yet) have that annotated tag.

 - clone from the 'origin' repository with bundle-uri feature.  The
   annotated tag would be held under refs/bundles/tags/ hierarchy but
   that is *not* the interesting part.  Make sure that the annotated
   tag does *not* appear in refs/tags/ hierarchy of the clone, since
   it does not exist (yet) at the 'origin' repository.

 - Now add that annotated tag to the 'origin' repository.

 - fetch from the 'origin' repository again, with the default
   configuration (i.e. allowing "tags follow when commits they
   reference are fetched" feature to kick in).  As the annotated tag
   appears in refs/tags/ of the 'origin' repository, the commit
   pointed at by that annotated tag now appears in one of its
   branches, and the history leading to that commit (and possibly
   others) are transferred to refs/remotes/origin/* remote-tracking
   branches, the tag-following feature should kick in and copy the
   annotated tag in refs/tags/ hierarchy as well.

The interesting part to verify is that in the cloned repository the
annotated tag does not appear in refs/tags/ immediately after
cloneing, but does appear there after the 'origin' is updated to
have the tag under refs/tags/ and then fetch