]> git.ipfire.org Git - thirdparty/git.git/commitdiff
odb: return newly created in-memory sources
authorPatrick Steinhardt <ps@pks.im>
Mon, 11 Aug 2025 13:46:44 +0000 (15:46 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 11 Aug 2025 16:22:21 +0000 (09:22 -0700)
Callers have no trivial way to obtain the newly created object database
source when adding it to the in-memory list of alternates. While not yet
needed anywhere, a subsequent commit will want to obtain that pointer.

Refactor the function to return the source to make it easily accessible.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
odb.c
odb.h

diff --git a/odb.c b/odb.c
index e41e3952ea0a28c54d53514952667bb615635caf..0c808bb288f1688d97b60f42918fd625d8db5645 100644 (file)
--- a/odb.c
+++ b/odb.c
@@ -139,17 +139,16 @@ static void read_info_alternates(struct object_database *odb,
                                 const char *relative_base,
                                 int depth);
 
-static int link_alt_odb_entry(struct object_database *odb,
-                             const char *dir,
-                             const char *relative_base,
-                             int depth,
-                             const char *normalized_objdir)
+static struct odb_source *link_alt_odb_entry(struct object_database *odb,
+                                            const char *dir,
+                                            const char *relative_base,
+                                            int depth,
+                                            const char *normalized_objdir)
 {
-       struct odb_source *alternate;
+       struct odb_source *alternate = NULL;
        struct strbuf pathbuf = STRBUF_INIT;
        struct strbuf tmp = STRBUF_INIT;
        khiter_t pos;
-       int ret = -1;
 
        if (!is_absolute_path(dir) && relative_base) {
                strbuf_realpath(&pathbuf, relative_base, 1);
@@ -189,11 +188,11 @@ static int link_alt_odb_entry(struct object_database *odb,
 
        /* recursively add alternates */
        read_info_alternates(odb, alternate->path, depth + 1);
-       ret = 0;
+
  error:
        strbuf_release(&tmp);
        strbuf_release(&pathbuf);
-       return ret;
+       return alternate;
 }
 
 static const char *parse_alt_odb_entry(const char *string,
@@ -315,16 +314,23 @@ void odb_add_to_alternates_file(struct object_database *odb,
        free(alts);
 }
 
-void odb_add_to_alternates_memory(struct object_database *odb,
-                                 const char *dir)
+struct odb_source *odb_add_to_alternates_memory(struct object_database *odb,
+                                               const char *dir)
 {
+       struct odb_source *alternate;
+       char *objdir;
+
        /*
         * Make sure alternates are initialized, or else our entry may be
         * overwritten when they are.
         */
        odb_prepare_alternates(odb);
 
-       link_alt_odb_entries(odb, dir, '\n', NULL, 0);
+       objdir = real_pathdup(odb->sources->path, 1);
+       alternate = link_alt_odb_entry(odb, dir, NULL, 0, objdir);
+
+       free(objdir);
+       return alternate;
 }
 
 struct odb_source *odb_set_temporary_primary_source(struct object_database *odb,
diff --git a/odb.h b/odb.h
index 312921077b857a4b832ab02d53ae734e5de1ffc0..d76913269979473cb0fafbd6c05f5730b9bb571d 100644 (file)
--- a/odb.h
+++ b/odb.h
@@ -268,8 +268,8 @@ void odb_add_to_alternates_file(struct object_database *odb,
  * recursive alternates it points to), but do not modify the on-disk alternates
  * file.
  */
-void odb_add_to_alternates_memory(struct object_database *odb,
-                                 const char *dir);
+struct odb_source *odb_add_to_alternates_memory(struct object_database *odb,
+                                               const char *dir);
 
 /*
  * Read an object from the database. Returns the object data and assigns object