All of lore.kernel.org
 help / color / mirror / Atom feed
From: Toon Claes <toon@iotcl.com>
To: Patrick Steinhardt <ps@pks.im>, git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>, Justin Tobler <jltobler@gmail.com>
Subject: Re: [PATCH v3 3/6] setup: handle ODB-related environment variables in `odb_new()`
Date: Wed, 05 Aug 2026 15:29:21 +0200	[thread overview]
Message-ID: <878q6k66ha.fsf@emacs.iotcl.com> (raw)
In-Reply-To: <20260805-pks-odb-create-on-disk-v3-3-c0ee3ac5141f@pks.im>

Patrick Steinhardt <ps@pks.im> writes:

> When initializing a repository's object database we have to respect the
> GIT_OBJECT_DIRECTORY and GIT_ALTERNATE_OBJECT_DIRECTORIES environment
> variables, which can be set by the user to override the default location
> of where we write objects to and read objects from.
>
> This is handled in `apply_repository_format()`, which is fine. But in a
> subsequent commit we'll have to defer constructing the object database
> to a later point in some cases, and that will require a second site
> where we call `odb_new()`. And of course, that second site would have to
> handle those environment variables, as well.
>
> It would be somewhat awkward to duplicate the logic though. But there's
> a better alternative: instead of handling this logic in "setup.c", we
> can easily handle environment variables in `odb_new()` itself. This
> ensures that object database creation is neatly self-contained, and we
> don't have to duplicate any of the logic.
>
> Another benefit is that in a future patch series we plan to move
> handling of alternates into the backends themselves [1], and that will
> require us to also handle those environment variables in the "files"
> backend itself. So moving the logic into the ODB level already gets us
> one step closer to that goal.
>
> Refactor the logic accordingly.

I like this!

>
> [1]: https://lore.kernel.org/git/amLgMqkqxR8mKIbT@pks.im/
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
>  odb.c                         | 20 ++++++++++++--------
>  odb.h                         | 17 +++++++++++++++--
>  setup.c                       | 11 ++++-------
>  t/unit-tests/u-odb-inmemory.c |  2 +-
>  4 files changed, 32 insertions(+), 18 deletions(-)
>
> diff --git a/odb.c b/odb.c
> index cf6e7938c0..b463afa072 100644
> --- a/odb.c
> +++ b/odb.c
> @@ -1004,26 +1004,30 @@ int odb_write_object_stream(struct object_database *odb,
>  }
>  
>  struct object_database *odb_new(struct repository *repo,
> -				const char *primary_source,
> -				const char *secondary_sources)
> +				enum odb_new_flags flags)
>  {
> -	struct object_database *o = xmalloc(sizeof(*o));
> -	char *to_free = NULL;
> +	char *primary_source = NULL, *secondary_sources = NULL;
> +	struct object_database *o;
>  
> -	memset(o, 0, sizeof(*o));
> +	CALLOC_ARRAY(o, 1);
>  	o->repo = repo;
>  	pthread_mutex_init(&o->replace_mutex, NULL);
>  	string_list_init_dup(&o->submodule_source_paths);
>  
> +	if (flags & ODB_NEW_HONOR_ENV) {
> +		primary_source = xstrdup_or_null(getenv(DB_ENVIRONMENT));
> +		secondary_sources = xstrdup_or_null(getenv(ALTERNATE_DB_ENVIRONMENT));
> +	}
>  	if (!primary_source)
> -		primary_source = to_free = xstrfmt("%s/objects", repo->commondir);
> +		primary_source = xstrfmt("%s/objects", repo->commondir);
> +
>  	o->sources = odb_source_new(o, primary_source, true);
>  	o->sources_tail = &o->sources->next;
>  	o->alternate_db = xstrdup_or_null(secondary_sources);

I'd say this xstrdup_or_null() is not needed no more, and so is the
free() of that variable below.

>  	o->inmemory_objects = &odb_source_inmemory_new(o)->base;
>  
> -	free(to_free);
> -
> +	free(secondary_sources);
> +	free(primary_source);
>  	return o;
>  }

