Skip to content

Commit

Permalink
commit-graph.h: store object directory in 'struct commit_graph'
Browse files Browse the repository at this point in the history
In a previous patch, the 'char *object_dir' in 'struct commit_graph' was
replaced with a 'struct object_directory'. This patch applies the same
treatment to 'struct commit_graph', which is another intermediate step
towards getting rid of all path normalization in 'commit-graph.c'.

Instead of taking a 'char *object_dir', functions that construct a
'struct commit_graph' now take a 'struct object_directory *'. Any code
that needs an object directory path use '->path' instead.

This ensures that all calls to functions that perform path normalization
are given arguments which do not themselves require normalization. This
prepares those functions to drop their normalization entirely, which
will occur in the subsequent patch.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
ttaylorr authored and gitster committed Feb 4, 2020
1 parent 0bd52e2 commit 13c2499
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 20 deletions.
2 changes: 1 addition & 1 deletion builtin/commit-graph.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ static int graph_verify(int argc, const char **argv)
if (open_ok)
graph = load_commit_graph_one_fd_st(fd, &st);
else
graph = read_commit_graph_one(the_repository, odb->path);
graph = read_commit_graph_one(the_repository, odb);

/* Return failure if open_ok predicted success */
if (!graph)
Expand Down
38 changes: 21 additions & 17 deletions commit-graph.c
Original file line number Diff line number Diff line change
Expand Up @@ -327,14 +327,15 @@ static struct commit_graph *load_commit_graph_one(const char *graph_file)
return g;
}

static struct commit_graph *load_commit_graph_v1(struct repository *r, const char *obj_dir)
static struct commit_graph *load_commit_graph_v1(struct repository *r,
struct object_directory *odb)
{
char *graph_name = get_commit_graph_filename(obj_dir);
char *graph_name = get_commit_graph_filename(odb->path);
struct commit_graph *g = load_commit_graph_one(graph_name);
free(graph_name);

if (g)
g->obj_dir = obj_dir;
g->odb = odb;

return g;
}
Expand Down Expand Up @@ -372,14 +373,15 @@ static int add_graph_to_chain(struct commit_graph *g,
return 1;
}

static struct commit_graph *load_commit_graph_chain(struct repository *r, const char *obj_dir)
static struct commit_graph *load_commit_graph_chain(struct repository *r,
struct object_directory *odb)
{
struct commit_graph *graph_chain = NULL;
struct strbuf line = STRBUF_INIT;
struct stat st;
struct object_id *oids;
int i = 0, valid = 1, count;
char *chain_name = get_chain_filename(obj_dir);
char *chain_name = get_chain_filename(odb->path);
FILE *fp;
int stat_res;

Expand Down Expand Up @@ -418,7 +420,7 @@ static struct commit_graph *load_commit_graph_chain(struct repository *r, const
free(graph_name);

if (g) {
g->obj_dir = odb->path;
g->odb = odb;

if (add_graph_to_chain(g, graph_chain, oids, i)) {
graph_chain = g;
Expand All @@ -442,23 +444,25 @@ static struct commit_graph *load_commit_graph_chain(struct repository *r, const
return graph_chain;
}

struct commit_graph *read_commit_graph_one(struct repository *r, const char *obj_dir)
struct commit_graph *read_commit_graph_one(struct repository *r,
struct object_directory *odb)
{
struct commit_graph *g = load_commit_graph_v1(r, obj_dir);
struct commit_graph *g = load_commit_graph_v1(r, odb);

if (!g)
g = load_commit_graph_chain(r, obj_dir);
g = load_commit_graph_chain(r, odb);

return g;
}

static void prepare_commit_graph_one(struct repository *r, const char *obj_dir)
static void prepare_commit_graph_one(struct repository *r,
struct object_directory *odb)
{

if (r->objects->commit_graph)
return;

r->objects->commit_graph = read_commit_graph_one(r, obj_dir);
r->objects->commit_graph = read_commit_graph_one(r, odb);
}

/*
Expand Down Expand Up @@ -505,7 +509,7 @@ static int prepare_commit_graph(struct repository *r)
for (odb = r->objects->odb;
!r->objects->commit_graph && odb;
odb = odb->next)
prepare_commit_graph_one(r, odb->path);
prepare_commit_graph_one(r, odb);
return !!r->objects->commit_graph;
}

Expand Down Expand Up @@ -1470,7 +1474,7 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx)

if (ctx->split && ctx->base_graph_name && ctx->num_commit_graphs_after > 1) {
char *new_base_hash = xstrdup(oid_to_hex(&ctx->new_base_graph->oid));
char *new_base_name = get_split_graph_filename(ctx->new_base_graph->obj_dir, new_base_hash);
char *new_base_name = get_split_graph_filename(ctx->new_base_graph->odb->path, new_base_hash);

free(ctx->commit_graph_filenames_after[ctx->num_commit_graphs_after - 2]);
free(ctx->commit_graph_hash_after[ctx->num_commit_graphs_after - 2]);
Expand Down Expand Up @@ -1553,7 +1557,7 @@ static void split_graph_merge_strategy(struct write_commit_graph_context *ctx)

while (g && (g->num_commits <= size_mult * num_commits ||
(max_commits && num_commits > max_commits))) {
if (strcmp(g->obj_dir, ctx->odb->path))
if (strcmp(g->odb->path, ctx->odb->path))
break;

num_commits += g->num_commits;
Expand All @@ -1565,10 +1569,10 @@ static void split_graph_merge_strategy(struct write_commit_graph_context *ctx)
ctx->new_base_graph = g;

if (ctx->num_commit_graphs_after == 2) {
char *old_graph_name = get_commit_graph_filename(g->obj_dir);
char *old_graph_name = get_commit_graph_filename(g->odb->path);

if (!strcmp(g->filename, old_graph_name) &&
strcmp(g->obj_dir, ctx->odb->path)) {
strcmp(g->odb->path, ctx->odb->path)) {
ctx->num_commit_graphs_after = 1;
ctx->new_base_graph = NULL;
}
Expand Down Expand Up @@ -1816,7 +1820,7 @@ int write_commit_graph(struct object_directory *odb,
ctx->oids.alloc = split_opts->max_commits;

if (ctx->append) {
prepare_commit_graph_one(ctx->r, ctx->odb->path);
prepare_commit_graph_one(ctx->r, ctx->odb);
if (ctx->r->objects->commit_graph)
ctx->oids.alloc += ctx->r->objects->commit_graph->num_commits;
}
Expand Down
5 changes: 3 additions & 2 deletions commit-graph.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ struct commit_graph {
uint32_t num_commits;
struct object_id oid;
char *filename;
const char *obj_dir;
struct object_directory *odb;

uint32_t num_commits_in_base;
struct commit_graph *base_graph;
Expand All @@ -62,7 +62,8 @@ struct commit_graph {
};

struct commit_graph *load_commit_graph_one_fd_st(int fd, struct stat *st);
struct commit_graph *read_commit_graph_one(struct repository *r, const char *obj_dir);
struct commit_graph *read_commit_graph_one(struct repository *r,
struct object_directory *odb);
struct commit_graph *parse_commit_graph(void *graph_map, int fd,
size_t graph_size);

Expand Down

0 comments on commit 13c2499

Please sign in to comment.