1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-22 02:46:10 +02:00

object: drop parsed_object_pool->commit_count

14ba97f8 (alloc: allow arbitrary repositories for alloc functions,
2018-05-15) introduced parsed_object_pool->commit_count to keep count of
commits per repository and was used to assign commit->index.

However, commit-slab code requires commit->index values to be unique
and a global count would be correct, rather than a per-repo count.

Let's introduce a static counter variable, `parsed_commits_count` to
keep track of parsed commits so far.

As commit_count has no use anymore, let's also drop it from the struct.

Signed-off-by: Abhishek Kumar <abhishekkumar8222@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Abhishek Kumar 2020-06-17 14:44:08 +05:30 committed by Junio C Hamano
parent eebb51ba8c
commit 6da43d937c
12 changed files with 24 additions and 19 deletions

16
alloc.c
View File

@ -99,15 +99,21 @@ void *alloc_object_node(struct repository *r)
return obj; return obj;
} }
static unsigned int alloc_commit_index(struct repository *r) /*
* The returned count is to be used as an index into commit slabs,
* that are *NOT* maintained per repository, and that is why a single
* global counter is used.
*/
static unsigned int alloc_commit_index(void)
{ {
return r->parsed_objects->commit_count++; static unsigned int parsed_commits_count;
return parsed_commits_count++;
} }
void init_commit_node(struct repository *r, struct commit *c) void init_commit_node(struct commit *c)
{ {
c->object.type = OBJ_COMMIT; c->object.type = OBJ_COMMIT;
c->index = alloc_commit_index(r); c->index = alloc_commit_index();
c->graph_pos = COMMIT_NOT_FROM_GRAPH; c->graph_pos = COMMIT_NOT_FROM_GRAPH;
c->generation = GENERATION_NUMBER_INFINITY; c->generation = GENERATION_NUMBER_INFINITY;
} }
@ -115,7 +121,7 @@ void init_commit_node(struct repository *r, struct commit *c)
void *alloc_commit_node(struct repository *r) void *alloc_commit_node(struct repository *r)
{ {
struct commit *c = alloc_node(r->parsed_objects->commit_state, sizeof(struct commit)); struct commit *c = alloc_node(r->parsed_objects->commit_state, sizeof(struct commit));
init_commit_node(r, c); init_commit_node(c);
return c; return c;
} }

View File

@ -9,7 +9,7 @@ struct repository;
void *alloc_blob_node(struct repository *r); void *alloc_blob_node(struct repository *r);
void *alloc_tree_node(struct repository *r); void *alloc_tree_node(struct repository *r);
void init_commit_node(struct repository *r, struct commit *c); void init_commit_node(struct commit *c);
void *alloc_commit_node(struct repository *r); void *alloc_commit_node(struct repository *r);
void *alloc_tag_node(struct repository *r); void *alloc_tag_node(struct repository *r);
void *alloc_object_node(struct repository *r); void *alloc_object_node(struct repository *r);

2
blob.c
View File

@ -10,7 +10,7 @@ struct blob *lookup_blob(struct repository *r, const struct object_id *oid)
struct object *obj = lookup_object(r, oid); struct object *obj = lookup_object(r, oid);
if (!obj) if (!obj)
return create_object(r, oid, alloc_blob_node(r)); return create_object(r, oid, alloc_blob_node(r));
return object_as_type(r, obj, OBJ_BLOB, 0); return object_as_type(obj, OBJ_BLOB, 0);
} }
int parse_blob_buffer(struct blob *item, void *buffer, unsigned long size) int parse_blob_buffer(struct blob *item, void *buffer, unsigned long size)

View File

@ -154,7 +154,7 @@ static int read_one_commit(struct oidset *commits, struct progress *progress,
NULL, 0); NULL, 0);
if (!result) if (!result)
return error(_("invalid object: %s"), hash); return error(_("invalid object: %s"), hash);
else if (object_as_type(the_repository, result, OBJ_COMMIT, 1)) else if (object_as_type(result, OBJ_COMMIT, 1))
oidset_insert(commits, &result->oid); oidset_insert(commits, &result->oid);
display_progress(progress, oidset_size(commits)); display_progress(progress, oidset_size(commits));

View File

@ -241,7 +241,7 @@ static void mark_unreachable_referents(const struct object_id *oid)
enum object_type type = oid_object_info(the_repository, enum object_type type = oid_object_info(the_repository,
&obj->oid, NULL); &obj->oid, NULL);
if (type > 0) if (type > 0)
object_as_type(the_repository, obj, type, 0); object_as_type(obj, type, 0);
} }
options.walk = mark_used; options.walk = mark_used;

View File

