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

Re: [PATCH 5/5] pack-objects: walk tag chains for --include-tag

From
Jeff King <peff@peff.net>
Date
Sep 5, 2016, 21:59 UTC
Message-ID
<20160905215939.hriu6ev3m332qhp6@sigill.intra.peff.net>
In-Reply-To
<20160905215226.m6vv2tk5pe2qt4ui@sigill.intra.peff.net>
On Mon, Sep 05, 2016 at 05:52:26PM -0400, Jeff King wrote:
Show 11 quoted lines
> When pack-objects is given --include-tag, it peels each tag
> ref down to a non-tag object, and if that non-tag object is
> going to be packed, we include the tag, too. But what
> happens if we have a chain of tags (e.g., tag "A" points to
> tag "B", which points to commit "C")?
> 
> We'll peel down to "C" and realize that we want to include
> tag "A", but we do not ever consider tag "B", leading to a
> broken pack (assuming "B" was not otherwise selected).
> Instead, we have to walk the whole chain, adding any tags we
> find to the pack.

So technically one might argue that this pack isn't "broken", in that it _is_ a valid pack. It's just that it doesn't contain what the user was asking for.

As explained further in the commit message, "fetch" is robust to this, because it does a real connectivity check and follow-on fetch before writing anything it thinks it got via include-tag. So perhaps one could argue that pack-objects is correct; include-tag is best-effort, and it is the client's job to make sure it has everything it needs. And that would mean the bug is in git-clone, which should be doing the connectivity check and follow-on fetch.

I dunno. This seems like the most elegant place to fix it, though it does mean that pack-objects will go to some slight extra work when auto-packing a tag (it has to parse the tag to find out whether it's a chain). I'm doubt it matters much in practice.

-Peff
Previous: Jeff KingNext: Junio C Hamano
Message 7 of 10 in “handle tag recursion in pack-objects --include-tag”
  1. 0/5 handle tag recursion in pack-objects --include-tagJeff King, Sep 5, 2016
  2. 1/5 t5305: move cleanup into test blockJeff King, Sep 5, 2016
  3. 2/5 t5305: drop "dry-run" of unpack-objectsJeff King, Sep 5, 2016
  4. 3/5 t5305: use "git -C"Jeff King, Sep 5, 2016
  5. 4/5 t5305: simplify packname handlingJeff King, Sep 5, 2016
  6. 5/5 pack-objects: walk tag chains for --include-tagJeff King, Sep 5, 2016
  7. Jeff KingSep 5, 2016
  8. Junio C HamanoSep 7, 2016
  9. Jeff KingSep 7, 2016
  10. Jeff KingSep 5, 2016

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.