All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.