@ -37,7 +37,7 @@ struct commit *lookup_commit_reference_gently(struct repository *r,
if (!obj) if (!obj)
return NULL; return NULL;
return object_as_type(r, obj, OBJ_COMMIT, quiet); return object_as_type(obj, OBJ_COMMIT, quiet);
} }
struct commit *lookup_commit_reference(struct repository *r, const struct object_id *oid) struct commit *lookup_commit_reference(struct repository *r, const struct object_id *oid)
@ -62,7 +62,7 @@ struct commit *lookup_commit(struct repository *r, const struct object_id *oid)
struct object *obj = lookup_object(r, oid); struct object *obj = lookup_object(r, oid);
if (!obj) if (!obj)
return create_object(r, oid, alloc_commit_node(r)); return create_object(r, oid, alloc_commit_node(r));
return object_as_type(r, obj, OBJ_COMMIT, 0); return object_as_type(obj, OBJ_COMMIT, 0);
} }
struct commit *lookup_commit_reference_by_name(const char *name) struct commit *lookup_commit_reference_by_name(const char *name)

View File

@ -157,13 +157,13 @@ void *create_object(struct repository *r, const struct object_id *oid, void *o)
return obj; return obj;
} }
void *object_as_type(struct repository *r, struct object *obj, enum object_type type, int quiet) void *object_as_type(struct object *obj, enum object_type type, int quiet)
{ {
if (obj->type == type) if (obj->type == type)
return obj; return obj;
else if (obj->type == OBJ_NONE) { else if (obj->type == OBJ_NONE) {
if (type == OBJ_COMMIT) if (type == OBJ_COMMIT)
init_commit_node(r, (struct commit *) obj); init_commit_node((struct commit *) obj);
else else
obj->type = type; obj->type = type;
return obj; return obj;

View File

@ -15,7 +15,6 @@ struct parsed_object_pool {
struct alloc_state *commit_state; struct alloc_state *commit_state;
struct alloc_state *tag_state; struct alloc_state *tag_state;
struct alloc_state *object_state; struct alloc_state *object_state;
unsigned commit_count;
/* parent substitutions from .git/info/grafts and .git/shallow */ /* parent substitutions from .git/info/grafts and .git/shallow */
struct commit_graft **grafts; struct commit_graft **grafts;
@ -121,7 +120,7 @@ struct object *lookup_object(struct repository *r, const struct object_id *oid);
void *create_object(struct repository *r, const struct object_id *oid, void *obj); void *create_object(struct repository *r, const struct object_id *oid, void *obj);
void *object_as_type(struct repository *r, struct object *obj, enum object_type type, int quiet); void *object_as_type(struct object *obj, enum object_type type, int quiet);
/* /*
* Returns the object, having parsed it to find out what it is. * Returns the object, having parsed it to find out what it is.

2
refs.c
View File

@ -339,7 +339,7 @@ enum peel_status peel_object(const struct object_id *name, struct object_id *oid
if (o->type == OBJ_NONE) { if (o->type == OBJ_NONE) {
int type = oid_object_info(the_repository, name, NULL); int type = oid_object_info(the_repository, name, NULL);
if (type < 0 || !object_as_type(the_repository, o, type, 0)) if (type < 0 || !object_as_type(o, type, 0))
return PEEL_INVALID; return PEEL_INVALID;
} }

View File

@ -67,7 +67,7 @@ int cmd__reach(int ac, const char **av)
die("failed to load commit for input %s resulting in oid %s\n", die("failed to load commit for input %s resulting in oid %s\n",
buf.buf, oid_to_hex(&oid)); buf.buf, oid_to_hex(&oid));
c = object_as_type(r, peeled, OBJ_COMMIT, 0); c = object_as_type(peeled, OBJ_COMMIT, 0);
if (!c) if (!c)
die("failed to load commit for input %s resulting in oid %s\n", die("failed to load commit for input %s resulting in oid %s\n",

2
tag.c
View File

@ -103,7 +103,7 @@ struct tag *lookup_tag(struct repository *r, const struct object_id *oid)
struct object *obj = lookup_object(r, oid); struct object *obj = lookup_object(r, oid);
if (!obj) if (!obj)
return create_object(r, oid, alloc_tag_node(r)); return create_object(r, oid, alloc_tag_node(r));
return object_as_type(r, obj, OBJ_TAG, 0); return object_as_type(obj, OBJ_TAG, 0);
} }
static timestamp_t parse_tag_date(const char *buf, const char *tail) static timestamp_t parse_tag_date(const char *buf, const char *tail)

2
tree.c
View File

@ -200,7 +200,7 @@ struct tree *lookup_tree(struct repository *r, const struct object_id *oid)
struct object *obj = lookup_object(r, oid); struct object *obj = lookup_object(r, oid);
if (!obj) if (!obj)
return create_object(r, oid, alloc_tree_node(r)); return create_object(r, oid, alloc_tree_node(r));
return object_as_type(r, obj, OBJ_TREE, 0); return object_as_type(obj, OBJ_TREE, 0);
} }
int parse_tree_buffer(struct tree *item, void *buffer, unsigned long size) int parse_tree_buffer(struct tree *item, void *buffer, unsigned long size)