summaryrefslogtreecommitdiff
path: root/odb.c
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2025-08-11 15:46:44 +0200
committerJunio C Hamano <gitster@pobox.com>2025-08-11 09:22:21 -0700
commita59d44ff3f0f308f9577b05c858c063d2466b061 (patch)
tree092f3869cb42a455a5c59b371e9140415a5088d1 /odb.c
parent25c532f6e0797ef501ce43835fb4af4bd9c33de5 (diff)
odb: return newly created in-memory sources
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>
Diffstat (limited to 'odb.c')
-rw-r--r--odb.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/odb.c b/odb.c
index e41e3952ea..0c808bb288 100644
--- 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,