aboutsummaryrefslogtreecommitdiff
path: root/packfile.c
diff options
context:
space:
mode:
Diffstat (limited to 'packfile.c')
-rw-r--r--packfile.c37
1 files changed, 22 insertions, 15 deletions
diff --git a/packfile.c b/packfile.c
index c35d5ea655..c54deabd64 100644
--- a/packfile.c
+++ b/packfile.c
@@ -2411,28 +2411,32 @@ int packfile_store_for_each_object(struct packfile_store *store,
return pack_errors ? -1 : 0;
}
+struct add_promisor_object_data {
+ struct repository *repo;
+ struct oidset *set;
+};
+
static int add_promisor_object(const struct object_id *oid,
- struct packed_git *pack,
- uint32_t pos UNUSED,
- void *set_)
+ struct object_info *oi UNUSED,
+ void *cb_data)
{
- struct oidset *set = set_;
+ struct add_promisor_object_data *data = cb_data;
struct object *obj;
int we_parsed_object;
- obj = lookup_object(pack->repo, oid);
+ obj = lookup_object(data->repo, oid);
if (obj && obj->parsed) {
we_parsed_object = 0;
} else {
we_parsed_object = 1;
- obj = parse_object_with_flags(pack->repo, oid,
+ obj = parse_object_with_flags(data->repo, oid,
PARSE_OBJECT_SKIP_HASH_CHECK);
}
if (!obj)
return 1;
- oidset_insert(set, oid);
+ oidset_insert(data->set, oid);
/*
* If this is a tree, commit, or tag, the objects it refers
@@ -2450,19 +2454,19 @@ static int add_promisor_object(const struct object_id *oid,
*/
return 0;
while (tree_entry_gently(&desc, &entry))
- oidset_insert(set, &entry.oid);
+ oidset_insert(data->set, &entry.oid);
if (we_parsed_object)
free_tree_buffer(tree);
} else if (obj->type == OBJ_COMMIT) {
struct commit *commit = (struct commit *) obj;
struct commit_list *parents = commit->parents;
- oidset_insert(set, get_commit_tree_oid(commit));
+ oidset_insert(data->set, get_commit_tree_oid(commit));
for (; parents; parents = parents->next)
- oidset_insert(set, &parents->item->object.oid);
+ oidset_insert(data->set, &parents->item->object.oid);
} else if (obj->type == OBJ_TAG) {
struct tag *tag = (struct tag *) obj;
- oidset_insert(set, get_tagged_oid(tag));
+ oidset_insert(data->set, get_tagged_oid(tag));
}
return 0;
}
@@ -2474,10 +2478,13 @@ int is_promisor_object(struct repository *r, const struct object_id *oid)
if (!promisor_objects_prepared) {
if (repo_has_promisor_remote(r)) {
- for_each_packed_object(r, add_promisor_object,
- &promisor_objects,
- ODB_FOR_EACH_OBJECT_PROMISOR_ONLY |
- ODB_FOR_EACH_OBJECT_PACK_ORDER);
+ struct add_promisor_object_data data = {
+ .repo = r,
+ .set = &promisor_objects,
+ };
+
+ odb_for_each_object(r->objects, NULL, add_promisor_object, &data,
+ ODB_FOR_EACH_OBJECT_PROMISOR_ONLY | ODB_FOR_EACH_OBJECT_PACK_ORDER);
}
promisor_objects_prepared = 1;
}