-- 
Cheers,
Toon

  reply	other threads:[~2026-08-05 13:29 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-24  3:48 [PATCH 0/5] odb: make creation of object database pluggable Patrick Steinhardt
2026-07-24  3:48 ` [PATCH 1/5] loose: load loose object map for the correct source Patrick Steinhardt
2026-07-24 17:26   ` Junio C Hamano
2026-07-28 20:14   ` Justin Tobler
2026-07-30 12:47     ` Toon Claes
2026-08-04  7:21       ` Patrick Steinhardt
2026-07-24  3:48 ` [PATCH 2/5] setup: detangle loading of loose object maps Patrick Steinhardt
2026-07-24 18:41   ` Junio C Hamano
2026-08-04  7:21     ` Patrick Steinhardt
2026-07-28 20:32   ` Justin Tobler
2026-07-30 14:27     ` Toon Claes
2026-08-04  7:21     ` Patrick Steinhardt
2026-07-24  3:48 ` [PATCH 3/5] setup: defer object database creation Patrick Steinhardt
2026-07-24 18:50   ` Junio C Hamano
2026-08-04  7:21     ` Patrick Steinhardt
2026-07-28 21:13   ` Justin Tobler
2026-08-04  7:21     ` Patrick Steinhardt
2026-08-04  7:28       ` Patrick Steinhardt
2026-07-24  3:48 ` [PATCH 4/5] odb/source: introduce function to map source type to name Patrick Steinhardt
2026-07-26 20:34   ` Junio C Hamano
2026-08-04  7:21     ` Patrick Steinhardt
2026-07-24  3:48 ` [PATCH 5/5] odb: make creation of on-disk structures pluggable Patrick Steinhardt
2026-07-26 20:42   ` Junio C Hamano
2026-08-04  7:21     ` Patrick Steinhardt
2026-07-28 21:23   ` Justin Tobler
2026-08-04  8:29 ` [PATCH v2 0/5] odb: make creation of object database pluggable Patrick Steinhardt
2026-08-04  8:29   ` [PATCH v2 1/5] loose: load loose object map for the correct source Patrick Steinhardt
2026-08-04  8:29   ` [PATCH v2 2/5] setup: detangle loading of loose object maps Patrick Steinhardt
2026-08-04  8:29   ` [PATCH v2 3/5] setup: defer object database creation Patrick Steinhardt
2026-08-04 18:48     ` Toon Claes
2026-08-05  7:27       ` Patrick Steinhardt
2026-08-04  8:29   ` [PATCH v2 4/5] odb/source: introduce function to map source type to name Patrick Steinhardt
2026-08-04  8:29   ` [PATCH v2 5/5] odb: make creation of on-disk structures pluggable Patrick Steinhardt
2026-08-04 16:36   ` [PATCH v2 0/5] odb: make creation of object database pluggable Justin Tobler
2026-08-05  9:28 ` [PATCH v3 0/6] " Patrick Steinhardt
2026-08-05  9:28   ` [PATCH v3 1/6] loose: load loose object map for the correct source Patrick Steinhardt
2026-08-05  9:28   ` [PATCH v3 2/6] setup: detangle loading of loose object maps Patrick Steinhardt
2026-08-05  9:28   ` [PATCH v3 3/6] setup: handle ODB-related environment variables in `odb_new()` Patrick Steinhardt
2026-08-05 13:29     ` Toon Claes [this message]
2026-08-06  6:04       ` Patrick Steinhardt
2026-08-05  9:28   ` [PATCH v3 4/6] setup: defer object database creation Patrick Steinhardt
2026-08-05 14:21     ` Toon Claes
2026-08-06  6:02       ` Patrick Steinhardt
2026-08-05  9:28   ` [PATCH v3 5/6] odb/source: introduce function to map source type to name Patrick Steinhardt
2026-08-05  9:28   ` [PATCH v3 6/6] odb: make creation of on-disk structures pluggable Patrick Steinhardt
2026-08-05 15:57     ` Toon Claes
2026-08-06  7:50 ` [PATCH v4 0/6] odb: make creation of object database pluggable Patrick Steinhardt
2026-08-06  7:50   ` [PATCH v4 1/6] loose: load loose object map for the correct source Patrick Steinhardt
2026-08-06  7:51   ` [PATCH v4 2/6] setup: detangle loading of loose object maps Patrick Steinhardt
2026-08-06  7:51   ` [PATCH v4 3/6] setup: handle ODB-related environment variables in `odb_new()` Patrick Steinhardt
2026-08-06  7:51   ` [PATCH v4 4/6] setup: defer object database creation Patrick Steinhardt
2026-08-06 14:23     ` Toon Claes
2026-08-06 14:54       ` Patrick Steinhardt
2026-08-06 17:39         ` Junio C Hamano
2026-08-06  7:51   ` [PATCH v4 5/6] odb/source: introduce function to map source type to name Patrick Steinhardt
2026-08-06  7:51   ` [PATCH v4 6/6] odb: make creation of on-disk structures pluggable Patrick Steinhardt
2026-08-06 14:26   ` [PATCH v4 0/6] odb: make creation of object database pluggable Toon Claes
2026-08-07  3:34 ` [PATCH v5 " Patrick Steinhardt
2026-08-07  3:34   ` [PATCH v5 1/6] loose: load loose object map for the correct source Patrick Steinhardt
2026-08-07  3:34   ` [PATCH v5 2/6] setup: detangle loading of loose object maps Patrick Steinhardt
2026-08-07  3:34   ` [PATCH v5 3/6] setup: handle ODB-related environment variables in `odb_new()` Patrick Steinhardt
2026-08-07  3:34   ` [PATCH v5 4/6] setup: defer object database creation Patrick Steinhardt
2026-08-07  4:28     ` Junio C Hamano
2026-08-07  7:16       ` Toon Claes
2026-08-07  3:34   ` [PATCH v5 5/6] odb/source: introduce function to map source type to name Patrick Steinhardt
2026-08-07  3:34   ` [PATCH v5 6/6] odb: make creation of on-disk structures pluggable Patrick Steinhardt
2026-08-07  7:17   ` [PATCH v5 0/6] odb: make creation of object database pluggable Toon Claes
2026-08-07  9:10     ` 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=878q6k66ha.fsf@emacs.iotcl.com \
    --to=toon@iotcl.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jltobler@gmail.com \
    --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.