Subject: Re: [PATCH 03/17] odb: embed base source in the "files" backend

From: Justin Tobler <[email-masked]>
Date: Thu, 5 Mar 2026 11:06:10 -0600

On 26/03/05 02:23PM, Patrick Steinhardt wrote:
> On Wed, Mar 04, 2026 at 11:40:47AM -0600, Justin Tobler wrote:
> > On 26/02/23 05:17PM, Patrick Steinhardt wrote:
> > > diff --git a/odb/source-files.h b/odb/source-files.h
> > > index 0b8bf773ca..58753d40de 100644
> > > --- a/odb/source-files.h
> > > +++ b/odb/source-files.h
> > > @@ -10,15 +11,26 @@ struct packfile_store;
> > >   * packfiles. It is the default backend used by Git to store objects.
> > >   */
> > >  struct odb_source_files {
> > > -	struct odb_source *source;
> > > +	struct odb_source base;
> > 
> > Out of curiousity, was there any reason to the reference ODB source in
> > the prior patch? Seems like we could have just added it here.
> 
> Good question. The reason why I stored this pointer in the preceding
> commit is mostly to demonstrate that we're actually using the source
> that's passed to `db_source_files_new()`. I didn't want to have to
> change the signature of that function in this commit again.
> 
> So the field was unused indeed, but intentionally so.

That's fair. I did find it mildly confusing to see its introduction
without any uses, only to be renamed here. But it's not really a big
deal either way.

> > From a naming perspective, I do find the odb_source_new() vs
> > odb_source_init() and odb_source_free() vs odb_source_release()
> > interfaces to be tad bit confusing. I understand that odb_source_init()
> > and odb_source_release() and only intended for use by the concrete ODB
> > source implementations to facilitate initializing/freeing the base ODB
> > source. The comments also do help clarify this, but I think it is still
> > rather easy to get them mixed up when reading.
> > 
> > Maybe we could rename them to odb_base_source_init() and
> > odb_base_source_free()?
> 
> I think for `odb_source_free()` it's a definitive no. This will be the
> way to free any source, not only the base, and this will become clear in
> a subsequent patch.

Fair.

> For `odb_source_init()` you have a better point though, as it really
> only cares about initializing the base object. But I think it's still
> sensible to keep the name as it _does_ act on `struct odb_source`, and
> it would be the only instance where we have the "base" infix.

Ya it does still act on the `struct odb_source`, but IMO the name fails
to properly differentiant it's usecase which it a tad bit confusing.
Naming is hard though and I don't have really a better suggestion so it
is probably fine as-is. At least the comments do a reasonable job of
explaining the intent here. :)

-Justin