On Sun, Sep 15, 2024 at 9:42 PM Junio C Hamano <gitster@xxxxxxxxx> wrote: > > Junio C Hamano <gitster@xxxxxxxxx> writes: > > > Existing logic filteres them down to what matches configured > > remote.$name.fetch variable. filter_prefetch_refspec() may further > > reduces the result by removing those whose .src side begins with > > "refs/tags/". > > > > Now you only look at what survived the above existing filtering, and > > further narrow it down by picking only ones that match the prefetch > > condition. If the refspec that survived the filtering by the fetch > > refspec (and existing logic in filter_prefetch_refspec()) does not > > satisfy the prefetch condition, it won't be prefetched. > > Sorry, but I misread the code. > > By the time filter_prefetch_refspec() is called by get_ref_map(), > this caller has "remote_refs" linked list that describes each ref it > is going to fetch, so conceptually what is left for the prefetch > logic to do is to selectively discard the elements on this list that > are not worth asking the remote to send new object data for and use > the remainder of the list in remote_refs list, and the logic to > further limit this list with the prefetchref configuration would fit > well here, but filter_prefetch_refspec() does not work on this list > at all X-<. So the prefetchref limitation needs to come outside the > function. Sure, can you take a look at the latest diff (shared in the last reply)? Moved the prefetchref filtering to `get_ref_map` where advertised refs are available.