From: Taylor Blau <me@ttaylorr.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Jeff King <peff@peff.net>,
Elijah Newren <newren@gmail.com>, Patrick Steinhardt <ps@pks.im>
Subject: Re: [RFC PATCH 08/10] pack-objects: introduce '--stdin-packs=follow-reachable'
Date: Fri, 26 Jun 2026 20:41:30 -0400 [thread overview]
Message-ID: <aj8cOhH6hGVZIFft@nand.local> (raw)
In-Reply-To: <xmqqpl1d56dd.fsf@gitster.g>
On Fri, Jun 26, 2026 at 02:39:10PM -0700, Junio C Hamano wrote:
> Taylor Blau <me@ttaylorr.com> writes:
>
> > +/*
> > + * Flag bit set on commits that belong to an included pack during
> > + * '--stdin-packs=follow-reachable'. Used by the pre-walk to
> > + * identify which reachable commits should be tips for the main
> > + * object traversal.
> > + */
> > +#define IN_INCLUDED_PACK (1u<<11)
> > +
> > +static int mark_included_pack_tip(const struct object_id *oid,
> > + struct packed_git *p,
> > + uint32_t pos,
> > + void *data)
> > +{
> > + struct rev_info *main_revs = data;
> > + off_t ofs = nth_packed_object_offset(p, pos);
> > + enum object_type type;
> > + struct object_info oi = OBJECT_INFO_INIT;
> > + struct object *obj;
> > +
> > + oi.typep = &type;
> > + if (packed_object_info(p, ofs, &oi) < 0)
> > + return 0;
> > + if (type != OBJ_COMMIT && type != OBJ_TAG)
> > + return 0;
>
> We do not care about non commits, non tags.
This should not be an &&, but rather an ||. We only want to handle
objects which are either commits *or* tags via this function.
> > + obj = parse_object(the_repository, oid);
> > + if (!obj)
> > + return 0;
> > +
> > + obj->flags |= IN_INCLUDED_PACK;
> > +
> > + if (type == OBJ_TAG && main_revs)
> > + add_pending_object(main_revs, obj, "");
>
> Any tag object is added to the pending list of the second phase
> traversal here. Doesn't this retain unreachable tags and
> (unreachable) objects that are only reachable from these unreachable
> tags found in the packfile? Don't we want to limit this code to add
> only tags that actually are reachable from refs, or something?
Hmm. You're right, if we have an unreachable annotated tag object in one
of the STDIN_PACK_INCLUDE packs, then we'll pick it up and place it in
the non-cruft pack.
I'd have to think more about how to handle this properly to ensure that
*only* reachable objects are included. We probably want to re-order this
code so that we start a traversal from the reference tips, then mark
reachable objects as starting points based on whether or not they appear
in an included pack (and correspondingly do not appear in an excluded
one).
That adjusts how the traversal would work, I think, since we should be
able to pick up the resulting set of objects in a single pass. But I'd
have to think more about it...
Thanks,
Taylor
next prev parent reply other threads:[~2026-06-27 0:41 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-26 19:02 [RFC PATCH 00/10] repack: combine '--geometric' and '--cruft' Taylor Blau
2026-06-26 19:02 ` [RFC PATCH 01/10] repack: unconditionally exclude non-kept packs Taylor Blau
2026-06-26 19:02 ` [RFC PATCH 02/10] repack: extract `locate_existing_pack()` helper Taylor Blau
2026-06-26 19:02 ` [RFC PATCH 03/10] repack: mark geometric progression of packs as retained Taylor Blau
2026-06-26 19:02 ` [RFC PATCH 04/10] repack: teach MIDX retention about geometric rollups Taylor Blau
2026-06-26 21:28 ` Junio C Hamano
2026-06-27 0:43 ` Taylor Blau
2026-06-26 19:02 ` [RFC PATCH 05/10] repack: delete geometric packs via existing_packs Taylor Blau
2026-06-26 19:02 ` [RFC PATCH 06/10] repack-geometry: drop unused redundant-pack removal Taylor Blau
2026-06-26 19:02 ` [RFC PATCH 07/10] pack-objects: extract `stdin_packs_add_all_pack_entries()` Taylor Blau
2026-06-26 19:02 ` [RFC PATCH 08/10] pack-objects: introduce '--stdin-packs=follow-reachable' Taylor Blau
2026-06-26 21:39 ` Junio C Hamano
2026-06-27 0:41 ` Taylor Blau [this message]
2026-06-27 2:09 ` Junio C Hamano
2026-06-27 2:26 ` Taylor Blau
2026-06-26 19:02 ` [RFC PATCH 09/10] pack-objects: support '--refs-snapshot' with 'follow-reachable' Taylor Blau
2026-06-26 19:02 ` [RFC PATCH 10/10] repack: support combining '--geometric' with '--cruft' Taylor Blau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aj8cOhH6hGVZIFft@nand.local \
--to=me@ttaylorr.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=newren@gmail.com \
--cc=peff@peff.net \
--cc=ps@pks.im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.