Thread (103 messages) flat view 103 messages, 6 authors, 2021-04-22
STALE1971d

Revision v2 of 2 in this series.

Revisions (2)
  1. v1 [diff vs current]
  2. v2 current

[PATCH v2 6/8] commit.c: don't use deref_tag() -> object_as_type()

From: Ævar Arnfjörð Bjarmason <hidden>
Date: 2021-04-20 13:37:16
Subsystem: the rest · Maintainer: Linus Torvalds

Change a use of the object_as_type() function introduced in
8ff226a9d5e (add object_as_type helper for casting objects,
2014-07-13) to instead assume that we're not dealing with OBJ_NONE (or
OBJ_BAD) from deref_tag().

This makes this code easier to read, as the reader isn't wondering why
the function would need to deal with that. We're simply doing a check
of OBJ_{COMMIT,TREE,BLOB,TAG} here, not the bare-bones initialization
object_as_type() might be called on to do.

Even though we can read deref_tag() and see that it won't return
OBJ_NONE and friends, let's add a BUG() assertion here to help future
maintenance.

Signed-off-by: Ævar Arnfjörð Bjarmason <redacted>
---
 commit.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/commit.c b/commit.c
index 3d7f1fba0c..c3bc6cbec4 100644
--- a/commit.c
+++ b/commit.c
@@ -31,13 +31,22 @@ const char *commit_type = "commit";
 struct commit *lookup_commit_reference_gently(struct repository *r,
 		const struct object_id *oid, int quiet)
 {
-	struct object *obj = deref_tag(r,
-				       parse_object(r, oid),
-				       NULL, 0);
+	struct object *tmp = parse_object(r, oid);
+	struct object *obj = deref_tag(r, tmp, NULL, 0);
 
 	if (!obj)
 		return NULL;
-	return object_as_type(obj, OBJ_COMMIT, quiet);
+
+	if (obj->type <= 0)
+		BUG("should have initialized obj->type = OBJ_{COMMIT,TREE,BLOB,TAG} from deref_tag()");
+	if (obj->type != OBJ_COMMIT) {
+		if (!quiet) {
+			enum object_type have = obj->type;
+			oid_is_type_or_error(oid, OBJ_COMMIT, &have);
+		}
+		return NULL;
+	}
+	return (struct commit *)obj;
 }
 
 struct commit *lookup_commit_reference(struct repository *r, const struct object_id *oid)
-- 
2.31.1.723.ga5d7868e4a
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help