odb: drop forward declaration of read_info_alternates()

Now that we have removed the mutual recursion in the preceding commit
it is not necessary anymore to have a forward declaration of the
`read_info_alternates()` function. Move the function and its
dependencies further up so that we can remove it.

Note that this commit also removes the function documentation of
`read_info_alternates()`. It's unclear what it's documenting, but it for
sure isn't documenting the modern behaviour of the function anymore.

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:15 +01:00
committed by Junio C Hamano
parent 430e0e0f2e
commit 3f42555322

125
odb.c
View File

@@ -132,77 +132,6 @@ out:
return usable;
}
/*
* Prepare alternate object database registry.
*
* The variable alt_odb_list points at the list of struct
* odb_source. The elements on this list come from
* non-empty elements from colon separated ALTERNATE_DB_ENVIRONMENT
* environment variable, and $GIT_OBJECT_DIRECTORY/info/alternates,
* whose contents is similar to that environment variable but can be
* LF separated. Its base points at a statically allocated buffer that
* contains "/the/directory/corresponding/to/.git/objects/...", while
* its name points just after the slash at the end of ".git/objects/"
* in the example above, and has enough space to hold all hex characters
* of the object ID, an extra slash for the first level indirection, and
* the terminating NUL.
*/
static void read_info_alternates(const char *relative_base,
struct strvec *out);
static struct odb_source *odb_source_new(struct object_database *odb,
const char *path,
bool local)
{
struct odb_source *source;
CALLOC_ARRAY(source, 1);
source->odb = odb;
source->local = local;
source->path = xstrdup(path);
source->loose = odb_source_loose_new(source);
return source;
}
static struct odb_source *odb_add_alternate_recursively(struct object_database *odb,
const char *source,
int depth)
{
struct odb_source *alternate = NULL;
struct strvec sources = STRVEC_INIT;
khiter_t pos;
int ret;
if (!odb_is_source_usable(odb, source))
goto error;
alternate = odb_source_new(odb, source, false);
/* add the alternate entry */
*odb->sources_tail = alternate;
odb->sources_tail = &(alternate->next);
pos = kh_put_odb_path_map(odb->source_by_path, alternate->path, &ret);
if (!ret)
BUG("source must not yet exist");
kh_value(odb->source_by_path, pos) = alternate;
/* recursively add alternates */
read_info_alternates(alternate->path, &sources);
if (sources.nr && depth + 1 > 5) {
error(_("%s: ignoring alternate object stores, nesting too deep"),
source);
} else {
for (size_t i = 0; i < sources.nr; i++)
odb_add_alternate_recursively(odb, sources.v[i], depth + 1);
}
error:
strvec_clear(&sources);
return alternate;
}
static void parse_alternates(const char *string,
int sep,
const char *relative_base,
@@ -288,6 +217,60 @@ static void read_info_alternates(const char *relative_base,
free(path);
}
static struct odb_source *odb_source_new(struct object_database *odb,
const char *path,
bool local)
{
struct odb_source *source;
CALLOC_ARRAY(source, 1);
source->odb = odb;
source->local = local;
source->path = xstrdup(path);
source->loose = odb_source_loose_new(source);
return source;
}
static struct odb_source *odb_add_alternate_recursively(struct object_database *odb,
const char *source,
int depth)
{
struct odb_source *alternate = NULL;
struct strvec sources = STRVEC_INIT;
khiter_t pos;
int ret;
if (!odb_is_source_usable(odb, source))
goto error;
alternate = odb_source_new(odb, source, false);
/* add the alternate entry */
*odb->sources_tail = alternate;
odb->sources_tail = &(alternate->next);
pos = kh_put_odb_path_map(odb->source_by_path, alternate->path, &ret);
if (!ret)
BUG("source must not yet exist");
kh_value(odb->source_by_path, pos) = alternate;
/* recursively add alternates */
read_info_alternates(alternate->path, &sources);
if (sources.nr && depth + 1 > 5) {
error(_("%s: ignoring alternate object stores, nesting too deep"),
source);
} else {
for (size_t i = 0; i < sources.nr; i++)
odb_add_alternate_recursively(odb, sources.v[i], depth + 1);
}
error:
strvec_clear(&sources);
return alternate;
}
void odb_add_to_alternates_file(struct object_database *odb,
const char *dir)
{