]> git.ipfire.org Git - thirdparty/git.git/commitdiff
object: drop parsed_object_pool->commit_count
authorAbhishek Kumar <abhishekkumar8222@gmail.com>
Wed, 17 Jun 2020 09:14:08 +0000 (14:44 +0530)
committerJunio C Hamano <gitster@pobox.com>
Wed, 17 Jun 2020 21:37:14 +0000 (14:37 -0700)
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>
12 files changed:
alloc.c
alloc.h
blob.c
builtin/commit-graph.c
builtin/fsck.c
commit.c
object.c
object.h
refs.c
t/helper/test-reach.c
tag.c
tree.c

diff --git a/alloc.c b/alloc.c
index 1c64c4dd1629c63a8bb2fff6e580ee0c648a0730..99fa934b32c4b6626988644982d03009e167b83e 100644 (file)
--- a/alloc.c
+++ b/alloc.c
@@ -99,15 +99,21 @@ void *alloc_object_node(struct repository *r)
        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->index = alloc_commit_index(r);
+       c->index = alloc_commit_index();
        c->graph_pos = COMMIT_NOT_FROM_GRAPH;
        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)
 {
        struct commit *c = alloc_node(r->parsed_objects->commit_state, sizeof(struct commit));
-       init_commit_node(r, c);
+       init_commit_node(c);
        return c;
 }
 
diff --git a/alloc.h b/alloc.h
index ed1071c11ea3a6d0f7d55da46df4acf524a32565..371d388b552fb01824b4ec208abe7fdf11d95eec 100644 (file)
--- a/alloc.h
+++ b/alloc.h
@@ -9,7 +9,7 @@ struct repository;
 
 void *alloc_blob_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_tag_node(struct repository *r);
 void *alloc_object_node(struct repository *r);
diff --git a/blob.c b/blob.c
index 36f9abda19ec1095a903aa138bdf53ce18a86b10..182718aba9fe320f1064a12fb5baf1969f563b29 100644 (file)
--- a/blob.c
+++ b/blob.c
@@ -10,7 +10,7 @@ struct blob *lookup_blob(struct repository *r, const struct object_id *oid)
        struct object *obj = lookup_object(r, oid);
        if (!obj)
                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)
index 75455da138d5f6efae26eb5d5280050aa351dee3..f6797e2a9fb3210192dc65a044b084458ab632d6 100644 (file)
@@ -154,7 +154,7 @@ static int read_one_commit(struct oidset *commits, struct progress *progress,
                           NULL, 0);
        if (!result)
                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);
 
        display_progress(progress, oidset_size(commits));
index f02cbdb439b210f973c06588da8a29f87fe23350..b2cef013896c2ab628680a86fcc80095e8fa80ae 100644 (file)
@@ -241,7 +241,7 @@ static void mark_unreachable_referents(const struct object_id *oid)
                enum object_type type = oid_object_info(the_repository,
                                                        &obj->oid, NULL);
                if (type > 0)
-                       object_as_type(the_repository, obj, type, 0);
+                       object_as_type(obj, type, 0);
        }
 
        options.walk = mark_used;
index 87686a7055bc5c502de88032d1c474e32539e6a0..b30875e66bfd6e0db92dfde7212367da23e2c0dd 100644 (file)
--- a/commit.c
+++ b/commit.c
@@ -37,7 +37,7 @@ struct commit *lookup_commit_reference_gently(struct repository *r,
 
        if (!obj)
                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)
@@ -62,7 +62,7 @@ struct commit *lookup_commit(struct repository *r, const struct object_id *oid)
        struct object *obj = lookup_object(r, oid);
        if (!obj)
                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)
index 794c86650e9a976a0667cb8103a4ae0a9a0deaf2..32575186562507b2774c6abf097df7810e9cce5e 100644 (file)
--- a/object.c
+++ b/object.c
@@ -157,13 +157,13 @@ void *create_object(struct repository *r, const struct object_id *oid, void *o)
        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)
                return obj;
        else if (obj->type == OBJ_NONE) {
                if (type == OBJ_COMMIT)
-                       init_commit_node(r, (struct commit *) obj);
+                       init_commit_node((struct commit *) obj);
                else
                        obj->type = type;
                return obj;
index b22328b8383ef026df6ad05decb62c9af60ec6d5..532d7d7f28e28aa4b94beb7150dde7ab3c31d8c4 100644 (file)
--- a/object.h
+++ b/object.h
@@ -15,7 +15,6 @@ struct parsed_object_pool {
        struct alloc_state *commit_state;
        struct alloc_state *tag_state;
        struct alloc_state *object_state;
-       unsigned commit_count;
 
        /* parent substitutions from .git/info/grafts and .git/shallow */
        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 *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.
diff --git a/refs.c b/refs.c
index 224ff66c7bb0ef587cf2b34763586f53ad73bd84..1f551dd2794704854c7bfc5e0d96090cad2e87f6 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -339,7 +339,7 @@ enum peel_status peel_object(const struct object_id *name, struct object_id *oid
 
        if (o->type == OBJ_NONE) {
                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;
        }
 
index a0272178b7791d4146cd196d402e666809753da1..ccf837cb33c08d052f624e6ef23bb282c36fb848 100644 (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",
                            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)
                        die("failed to load commit for input %s resulting in oid %s\n",
diff --git a/tag.c b/tag.c
index 71b544467efacd12f36e8c61efdc387db11d1bff..1ed2684e45bd50d051ade60cc6b66c8c44fbed59 100644 (file)
--- a/tag.c
+++ b/tag.c
@@ -103,7 +103,7 @@ struct tag *lookup_tag(struct repository *r, const struct object_id *oid)
        struct object *obj = lookup_object(r, oid);
        if (!obj)
                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)
diff --git a/tree.c b/tree.c
index 1466bcc6a8cf093970dc3d39e5554a61112548fd..e76517f6b180e4703a032706f6d388d491df22a5 100644 (file)
--- a/tree.c
+++ b/tree.c
@@ -200,7 +200,7 @@ struct tree *lookup_tree(struct repository *r, const struct object_id *oid)
        struct object *obj = lookup_object(r, oid);
        if (!obj)
                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)