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

Re: BUG: fetch in certain repo always gives "did not send all necessary objects"

From
Jeff King <peff@peff.net>
Date
Feb 7, 2018, 18:17 UTC
Message-ID
<20180207181706.GA4227@sigill.intra.peff.net>
In-Reply-To
<CABPp-BH0rSELVJV11MJM=KFU2jAEuhVTzUUBskghgku+y_ozDQ@mail.gmail.com>
On Wed, Feb 07, 2018 at 09:25:42AM -0800, Elijah Newren wrote:
Show 9 quoted lines
> > So other_head_refs knows that it's looking at the worktrees. And it
> > passes the alternate ref-store to refs_head_ref(), with "add_one_ref" as
> > the callback. But the knowledge that we're not talking about the real
> > "HEAD" is lost as we cross that callback boundary. We'd need to either
> > add another parameter to the callback, or have some way of talking about
> > "HEAD in this worktree" as a refname (which AFAIK we don't have).
> 
> Can we use "worktrees/${WORKTREE}/HEAD"?  It already satisfies all the
> necessary rev-parse rules...

True, but it's mostly an accident that it works. And once we have ref backends besides the filesystem, it will probably stop working.

I think there was discussion at some point of embedding worktree refs into the normal ref namespace, but I don't know what came of it (it's not a feature I've followed very closely).

Show 5 quoted lines
> (And on a slight tangent...do we want to start disallowing the
> creation of branches/tags whose name starts with "worktrees/",
> "refs/", "hooks/", or other paths that exists under gitdir?  Making a
> branch named "refs/heads/foo" so that it fully-qualifies as
> "refs/heads/refs/heads/foo" is always fun)

We recently taught the porcelain to disallow a branch named "HEAD". Though I think there are actually two related problems with different solutions. One is saying something like:

  git checkout -b HEAD
or:
  git checkout -b refs/heads/foo

both of which will not do what you want, and leave you with a funnily-named branch in the ref namespace.

But that's separate from the fact that:
  git rev-parse info/refs

will look at a file that is not a ref at all. Long-term I think the solution is storage formats that don't mingle with other files. But we could probably teach even the files-backend that any ref at the top-level is supposed to be either in refs/, or to consist only of "[A-Z_]".

-Peff
Previous: Elijah Newren
Message 10 of 10 in “BUG: fetch in certain repo always gives "did not send all necessary objects"”
  1. Elijah NewrenFeb 6, 2018
  2. Stefan BellerFeb 6, 2018
  3. Elijah NewrenFeb 7, 2018
  4. Duy NguyenFeb 7, 2018
  5. Jeff KingFeb 7, 2018
  6. Elijah NewrenFeb 7, 2018
  7. Jeff KingFeb 7, 2018
  8. Jeff KingFeb 7, 2018
  9. Elijah NewrenFeb 7, 2018
  10. Jeff KingFeb 7, 2018

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.