Re: [PATCH v3 04/17] chunk-format.h: extract oid_version()
From: Ævar Arnfjörð Bjarmason <hidden>
Date: 2022-03-03 16:41:59
Subsystem:
the rest · Maintainer:
Linus Torvalds
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,