odb: move computation of normalized objdir into alt_odb_usable()

The function `alt_odb_usable()` receives as input the object database,
the path it's supposed to determine usability for as well as the
normalized path of the main object directory of the repository. The last
part is derived by the function's caller from the object database. As we
already pass the object database to `alt_odb_usable()` it is redundant
information.

Drop the extra parameter and compute the normalized object directory in
the function itself.

While at it, rename the function to `odb_is_source_usable()` to align it
with modern terminology.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt
2025-12-11 10:30:12 +01:00
committed by Junio C Hamano
parent 84cec5276e
commit d17673ef42

27
odb.c
View File

@@ -89,17 +89,20 @@ int odb_mkstemp(struct object_database *odb,
/*
* Return non-zero iff the path is usable as an alternate object database.
*/
static int alt_odb_usable(struct object_database *o, const char *path,
const char *normalized_objdir)
static bool odb_is_source_usable(struct object_database *o, const char *path)
{
int r;
struct strbuf normalized_objdir = STRBUF_INIT;
bool usable = false;
strbuf_realpath(&normalized_objdir, o->sources->path, 1);
/* Detect cases where alternate disappeared */
if (!is_directory(path)) {
error(_("object directory %s does not exist; "
"check .git/objects/info/alternates"),
path);
return 0;
goto out;
}
/*
@@ -116,13 +119,17 @@ static int alt_odb_usable(struct object_database *o, const char *path,
kh_value(o->source_by_path, p) = o->sources;
}
if (fspatheq(path, normalized_objdir))
return 0;
if (fspatheq(path, normalized_objdir.buf))
goto out;
if (kh_get_odb_path_map(o->source_by_path, path) < kh_end(o->source_by_path))
return 0;
goto out;
return 1;
usable = true;
out:
strbuf_release(&normalized_objdir);
return usable;
}
/*
@@ -164,13 +171,10 @@ static struct odb_source *odb_add_alternate_recursively(struct object_database *
int depth)
{
struct odb_source *alternate = NULL;
struct strbuf tmp = STRBUF_INIT;
khiter_t pos;
int ret;
strbuf_realpath(&tmp, odb->sources->path, 1);
if (!alt_odb_usable(odb, source, tmp.buf))
if (!odb_is_source_usable(odb, source))
goto error;
alternate = odb_source_new(odb, source, false);
@@ -188,7 +192,6 @@ static struct odb_source *odb_add_alternate_recursively(struct object_database *
read_info_alternates(odb, alternate->path, depth + 1);
error:
strbuf_release(&tmp);
return alternate;
}