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);
}
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);
}
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);
}
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);
}
#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)
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;