From: Patrick Steinhardt <ps@pks.im>
To: Justin Tobler <jltobler@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 03/17] odb: embed base source in the "files" backend
Date: Thu, 5 Mar 2026 14:23:20 +0100 [thread overview]
Message-ID: <aamDyLxTYQdh9igw@pks.im> (raw)
In-Reply-To: <aahkh1ICViKjP6Il@denethor>
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.
> > struct odb_source_loose *loose;
> > struct packfile_store *packed;
> > };
> >
> > /* Allocate and initialize a new object source. */
> > -struct odb_source_files *odb_source_files_new(struct odb_source *source);
> > +struct odb_source_files *odb_source_files_new(struct object_database *odb,
> > + const char *path,
> > + bool local);
> >
> > /* Free the object source and release all associated resources. */
> > void odb_source_files_free(struct odb_source_files *files);
> >
> > +/*
> > + * Cast the given object database source to the files backend. This will cause
> > + * a BUG in case the source doesn't use this backend.
> > + */
>
> In the commit message you mention that eventually
> `odb_source_files_downcast()` will BUG() if the source doesn't use the
> backend. But, it doesn't appear to do this yet. Should we still have
> this comment?
Good point, let me move this into the patch that introduces this.
> > diff --git a/odb/source.h b/odb/source.h
> > index 1c34265189..e6698b73a3 100644
> > --- a/odb/source.h
> > +++ b/odb/source.h
> > @@ -53,7 +48,31 @@ struct odb_source *odb_source_new(struct object_database *odb,
> > const char *path,
> > bool local);
> >
> > -/* Free the object database source, releasing all associated resources. */
> > +/*
> > + * Initialize the source for the given object database located at `path`.
> > + * `local` indicates whether or not the source is the local and thus primary
> > + * object source of the object database.
> > + *
> > + * This function is only supposed to be called by specific object source
> > + * implementations.
> > + */
> > +void odb_source_init(struct odb_source *source,
> > + struct object_database *odb,
> > + const char *path,
> > + bool local);
> > +
> > +/*
> > + * Free the object database source, releasing all associated resources and
> > + * freeing the structure itself.
> > + */
> > void odb_source_free(struct odb_source *source);
> >
> > +/*
> > + * Release the object database source, releasing all associated resources.
> > + *
> > + * This function is only supposed to be called by specific object source
> > + * implementations.
> > + */
> > +void odb_source_release(struct odb_source *source);
>
> 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.
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.
Patrick
next prev parent reply other threads:[~2026-03-05 13:23 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-23 16:17 [PATCH 00/17] odb: make object database sources pluggable Patrick Steinhardt
2026-02-23 16:17 ` [PATCH 01/17] odb: split `struct odb_source` into separate header Patrick Steinhardt
2026-03-04 15:55 ` Justin Tobler
2026-03-05 13:23 ` Patrick Steinhardt
2026-03-05 16:57 ` Justin Tobler
2026-02-23 16:17 ` [PATCH 02/17] odb: introduce "files" source Patrick Steinhardt
2026-03-04 16:57 ` Justin Tobler
2026-03-05 13:23 ` Patrick Steinhardt
2026-03-05 10:20 ` Karthik Nayak
2026-02-23 16:17 ` [PATCH 03/17] odb: embed base source in the "files" backend Patrick Steinhardt
2026-03-04 17:40 ` Justin Tobler
2026-03-05 13:23 ` Patrick Steinhardt [this message]
2026-03-05 17:06 ` Justin Tobler
2026-03-05 10:45 ` Karthik Nayak
2026-03-05 13:23 ` Patrick Steinhardt
2026-02-23 16:17 ` [PATCH 04/17] odb: move reparenting logic into respective subsystems Patrick Steinhardt
2026-03-04 20:39 ` Justin Tobler
2026-03-05 13:23 ` Patrick Steinhardt
2026-02-23 16:17 ` [PATCH 05/17] odb/source: introduce source type for robustness Patrick Steinhardt
2026-03-04 20:46 ` Justin Tobler
2026-03-05 13:07 ` Patrick Steinhardt
2026-03-05 10:50 ` Karthik Nayak
2026-02-23 16:17 ` [PATCH 06/17] odb/source: make `free()` function pluggable Patrick Steinhardt
2026-03-04 20:54 ` Justin Tobler
2026-02-23 16:17 ` [PATCH 07/17] odb/source: make `reprepare()` " Patrick Steinhardt
2026-03-04 21:08 ` Justin Tobler
2026-03-05 13:23 ` Patrick Steinhardt
2026-02-23 16:17 ` [PATCH 08/17] odb/source: make `close()` " Patrick Steinhardt
2026-03-04 21:03 ` Justin Tobler
2026-03-05 13:23 ` Patrick Steinhardt
2026-03-05 17:11 ` Justin Tobler
2026-03-05 10:58 ` Karthik Nayak
2026-03-05 13:23 ` Patrick Steinhardt
2026-02-23 16:18 ` [PATCH 09/17] odb/source: make `read_object_info()` " Patrick Steinhardt
2026-03-04 21:33 ` Justin Tobler
2026-02-23 16:18 ` [PATCH 10/17] odb/source: make `read_object_stream()` " Patrick Steinhardt
2026-03-05 11:13 ` Karthik Nayak
2026-03-05 13:23 ` Patrick Steinhardt
2026-02-23 16:18 ` [PATCH 11/17] odb/source: make `for_each_object()` " Patrick Steinhardt
2026-03-05 12:40 ` Karthik Nayak
2026-03-05 13:07 ` Karthik Nayak
2026-03-05 13:30 ` Patrick Steinhardt
2026-02-23 16:18 ` [PATCH 12/17] odb/source: make `freshen_object()` " Patrick Steinhardt
2026-02-23 16:18 ` [PATCH 13/17] odb/source: make `write_object()` " Patrick Steinhardt
2026-02-23 16:18 ` [PATCH 14/17] odb/source: make `write_object_stream()` " Patrick Steinhardt
2026-02-23 16:18 ` [PATCH 15/17] odb/source: make `read_alternates()` " Patrick Steinhardt
2026-03-04 21:49 ` Justin Tobler
2026-03-05 13:23 ` Patrick Steinhardt
2026-02-23 16:18 ` [PATCH 16/17] odb/source: make `write_alternate()` " Patrick Steinhardt
2026-02-23 16:18 ` [PATCH 17/17] odb/source: make `begin_transaction()` " Patrick Steinhardt
2026-03-04 22:01 ` Justin Tobler
2026-03-05 13:24 ` Patrick Steinhardt
2026-02-23 16:21 ` [PATCH 00/17] odb: make object database sources pluggable Patrick Steinhardt
2026-02-23 21:59 ` Junio C Hamano
2026-02-24 8:41 ` Patrick Steinhardt
2026-03-05 13:11 ` Karthik Nayak
2026-03-05 14:19 ` [PATCH v2 " Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 01/17] odb: split `struct odb_source` into separate header Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 02/17] odb: introduce "files" source Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 03/17] odb: embed base source in the "files" backend Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 04/17] odb: move reparenting logic into respective subsystems Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 05/17] odb/source: introduce source type for robustness Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 06/17] odb/source: make `free()` function pluggable Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 07/17] odb/source: make `reprepare()` " Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 08/17] odb/source: make `close()` " Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 09/17] odb/source: make `read_object_info()` " Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 10/17] odb/source: make `read_object_stream()` " Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 11/17] odb/source: make `for_each_object()` " Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 12/17] odb/source: make `freshen_object()` " Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 13/17] odb/source: make `write_object()` " Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 14/17] odb/source: make `write_object_stream()` " Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 15/17] odb/source: make `read_alternates()` " Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 16/17] odb/source: make `write_alternate()` " Patrick Steinhardt
2026-03-05 14:19 ` [PATCH v2 17/17] odb/source: make `begin_transaction()` " Patrick Steinhardt
2026-03-05 17:42 ` [PATCH v2 00/17] odb: make object database sources pluggable Justin Tobler
2026-03-05 20:42 ` Junio C Hamano
2026-03-10 12:19 ` 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=aamDyLxTYQdh9igw@pks.im \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
--cc=jltobler@gmail.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.