git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: should git maintenance prefetch be taught to honor remote.fetch refspec?

From
TSTom Saeger <tom.saeger@oracle.com>
Date
Apr 5, 2021, 20:38 UTC
Message-ID
<20210405203832.x275fqoinfsw5gik@dhcp-10-154-153-195.vpn.oracle.com>
In-Reply-To
<xmqqr1jo5zzb.fsf@gitster.g>
On Mon, Apr 05, 2021 at 11:48:56AM -0700, Junio C Hamano wrote:
Show 19 quoted lines
> Derrick Stolee <stolee@gmail.com> writes:
> 
> > ... but it becomes difficult
> > when we intend to make a distinction between "refs/heads/" and
> > other sub-areas within "refs/". Finally, I punted on that
> > conversion and made the logic in 'prefetch' extremely obvious:
> >
> > 1. If the refspec's 'dst' starts with "refs/", then replace
> >    that prefix with "refs/prefetch/".
> >
> > 2. If the refspec's 'dst' does not start with "refs/", then
> >    concatenate "refs/prefetch/" and 'dst'.
> >
> > This will keep a roughly-equivalent partition of refs (some
> > might have previously collided that will not any more).
> 
> Makes sense.  Do we need to add another rule?
> 
> 3. If the refspec does not have 'dst', ignore it.
I just tried what I think you're saying here.
Consider this fetch config:

$ git config --local --get-regexp "pr-924" remote.pr-924.url https://github.com/gitgitgadget/git remote.pr-924.fetch +refs/tags/pr-924/derrickstolee/maintenance/refspec-v1

Seems legal, fetch even works
$ git fetch pr-924
Fetching pr-924
From https://github.com/gitgitgadget/git
 * tag                         pr-924/derrickstolee/maintenance/refspec-v1 -> FETCH_HEAD
Prefetch segfaults

$ git maintenance run --task prefetch [1] 3811315 segmentation fault (core dumped) git maintenance run --task prefetch

refspec which isn't a 'negative' with a src, but no dst.
Quick hack:
diff --git a/builtin/gc.c b/builtin/gc.c
index 92cb8b4e0bfa..2f4b8f2375c3 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -899,6 +899,10 @@ static int fetch_remote(struct remote *remote, void *cbdata)
                        continue;
                }

+               if (!rsi->dst) {
+                       continue;
+               }
+
                refspec_item_init(&replace, remote->fetch.raw[i], 1);

                /*


Better, but now a different issue:

$ git maintenance run --task prefetch
fatal: --refmap option is only meaningful with command-line refspec(s).
error: failed to prefetch remotes
error: task 'prefetch' failed

So a "remote" where the only fetch url is skipped.


> 
> > I have posted my patch series [1], so please take a look. It
> > builds up the infrastructure to properly test such a refspec
> > expansion, if we wish to do so.
> >
> > [1] https://lore.kernel.org/git/pull.924.git.1617627856.gitgitgadget@gmail.com/
> >
> > Thanks,
> > -Stolee
> 
> Thanks.
Previous: Junio C HamanoNext: Junio C Hamano
Message 20 of 27 in “should git maintenance prefetch be taught to honor remote.fetch refspec?”
  1. Tom SaegerApr 1, 2021
  2. Derrick StoleeApr 1, 2021
  3. Tom SaegerApr 1, 2021
  4. Junio C HamanoApr 1, 2021
  5. Tom SaegerApr 1, 2021
  6. Derrick StoleeApr 1, 2021
  7. Tom SaegerApr 2, 2021
  8. Derrick StoleeApr 2, 2021
  9. Derrick StoleeApr 2, 2021
  10. Tom SaegerApr 2, 2021
  11. Junio C HamanoApr 2, 2021
  12. Tom SaegerApr 2, 2021
  13. Tom SaegerApr 2, 2021
  14. Junio C HamanoApr 2, 2021
  15. Tom SaegerApr 2, 2021
  16. Derrick StoleeApr 4, 2021
  17. Junio C HamanoApr 4, 2021
  18. Derrick StoleeApr 5, 2021
  19. Junio C HamanoApr 5, 2021
  20. Tom SaegerApr 5, 2021
  21. Junio C HamanoApr 5, 2021
  22. Derrick StoleeApr 5, 2021
  23. Tom SaegerApr 5, 2021
  24. Derrick StoleeApr 5, 2021
  25. Eric SunshineApr 2, 2021
  26. Tom SaegerApr 3, 2021
  27. Derrick StoleeApr 3, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.