]> git.ipfire.org Git - thirdparty/git.git/commitdiff
odb/source: introduce function to map source type to name
authorPatrick Steinhardt <ps@pks.im>
Fri, 24 Jul 2026 03:48:43 +0000 (05:48 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 24 Jul 2026 17:21:44 +0000 (10:21 -0700)
Introduce a new function that maps an object source's type to a
human-readable name. Use the function to provide better human-readable
error messages for the downcasting functions.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
odb/source-files.h
odb/source-inmemory.h
odb/source-loose.h
odb/source-packed.h
odb/source.c
odb/source.h

index d7ac3c1c81d892f2e8fb691714b6bd5e8010a7aa..6a803afdda3e867662cf4f07ea93bbcb3ae3db28 100644 (file)
@@ -28,7 +28,9 @@ struct odb_source_files *odb_source_files_new(struct object_database *odb,
 static inline struct odb_source_files *odb_source_files_downcast(struct odb_source *source)
 {
        if (source->type != ODB_SOURCE_FILES)
-               BUG("trying to downcast source of type '%d' to files", source->type);
+               BUG("trying to downcast source of type '%s' to '%s'",
+                   odb_source_type_to_name(source->type),
+                   odb_source_type_to_name(ODB_SOURCE_FILES));
        return container_of(source, struct odb_source_files, base);
 }
 
index a88fc2e320ed5cd907b9307ff176040b7ace8e7d..adbad23e8b26afe928f16d2f49263255226a2714 100644 (file)
@@ -26,7 +26,9 @@ struct odb_source_inmemory *odb_source_inmemory_new(struct object_database *odb)
 static inline struct odb_source_inmemory *odb_source_inmemory_downcast(struct odb_source *source)
 {
        if (source->type != ODB_SOURCE_INMEMORY)
-               BUG("trying to downcast source of type '%d' to in-memory", source->type);
+               BUG("trying to downcast source of type '%s' to '%s'",
+                   odb_source_type_to_name(source->type),
+                   odb_source_type_to_name(ODB_SOURCE_INMEMORY));
        return container_of(source, struct odb_source_inmemory, base);
 }
 
index 6070aaf3ce6ab2899fe52bff4ccf14d3fbafbf3e..3cf2e1f8f1d5e2a78109b154ddd18b9a287e068d 100644 (file)
@@ -41,7 +41,9 @@ struct odb_source_loose *odb_source_loose_new(struct object_database *odb,
 static inline struct odb_source_loose *odb_source_loose_downcast(struct odb_source *source)
 {
        if (source->type != ODB_SOURCE_LOOSE)
-               BUG("trying to downcast source of type '%d' to loose", source->type);
+               BUG("trying to downcast source of type '%s' to '%s'",
+                   odb_source_type_to_name(source->type),
+                   odb_source_type_to_name(ODB_SOURCE_LOOSE));
        return container_of(source, struct odb_source_loose, base);
 }
 
index 77309ddd0932b649b3bd259b86ce06649b79391b..a0f6b5096dcd0f91c1cc260a2a5d8ea1ef88dc27 100644 (file)
@@ -78,7 +78,9 @@ struct odb_source_packed *odb_source_packed_new(struct object_database *odb,
 static inline struct odb_source_packed *odb_source_packed_downcast(struct odb_source *source)
 {
        if (source->type != ODB_SOURCE_PACKED)
-               BUG("trying to downcast source of type '%d' to packed", source->type);
+               BUG("trying to downcast source of type '%s' to '%s'",
+                   odb_source_type_to_name(source->type),
+                   odb_source_type_to_name(ODB_SOURCE_PACKED));
        return container_of(source, struct odb_source_packed, base);
 }
 
index 7993dcbd659399f963798e0905de65b7a456132f..c300e836f674eeb801449dfa0670da881cf9db38 100644 (file)
@@ -4,6 +4,25 @@
 #include "odb/source.h"
 #include "packfile.h"
 
+static const char * const odb_source_names_by_type[] = {
+       [ODB_SOURCE_UNKNOWN] = "unknown",
+       [ODB_SOURCE_FILES] = "files",
+       [ODB_SOURCE_LOOSE] = "loose",
+       [ODB_SOURCE_PACKED] = "packed",
+       [ODB_SOURCE_INMEMORY] = "inmemory",
+};
+
+const char *odb_source_type_to_name(enum odb_source_type type)
+{
+       const char *name;
+       if (type < 0 || type >= ARRAY_SIZE(odb_source_names_by_type))
+               type = ODB_SOURCE_UNKNOWN;
+       name = odb_source_names_by_type[type];
+       if (!name)
+               BUG("name missing in `odb_source_names_by_type` for '%d'", type);
+       return name;
+}
+
 struct odb_source *odb_source_new(struct object_database *odb,
                                  const char *path,
                                  bool local)
index cd63dba91f4e2f394f388804e9f877f1493adca6..ab16d152f43082154dc47a8cb2013fb0a7397480 100644 (file)
@@ -25,6 +25,12 @@ enum odb_source_type {
        ODB_SOURCE_INMEMORY,
 };
 
+/*
+ * Convert between the enum and its name. Returns the equivalent of "unknown"
+ * for unknown types.
+ */
+const char *odb_source_type_to_name(enum odb_source_type type);
+
 struct object_id;
 struct odb_read_stream;
 struct strvec;