Subject: Re: [PATCH v4 01/17] object-store: rename `raw_object_store` to `object_database`

From: Toon Claes <[email-masked]>
Date: Wed, 04 Jun 2025 10:55:40 +0200

Patrick Steinhardt <[email-masked]> writes:

> The `raw_object_store` structure is the central entry point for reading
> and writing objects in a repository. The main purpose of this structure
> is to manage object directories and provide an interface to access and
> write objects in those object directories.
>
> Right now, many of the functions associated with the raw object store
> implicitly rely on `the_repository` to get access to its `objects`
> pointer, which is the `raw_object_store`. As we want to generally get
> rid of using `the_repository` across our codebase we will have to
> convert this implicit dependency on this global variable into an
> explicit parameter.
>
> This conversion can be done by simply passing in an explicit pointer to
> a repository and then using its `->objects` pointer. But there is a
> second effort underway, which is to make the object subsystem more
> selfcontained so that we can eventually have pluggable object backends.
> As such, passing in a repository wouldn't make a ton of sense, and the
> goal is to convert the object store interfaces such that we always pass
> in a reference to the `raw_object_store` instead.
>
> This will expose the `raw_object_store` type to a lot more callers
> though, which surfaces that this type is named somewhat awkwardly. The
> "raw_" prefix makes readers wonder whether there is a non-raw variant of
> the object store, but there isn't. Furthermore, we nowadays want to name
> functions in a way that they can be clearly attributed to a specific
> subsystem, but calling them e.g. `raw_object_store_has_object()` is just
> too unwieldy, even when dropping the "raw_" prefix.
>
> Instead, rename the structure to `object_database`. This term is already
> used a lot throughout our codebase, and it cannot easily be mistaken for
> "object directories", either. Furthermore, its acronym ODB is already
> well-known and works well as part of a function's name, like for example
> `odb_has_object()`.
>
> Signed-off-by: Patrick Steinhardt <[email-masked]>
> ---
>  commit-graph.c |  2 +-
>  commit-graph.h |  4 ++--
>  object-store.c | 12 ++++++------
>  object-store.h | 11 ++++++++---
>  packfile.c     |  2 +-
>  packfile.h     |  4 ++--
>  repository.c   |  4 ++--
>  repository.h   |  4 ++--
>  8 files changed, 24 insertions(+), 19 deletions(-)
>
> diff --git a/commit-graph.c b/commit-graph.c
> index ad3943b6906..905fcbdf0e8 100644
> --- a/commit-graph.c
> +++ b/commit-graph.c
> @@ -829,7 +829,7 @@ struct bloom_filter_settings *get_bloom_filter_settings(struct repository *r)
>  	return NULL;
>  }
>  
> -void close_commit_graph(struct raw_object_store *o)
> +void close_commit_graph(struct object_database *o)
>  {
>  	if (!o->commit_graph)
>  		return;
> diff --git a/commit-graph.h b/commit-graph.h
> index 13f662827d4..20d38c100ce 100644
> --- a/commit-graph.h
> +++ b/commit-graph.h
> @@ -26,7 +26,7 @@ void git_test_write_commit_graph_or_die(void);
>  struct commit;
>  struct bloom_filter_settings;
>  struct repository;
> -struct raw_object_store;
> +struct object_database;
>  struct string_list;
>  
>  char *get_commit_graph_filename(struct object_directory *odb);
> @@ -186,7 +186,7 @@ int write_commit_graph(struct object_directory *odb,
>  
>  int verify_commit_graph(struct repository *r, struct commit_graph *g, int flags);
>  
> -void close_commit_graph(struct raw_object_store *);
> +void close_commit_graph(struct object_database *);
>  void free_commit_graph(struct commit_graph *);
>  
>  /*
> diff --git a/object-store.c b/object-store.c
> index 58cde0313a5..f4e8f99d90f 100644
> --- a/object-store.c
> +++ b/object-store.c
> @@ -44,7 +44,7 @@ struct cached_object_entry {
>  	} value;
>  };
>  
> -static const struct cached_object *find_cached_object(struct raw_object_store *object_store,
> +static const struct cached_object *find_cached_object(struct object_database *object_store,
>  						      const struct object_id *oid)
>  {
>  	static const struct cached_object empty_tree = {
> @@ -86,7 +86,7 @@ int odb_mkstemp(struct strbuf *temp_filename, const char *pattern)
>  /*
>   * Return non-zero iff the path is usable as an alternate object database.
>   */
> -static int alt_odb_usable(struct raw_object_store *o,
> +static int alt_odb_usable(struct object_database *o,
>  			  struct strbuf *path,
>  			  const char *normalized_objdir, khiter_t *pos)
>  {
> @@ -950,9 +950,9 @@ void assert_oid_type(const struct object_id *oid, enum object_type expect)
>  		    type_name(expect));
>  }
>  
> -struct raw_object_store *raw_object_store_new(void)
> +struct object_database *odb_new(void)
>  {
> -	struct raw_object_store *o = xmalloc(sizeof(*o));
> +	struct object_database *o = xmalloc(sizeof(*o));
>  
>  	memset(o, 0, sizeof(*o));
>  	INIT_LIST_HEAD(&o->packed_git_mru);
> @@ -961,7 +961,7 @@ struct raw_object_store *raw_object_store_new(void)
>  	return o;
>  }
>  
> -static void free_object_directories(struct raw_object_store *o)
> +static void free_object_directories(struct object_database *o)
>  {
>  	while (o->odb) {
>  		struct object_directory *next;
> @@ -974,7 +974,7 @@ static void free_object_directories(struct raw_object_store *o)
>  	o->odb_by_path = NULL;
>  }
>  
> -void raw_object_store_clear(struct raw_object_store *o)
> +void odb_clear(struct object_database *o)
>  {
>  	FREE_AND_NULL(o->alternate_db);
>  
> diff --git a/object-store.h b/object-store.h
> index c5890085352..a3be27d1171 100644
> --- a/object-store.h
> +++ b/object-store.h
> @@ -87,7 +87,12 @@ struct packed_git;
>  struct multi_pack_index;
>  struct cached_object_entry;
>  
> -struct raw_object_store {
> +/*
> + * The object database encapsulates access to objects in a repository. It
> + * manages one or more backends that store the actual objects which are
> + * configured via alternates.

This still uses /old/ terminology. I think the "backend" should be
called "source", and we can keep the "alternates"?

-- 
Cheers,
Toon