commit-graph: convert remaining functions to handle any repo

Convert all functions to handle arbitrary repositories in commit-graph.c
that are used by functions taking a repository argument already.

Notable exclusion is write_commit_graph and its local functions as that
only works on the_repository.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Stefan Beller 2018-12-14 16:09:39 -08:00 committed by Junio C Hamano
parent 142e9f4432
commit 4f542b7a7f

View File

@ -292,7 +292,8 @@ static int bsearch_graph(struct commit_graph *g, struct object_id *oid, uint32_t
g->chunk_oid_lookup, g->hash_len, pos); g->chunk_oid_lookup, g->hash_len, pos);
} }
static struct commit_list **insert_parent_or_die(struct commit_graph *g, static struct commit_list **insert_parent_or_die(struct repository *r,
struct commit_graph *g,
uint64_t pos, uint64_t pos,
struct commit_list **pptr) struct commit_list **pptr)
{ {
@ -303,7 +304,7 @@ static struct commit_list **insert_parent_or_die(struct commit_graph *g,
die("invalid parent position %"PRIu64, pos); die("invalid parent position %"PRIu64, pos);
hashcpy(oid.hash, g->chunk_oid_lookup + g->hash_len * pos); hashcpy(oid.hash, g->chunk_oid_lookup + g->hash_len * pos);
c = lookup_commit(the_repository, &oid); c = lookup_commit(r, &oid);
if (!c) if (!c)
die(_("could not find commit %s"), oid_to_hex(&oid)); die(_("could not find commit %s"), oid_to_hex(&oid));
c->graph_pos = pos; c->graph_pos = pos;
@ -317,7 +318,9 @@ static void fill_commit_graph_info(struct commit *item, struct commit_graph *g,
item->generation = get_be32(commit_data + g->hash_len + 8) >> 2; item->generation = get_be32(commit_data + g->hash_len + 8) >> 2;
} }
static int fill_commit_in_graph(struct commit *item, struct commit_graph *g, uint32_t pos) static int fill_commit_in_graph(struct repository *r,
struct commit *item,
struct commit_graph *g, uint32_t pos)
{ {
uint32_t edge_value; uint32_t edge_value;
uint32_t *parent_data_ptr; uint32_t *parent_data_ptr;
@ -341,13 +344,13 @@ static int fill_commit_in_graph(struct commit *item, struct commit_graph *g, uin
edge_value = get_be32(commit_data + g->hash_len); edge_value = get_be32(commit_data + g->hash_len);
if (edge_value == GRAPH_PARENT_NONE) if (edge_value == GRAPH_PARENT_NONE)
return 1; return 1;
pptr = insert_parent_or_die(g, edge_value, pptr); pptr = insert_parent_or_die(r, g, edge_value, pptr);
edge_value = get_be32(commit_data + g->hash_len + 4); edge_value = get_be32(commit_data + g->hash_len + 4);
if (edge_value == GRAPH_PARENT_NONE) if (edge_value == GRAPH_PARENT_NONE)
return 1; return 1;
if (!(edge_value & GRAPH_OCTOPUS_EDGES_NEEDED)) { if (!(edge_value & GRAPH_OCTOPUS_EDGES_NEEDED)) {
pptr = insert_parent_or_die(g, edge_value, pptr); pptr = insert_parent_or_die(r, g, edge_value, pptr);
return 1; return 1;
} }
@ -355,7 +358,7 @@ static int fill_commit_in_graph(struct commit *item, struct commit_graph *g, uin
4 * (uint64_t)(edge_value & GRAPH_EDGE_LAST_MASK)); 4 * (uint64_t)(edge_value & GRAPH_EDGE_LAST_MASK));
do { do {
edge_value = get_be32(parent_data_ptr); edge_value = get_be32(parent_data_ptr);
pptr = insert_parent_or_die(g, pptr = insert_parent_or_die(r, g,
edge_value & GRAPH_EDGE_LAST_MASK, edge_value & GRAPH_EDGE_LAST_MASK,
pptr); pptr);
parent_data_ptr++; parent_data_ptr++;
@ -374,7 +377,9 @@ static int find_commit_in_graph(struct commit *item, struct commit_graph *g, uin
} }
} }
static int parse_commit_in_graph_one(struct commit_graph *g, struct commit *item) static int parse_commit_in_graph_one(struct repository *r,
struct commit_graph *g,
struct commit *item)
{ {
uint32_t pos; uint32_t pos;
@ -382,7 +387,7 @@ static int parse_commit_in_graph_one(struct commit_graph *g, struct commit *item
return 1; return 1;
if (find_commit_in_graph(item, g, &pos)) if (find_commit_in_graph(item, g, &pos))
return fill_commit_in_graph(item, g, pos); return fill_commit_in_graph(r, item, g, pos);
return 0; return 0;
} }
@ -391,7 +396,7 @@ int parse_commit_in_graph(struct repository *r, struct commit *item)
{ {
if (!prepare_commit_graph(r)) if (!prepare_commit_graph(r))
return 0; return 0;
return parse_commit_in_graph_one(r->objects->commit_graph, item); return parse_commit_in_graph_one(r, r->objects->commit_graph, item);
} }
void load_commit_graph_info(struct repository *r, struct commit *item) void load_commit_graph_info(struct repository *r, struct commit *item)
@ -403,19 +408,22 @@ void load_commit_graph_info(struct repository *r, struct commit *item)
fill_commit_graph_info(item, r->objects->commit_graph, pos); fill_commit_graph_info(item, r->objects->commit_graph, pos);
} }
static struct tree *load_tree_for_commit(struct commit_graph *g, struct commit *c) static struct tree *load_tree_for_commit(struct repository *r,
struct commit_graph *g,
struct commit *c)
{ {
struct object_id oid; struct object_id oid;
const unsigned char *commit_data = g->chunk_commit_data + const unsigned char *commit_data = g->chunk_commit_data +
GRAPH_DATA_WIDTH * (c->graph_pos); GRAPH_DATA_WIDTH * (c->graph_pos);
hashcpy(oid.hash, commit_data); hashcpy(oid.hash, commit_data);
c->maybe_tree = lookup_tree(the_repository, &oid); c->maybe_tree = lookup_tree(r, &oid);
return c->maybe_tree; return c->maybe_tree;
} }
static struct tree *get_commit_tree_in_graph_one(struct commit_graph *g, static struct tree *get_commit_tree_in_graph_one(struct repository *r,
struct commit_graph *g,
const struct commit *c) const struct commit *c)
{ {
if (c->maybe_tree) if (c->maybe_tree)
@ -423,12 +431,12 @@ static struct tree *get_commit_tree_in_graph_one(struct commit_graph *g,
if (c->graph_pos == COMMIT_NOT_FROM_GRAPH) if (c->graph_pos == COMMIT_NOT_FROM_GRAPH)
BUG("get_commit_tree_in_graph_one called from non-commit-graph commit"); BUG("get_commit_tree_in_graph_one called from non-commit-graph commit");
return load_tree_for_commit(g, (struct commit *)c); return load_tree_for_commit(r, g, (struct commit *)c);
} }
struct tree *get_commit_tree_in_graph(struct repository *r, const struct commit *c) struct tree *get_commit_tree_in_graph(struct repository *r, const struct commit *c)
{ {
return get_commit_tree_in_graph_one(r->objects->commit_graph, c); return get_commit_tree_in_graph_one(r, r->objects->commit_graph, c);
} }
static void write_graph_chunk_fanout(struct hashfile *f, static void write_graph_chunk_fanout(struct hashfile *f,
@ -1025,7 +1033,7 @@ int verify_commit_graph(struct repository *r, struct commit_graph *g)
} }
graph_commit = lookup_commit(r, &cur_oid); graph_commit = lookup_commit(r, &cur_oid);
if (!parse_commit_in_graph_one(g, graph_commit)) if (!parse_commit_in_graph_one(r, g, graph_commit))
graph_report("failed to parse %s from commit-graph", graph_report("failed to parse %s from commit-graph",
oid_to_hex(&cur_oid)); oid_to_hex(&cur_oid));
} }
@ -1061,7 +1069,7 @@ int verify_commit_graph(struct repository *r, struct commit_graph *g)
continue; continue;
} }
if (!oideq(&get_commit_tree_in_graph_one(g, graph_commit)->object.oid, if (!oideq(&get_commit_tree_in_graph_one(r, g, graph_commit)->object.oid,
get_commit_tree_oid(odb_commit))) get_commit_tree_oid(odb_commit)))
graph_report("root tree OID for commit %s in commit-graph is %s != %s", graph_report("root tree OID for commit %s in commit-graph is %s != %s",
oid_to_hex(&cur_oid), oid_to_hex(&cur_oid),