mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
odb: get rid of the_repository in for_each() functions
There are a couple of iterator-style functions that execute a callback for each instance of a given set, all of which currently depend on `the_repository`. Refactor them to instead take an object database as parameter so that we can get rid of this dependency. Rename the functions accordingly. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
c44185f6c1
commit
798c661ce3
36
odb.c
36
odb.c
@@ -494,8 +494,8 @@ static void fill_alternate_refs_command(struct child_process *cmd,
|
||||
}
|
||||
|
||||
static void read_alternate_refs(const char *path,
|
||||
alternate_ref_fn *cb,
|
||||
void *data)
|
||||
odb_for_each_alternate_ref_fn *cb,
|
||||
void *payload)
|
||||
{
|
||||
struct child_process cmd = CHILD_PROCESS_INIT;
|
||||
struct strbuf line = STRBUF_INIT;
|
||||
@@ -517,7 +517,7 @@ static void read_alternate_refs(const char *path,
|
||||
break;
|
||||
}
|
||||
|
||||
cb(&oid, data);
|
||||
cb(&oid, payload);
|
||||
}
|
||||
|
||||
fclose(fh);
|
||||
@@ -526,16 +526,16 @@ static void read_alternate_refs(const char *path,
|
||||
}
|
||||
|
||||
struct alternate_refs_data {
|
||||
alternate_ref_fn *fn;
|
||||
void *data;
|
||||
odb_for_each_alternate_ref_fn *fn;
|
||||
void *payload;
|
||||
};
|
||||
|
||||
static int refs_from_alternate_cb(struct odb_source *alternate,
|
||||
void *data)
|
||||
void *payload)
|
||||
{
|
||||
struct strbuf path = STRBUF_INIT;
|
||||
size_t base_len;
|
||||
struct alternate_refs_data *cb = data;
|
||||
struct alternate_refs_data *cb = payload;
|
||||
|
||||
if (!strbuf_realpath(&path, alternate->path, 0))
|
||||
goto out;
|
||||
@@ -549,29 +549,31 @@ static int refs_from_alternate_cb(struct odb_source *alternate,
|
||||
goto out;
|
||||
strbuf_setlen(&path, base_len);
|
||||
|
||||
read_alternate_refs(path.buf, cb->fn, cb->data);
|
||||
read_alternate_refs(path.buf, cb->fn, cb->payload);
|
||||
|
||||
out:
|
||||
strbuf_release(&path);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void for_each_alternate_ref(alternate_ref_fn fn, void *data)
|
||||
void odb_for_each_alternate_ref(struct object_database *odb,
|
||||
odb_for_each_alternate_ref_fn cb, void *payload)
|
||||
{
|
||||
struct alternate_refs_data cb;
|
||||
cb.fn = fn;
|
||||
cb.data = data;
|
||||
foreach_alt_odb(refs_from_alternate_cb, &cb);
|
||||
struct alternate_refs_data data;
|
||||
data.fn = cb;
|
||||
data.payload = payload;
|
||||
odb_for_each_alternate(odb, refs_from_alternate_cb, &data);
|
||||
}
|
||||
|
||||
int foreach_alt_odb(alt_odb_fn fn, void *cb)
|
||||
int odb_for_each_alternate(struct object_database *odb,
|
||||
odb_for_each_alternate_fn cb, void *payload)
|
||||
{
|
||||
struct odb_source *alternate;
|
||||
int r = 0;
|
||||
|
||||
odb_prepare_alternates(the_repository->objects);
|
||||
for (alternate = the_repository->objects->sources->next; alternate; alternate = alternate->next) {
|
||||
r = fn(alternate, cb);
|
||||
odb_prepare_alternates(odb);
|
||||
for (alternate = odb->sources->next; alternate; alternate = alternate->next) {
|
||||
r = cb(alternate, payload);
|
||||
if (r)
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user