On Wed, Mar 02 2022, Taylor Blau wrote: > Consolidate these into a single definition in chunk-format.h. It's not > clear that this is the best header to define this function in, but it > should do for now. > [...] > + > +uint8_t oid_version(const struct git_hash_algo *algop) > +{ > + switch (hash_algo_by_ptr(algop)) { > + case GIT_HASH_SHA1: > + return 1; > + case GIT_HASH_SHA256: > + return 2; Not a new issue, but I wonder why these don't return hash_algo_by_ptr aka GIT_HASH_WHATEVER here. I.e. this is the same as this more straightforward & obvious code that avoids re-hardcoding the magic constants: const int algo = hash_algo_by_ptr(algop) switch (algo) { case GIT_HASH_SHA1: case GIT_HASH_SHA256: return algo; default: [...] } Probably best left as a later cleanup. FWIW I came up with this on top of my designated init series: diff --git a/hash.h b/hash.h index 5d40368f18a..fd710ec6ae8 100644 --- a/hash.h +++ b/hash.h @@ -86,14 +86,18 @@ static inline void git_SHA256_Clone(git_SHA256_CTX *dst, const git_SHA256_CTX *s * field for being non-zero. Use the name field for user-visible situations and * the format_id field for fixed-length fields on disk. */ -/* An unknown hash function. */ -#define GIT_HASH_UNKNOWN 0 -/* SHA-1 */ -#define GIT_HASH_SHA1 1 -/* SHA-256 */ -#define GIT_HASH_SHA256 2 -/* Number of algorithms supported (including unknown). */ -#define GIT_HASH_NALGOS (GIT_HASH_SHA256 + 1) +enum git_hash_algo_name { + /* An unknown hash function. */ + GIT_HASH_UNKNOWN, + /* SHA-1 */ + GIT_HASH_SHA1, + GIT_HASH_SHA256, + /* + * Number of algorithms supported (including unknown). This + * must be kept last! + */ + GIT_HASH_NALGOS, +}; /* "sha1", big-endian */ #define GIT_SHA1_FORMAT_ID 0x73686131 diff --git a/object-file.c b/object-file.c index 5074471b471..f2d54a86969 100644 --- a/object-file.c +++ b/object-file.c @@ -166,7 +166,7 @@ static void git_hash_unknown_final_oid(struct object_id *oid, git_hash_ctx *ctx) } const struct git_hash_algo hash_algos[GIT_HASH_NALGOS] = { - { + [GIT_HASH_UNKNOWN] = { .name = NULL, .format_id = 0x00000000, .rawsz = 0, @@ -181,7 +181,7 @@ const struct git_hash_algo hash_algos[GIT_HASH_NALGOS] = { .empty_blob = NULL, .null_oid = NULL, }, - { + [GIT_HASH_SHA1] = { .name = "sha1", .format_id = GIT_SHA1_FORMAT_ID, .rawsz = GIT_SHA1_RAWSZ, @@ -196,7 +196,7 @@ const struct git_hash_algo hash_algos[GIT_HASH_NALGOS] = { .empty_blob = &empty_blob_oid, .null_oid = &null_oid_sha1, }, - { + [GIT_HASH_SHA256] = { .name = "sha256", .format_id = GIT_SHA256_FORMAT_ID, .rawsz = GIT_SHA256_RAWSZ,