From: Patrick Steinhardt <ps@pks.im>
To: Justin Tobler <jltobler@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 04/17] odb: move reparenting logic into respective subsystems
Date: Thu, 5 Mar 2026 14:23:31 +0100 [thread overview]
Message-ID: <aamD0yUNTb0r2JQZ@pks.im> (raw)
In-Reply-To: <aaiSFpWY0YQ6XQcM@denethor>
On Wed, Mar 04, 2026 at 02:39:57PM -0600, Justin Tobler wrote:
> On 26/02/23 05:17PM, Patrick Steinhardt wrote:
> > The primary object database source may be initialized with a relative
> > path. When reparenting the process to a different working directory we
>
> I find the wording here a bit confusing. Maybe something like this would
> be a bit clearer:
>
> When the process changes its current working directory...
Yup, this reads clearer indeed.
> > diff --git a/odb/source-files.c b/odb/source-files.c
> > index a43a197157..df0ea9ee62 100644
> > --- a/odb/source-files.c
> > +++ b/odb/source-files.c
> > @@ -1,13 +1,28 @@
> > #include "git-compat-util.h"
> > +#include "abspath.h"
> > +#include "chdir-notify.h"
> > #include "object-file.h"
> > #include "odb/source.h"
> > #include "odb/source-files.h"
> > #include "packfile.h"
> >
> > +static void odb_source_files_reparent(const char *name UNUSED,
> > + const char *old_cwd,
> > + const char *new_cwd,
> > + void *cb_data)
> > +{
> > + struct odb_source_files *files = cb_data;
> > + char *path = reparent_relative_path(old_cwd, new_cwd,
> > + files->base.path);
> > + free(files->base.path);
> > + files->base.path = path;
>
> I do find it a bit curious that we consider the "path" to be specific to
> the "files" backend, but still track it as part of the "base" ODB
> source. I suspect this will eventually change though?
Yeah, this will change eventually, but it's going to take a while to get
there. I plan to drop the "path" pointer from the base completely, as
other sources may not even have a path in the first place. But that
first requires us to address all instances where we directly access the
path
> > +}
> > +
> > void odb_source_files_free(struct odb_source_files *files)
> > {
> > if (!files)
> > return;
> > + chdir_notify_unregister(NULL, odb_source_files_reparent, files);
> > odb_source_loose_free(files->loose);
> > packfile_store_free(files->packed);
> > odb_source_release(&files->base);
> > @@ -25,5 +40,13 @@ struct odb_source_files *odb_source_files_new(struct object_database *odb,
> > files->loose = odb_source_loose_new(&files->base);
> > files->packed = packfile_store_new(&files->base);
> >
> > + /*
> > + * Ideally, we would only ever store absolute paths in the source. This
> > + * is not (yet) possible though because we access and assume relative
> > + * paths in the primary ODB source in some user-facing functionality.
> > + */
>
> Should this be a NEEDSWORK comment? Or do we expect it to remain this
> way for the forseeable future?
Once we are able to drop the `struct odb_source::path` field it should
become feasible. So I don't think we should add a NEEDSWORK comment now,
as it might mislead fellow developers to think it's already doable and
can be worked on right away.
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
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 [this message]
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=aamD0yUNTb0r2JQZ@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.