]> git.ipfire.org Git - thirdparty/git.git/commitdiff
object-file API: pass an enum to read_object_with_reference()
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Fri, 4 Feb 2022 23:48:34 +0000 (00:48 +0100)
committerJunio C Hamano <gitster@pobox.com>
Sat, 26 Feb 2022 01:16:32 +0000 (17:16 -0800)
Change the read_object_with_reference() function to take an "enum
object_type". It was not prepared to handle an arbitrary "const
char *type", as it was itself calling type_from_string().

Let's change the only caller that passes in user data to use
type_from_string(), and convert the rest to use e.g. "OBJ_TREE"
instead of "tree_type".

The "cat-file" caller is not on the codepath that
handles"--allow-unknown", so the type_from_string() there is safe. Its
use of type_from_string() doesn't functionally differ from that of the
pre-image.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/cat-file.c
builtin/fast-import.c
builtin/grep.c
builtin/pack-objects.c
cache.h
object-file.c
tree-walk.c

index d94050e6c188ff4594a065da87695c67c560ac94..3c5bc505e0ac337a806fc1a1b76c6a3ae87bbd11 100644 (file)
@@ -154,7 +154,10 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
                break;
 
        case 0:
-               if (type_from_string(exp_type) == OBJ_BLOB) {
+       {
+               enum object_type exp_type_id = type_from_string(exp_type);
+
+               if (exp_type_id == OBJ_BLOB) {
                        struct object_id blob_oid;
                        if (oid_object_info(the_repository, &oid, NULL) == OBJ_TAG) {
                                char *buffer = read_object_file(&oid, &type,
@@ -176,10 +179,10 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
                         * fall-back to the usual case.
                         */
                }
-               buf = read_object_with_reference(the_repository,
-                                                &oid, exp_type, &size, NULL);
+               buf = read_object_with_reference(the_repository, &oid,
+                                                exp_type_id, &size, NULL);
                break;
-
+       }
        default:
                die("git cat-file: unknown option: %s", exp_type);
        }
index 123df7d9a537edb952c9d847076d1fcca4c058b8..c52e807f56e6cb18246ad9b333a34cd18b814695 100644 (file)
@@ -2483,7 +2483,7 @@ static void note_change_n(const char *p, struct branch *b, unsigned char *old_fa
                unsigned long size;
                char *buf = read_object_with_reference(the_repository,
                                                       &commit_oid,
-                                                      commit_type, &size,
+                                                      OBJ_COMMIT, &size,
                                                       &commit_oid);
                if (!buf || size < the_hash_algo->hexsz + 6)
                        die("Not a valid commit: %s", p);
@@ -2555,7 +2555,7 @@ static void parse_from_existing(struct branch *b)
                char *buf;
 
                buf = read_object_with_reference(the_repository,
-                                                &b->oid, commit_type, &size,
+                                                &b->oid, OBJ_COMMIT, &size,
                                                 &b->oid);
                parse_from_commit(b, buf, size);
                free(buf);
@@ -2651,7 +2651,7 @@ static struct hash_list *parse_merge(unsigned int *count)
                        unsigned long size;
                        char *buf = read_object_with_reference(the_repository,
                                                               &n->oid,
-                                                              commit_type,
+                                                              OBJ_COMMIT,
                                                               &size, &n->oid);
                        if (!buf || size < the_hash_algo->hexsz + 6)
                                die("Not a valid commit: %s", from);
index 9e34a820ad4d837937a0ecb2bc712de972506b50..75e07b5623a71a02a57640d47a20621562fcabf7 100644 (file)
@@ -482,7 +482,7 @@ static int grep_submodule(struct grep_opt *opt,
                object_type = oid_object_info(subrepo, oid, NULL);
                obj_read_unlock();
                data = read_object_with_reference(subrepo,
-                                                 oid, tree_type,
+                                                 oid, OBJ_TREE,
                                                  &size, NULL);
                if (!data)
                        die(_("unable to read tree (%s)"), oid_to_hex(oid));
@@ -651,7 +651,7 @@ static int grep_object(struct grep_opt *opt, const struct pathspec *pathspec,
                int hit, len;
 
                data = read_object_with_reference(opt->repo,
-                                                 &obj->oid, tree_type,
+                                                 &obj->oid, OBJ_TREE,
                                                  &size, NULL);
                if (!data)
                        die(_("unable to read tree (%s)"), oid_to_hex(&obj->oid));
index ba2006f2212bea19b202ba3db155b345bf7fbb89..c4df3df3141f4900da12e862a71b75e6839ec1ac 100644 (file)
@@ -1802,7 +1802,7 @@ static void add_preferred_base(struct object_id *oid)
                return;
 
        data = read_object_with_reference(the_repository, oid,
-                                         tree_type, &size, &tree_oid);
+                                         OBJ_TREE, &size, &tree_oid);
        if (!data)
                return;
 
diff --git a/cache.h b/cache.h
index 2027803c49ab3877efabf91a2c163fd5c62f92e0..0e7fc8b7c2faa8e0c23494dd830444fa89d1b78a 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -1561,7 +1561,7 @@ int cache_name_stage_compare(const char *name1, int len1, int stage1, const char
 
 void *read_object_with_reference(struct repository *r,
                                 const struct object_id *oid,
-                                const char *required_type,
+                                enum object_type required_type,
                                 unsigned long *size,
                                 struct object_id *oid_ret);
 
index c75c12dd0ba4d1cf404932a5288fc2957765b58a..6cbdb836cb78bbe7a304093b8ee9d555967a69ba 100644 (file)
@@ -1737,16 +1737,15 @@ void *read_object_file_extended(struct repository *r,
 
 void *read_object_with_reference(struct repository *r,
                                 const struct object_id *oid,
-                                const char *required_type_name,
+                                enum object_type required_type,
                                 unsigned long *size,
                                 struct object_id *actual_oid_return)
 {
-       enum object_type type, required_type;
+       enum object_type type;
        void *buffer;
        unsigned long isize;
        struct object_id actual_oid;
 
-       required_type = type_from_string(required_type_name);
        oidcpy(&actual_oid, oid);
        while (1) {
                int ref_length = -1;
index 3a94959d64a3a63b784bcadfd47cd12213f3fb2d..506234b4b8138894d6516fc80e9fc42753f78f00 100644 (file)
@@ -89,7 +89,7 @@ void *fill_tree_descriptor(struct repository *r,
        void *buf = NULL;
 
        if (oid) {
-               buf = read_object_with_reference(r, oid, tree_type, &size, NULL);
+               buf = read_object_with_reference(r, oid, OBJ_TREE, &size, NULL);
                if (!buf)
                        die("unable to read tree %s", oid_to_hex(oid));
        }
@@ -605,7 +605,7 @@ int get_tree_entry(struct repository *r,
        unsigned long size;
        struct object_id root;
 
-       tree = read_object_with_reference(r, tree_oid, tree_type, &size, &root);
+       tree = read_object_with_reference(r, tree_oid, OBJ_TREE, &size, &root);
        if (!tree)
                return -1;
 
@@ -677,7 +677,7 @@ enum get_oid_result get_tree_entry_follow_symlinks(struct repository *r,
                        unsigned long size;
                        tree = read_object_with_reference(r,
                                                          &current_tree_oid,
-                                                         tree_type, &size,
+                                                         OBJ_TREE, &size,
                                                          &root);
                        if (!tree)
                                goto done;