All of lore.kernel.org
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: Justin Tobler <jltobler@gmail.com>
Cc: git@vger.kernel.org,
	Johannes Schindelin <Johannes.Schindelin@gmx.de>,
	Wolfgang Kritzinger <wkritzinger@atlassian.com>
Subject: Re: [PATCH 5/5] odb/source: drop `local` flag
Date: Wed, 14 Oct 2026 08:56:12 +0200	[thread overview]
Message-ID: <as8njPHSZVabmb4Q@pks.im> (raw)
In-Reply-To: <as6palGWxRlky0bS@denethor>

On Tue, Oct 13, 2026 at 05:44:11PM -0500, Justin Tobler wrote:
> On 26/10/13 09:36AM, Patrick Steinhardt wrote:
> > The `local` flag indicates whether a given `struct odb_source` is a
> > local source or not, where "local" is defined as being the object
> > directory that is directly attached to the current repository. But now
> > that alternates are handled in the "files" backend, this property is not
> > something that even makes sense anymore to have on the generic source.
> > 
> > In fact, we already have a partial replacement for this field in `struct
> > odb_files_dir`. The only other site that requires it is the packed
> > object database source, because it propagates the bit into the packfiles
> > it is opening.
> > 
> > Drop the flag from `struct odb_source` and instead move it into the
> > packed source.
> > 
> > Note that we stop considering the `local` bit when iterating through all
> > loose objects with the `ODB_FOR_EACH_OBJECT_LOCAL_ONLY` flag. This is
> > fine though, as we already handle the flag in the "files" backend
> > itself, where we skip over any object directory that is not marked as
> > local.
> 
> I do wish we could also drop ODB_FOR_EACH_OBJECT_LOCAL_ONLY. This flag
> also feels rather leaky to me. I guess though we still need a way to
> ignore objects from certain sources when iterating over all sources such
> as the inmemory source.
> 
> Overall, I happy to see the `local` field dropped from the generic ODB
> source structure, but IMO is does make each `for_each_object` callback
> handling of the ODB_FOR_EACH_OBJECT_LOCAL_ONLY flag a bit ambiguous and
> awkward.
> 
> Naive question: Do all odb_for_each_object() call sites that use the
> ODB_FOR_EACH_OBJECT_LOCAL_ONLY flag have "files" backend specific
> reasons to do so?

It does make it awkward, I agree. There's only two callers that use the
flag right now:

  - git-pack-objects(1) with its "--local" flag. I consider this command
    to be too specific to the "files" backend anyway though, so arguably
    we could just let it handle this directly.

  - "reachable.c" via `add_unseen_recent_objects_to_traversal()`. This
    is invoke by git-prune(1) to mark reachable objects that are recent,
    and it's dubious that we only enumerate local objects here.

So we might be able to get rid of that flag altogether. But I'm inclined
to go one step at a time and leave this for a future patch series.

> > Signed-off-by: Patrick Steinhardt <ps@pks.im>
> > ---
> [snip]
> > diff --git a/odb/source-inmemory.c b/odb/source-inmemory.c
> > index 868e723c81..75cf29fa9d 100644
> > --- a/odb/source-inmemory.c
> > +++ b/odb/source-inmemory.c
> > @@ -161,8 +161,12 @@ static int odb_source_inmemory_for_each_object(struct odb_source *source,
> >  	};
> >  	struct object_id null_oid = { 0 };
> >  
> > -	if ((opts->flags & ODB_FOR_EACH_OBJECT_PROMISOR_ONLY) ||
> > -	    (opts->flags & ODB_FOR_EACH_OBJECT_LOCAL_ONLY && !source->local))
> > +	/*
> > +	 * In-memory objects are neither promisor objects nor do they live in
> > +	 * the local object directory, so there is nothing to iterate over.
> > +	 */
> > +	if (opts->flags & (ODB_FOR_EACH_OBJECT_PROMISOR_ONLY |
> > +			   ODB_FOR_EACH_OBJECT_LOCAL_ONLY))
> 
> So for the inmemory source, we don't want to iterate over the objects at
> all if we are only interested in "local" objects.
> 
> Naive question: Are there any scenarios where we even would iterate over
> an inmemory source and only be interested in "local" objects?

Not that I'd know of.

Patrick

  reply	other threads:[~2026-10-14  6:56 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-13  7:36 [PATCH 0/5] odb/files: cleanups and improvements for alternates Patrick Steinhardt
2026-10-13  7:36 ` [PATCH 1/5] odb/source-files: fix performance when reading objects with alternates Patrick Steinhardt
2026-10-13 20:46   ` Justin Tobler
2026-10-13  7:36 ` [PATCH 2/5] odb/source-files: fix performance when streaming " Patrick Steinhardt
2026-10-13 20:51   ` Justin Tobler
2026-10-13  7:36 ` [PATCH 3/5] odb/source-files: make the second read an implementation detail Patrick Steinhardt
2026-10-13 21:28   ` Justin Tobler
2026-10-14  6:55     ` Patrick Steinhardt
2026-10-13  7:36 ` [PATCH 4/5] odb: remove read loop for found objects Patrick Steinhardt
2026-10-13 21:48   ` Justin Tobler
2026-10-14  6:56     ` Patrick Steinhardt
2026-10-13  7:36 ` [PATCH 5/5] odb/source: drop `local` flag Patrick Steinhardt
2026-10-13 22:44   ` Justin Tobler
2026-10-14  6:56     ` Patrick Steinhardt [this message]
2026-10-14  8:53 ` [PATCH v2 0/6] odb/files: cleanups and improvements for alternates Patrick Steinhardt
2026-10-14  8:53   ` [PATCH v2 1/6] odb/source-files: fix performance when reading objects with alternates Patrick Steinhardt
2026-10-14  8:53   ` [PATCH v2 2/6] odb/source-files: fix performance when streaming " Patrick Steinhardt
2026-10-14  8:53   ` [PATCH v2 3/6] odb/source-files: make the second read an implementation detail Patrick Steinhardt
2026-10-14  8:53   ` [PATCH v2 4/6] odb: remove read loop for found objects Patrick Steinhardt
2026-10-14  8:53   ` [PATCH v2 5/6] odb: don't try re-fetching corrupt objects Patrick Steinhardt
2026-10-14  8:53   ` [PATCH v2 6/6] odb/source: drop `local` flag Patrick Steinhardt

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=as8njPHSZVabmb4Q@pks.im \
    --to=ps@pks.im \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=jltobler@gmail.com \
    --cc=wkritzinger@atlassian.com \
    /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.