odb/source: introduce function to map source type to name
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>seen
parent
cc0a909026
commit
bdf92ad403
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
19
odb/source.c
19
odb/source.c
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue