Re: should git maintenance prefetch be taught to honor remote.fetch refspec?
- From
- Tom Saeger <tom.saeger@oracle.com>
- Date
- Apr 2, 2021, 21:33 UTC
- Message-ID
- <20210402213312.2rpsjqcuhl4n46il@brm-x62-17.us.oracle.com>
- In-Reply-To
- <xmqq1rbs4c6t.fsf@gitster.g>
On Fri, Apr 02, 2021 at 02:19:06PM -0700, Junio C Hamano wrote:
Show 41 quoted lines
> Derrick Stolee <stolee@gmail.com> writes:
>
> > The other issue is that exact matches (no "*") have an exact
> > string in the destination, too, so replacing the _entire_
> > destination with "refs/prefetch/<remote>/*" breaks the refspec.
> > I think the substring approach will still work here.
>
> I wonder if that matters. If the exact format says
>
> [remote "origin"]
> url = git://git.kernel.org/pub/scm/git/git.git/
> fetch = +refs/heads/todo:refs/x/y/z
>
> you can just add refs/prefetch/<remote>/ to the entire RHS to ensure
> that (1) the prefetch would not affect anything outside the 'prefetch'
> to break @{upstream} and friends, and (2) the prefetch from this remote
> would not affect anything used for other remotes.
>
> IOW, the RHS, as long as it is hidden from normal operations and
> does not conflict with interaction with other repositories, where
> exactly in the refs hierarchy these objects are "parked" does not
> matter, I would think.
>
> I do not recommend unparsed refspec and textually munging, by the
> way. Doesn't
>
> git fetch master:remotes/origin/master
>
> first parse to normalize the src/dst sides to turn it into
>
> git fetch refs/heads/master:refs/remotes/origin/master
>
> which is what you want to further redirect to the prefetch hierarchy
>
> git fetch +refs/heads/master:refs/prefetch/origin/refs/remotes/origin/master
>
> or whatever munging scheme is used?
>
> Also, I wonder if there should be a mechanism to prune the
> prefetched refs, but that is totally outside the scope of the
> problem we have been discussing in this thread.FWIW - did this locally to test:
git show-ref | grep -F "prefetch" | cut -d' ' -f2 | while read -r ref ; do git update-ref -d $ref; done git maintenance run --task prefetch git show-ref | egrep "refs/remotes" | wc -l git show-ref | egrep "refs/prefetch" | wc -l