Re: [PATCH v3 04/17] chunk-format.h: extract oid_version()
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Mar 3, 2022, 16:30 UTC
- Message-ID
- <220303.86ilsv2dke.gmgdl@evledraar.gmail.com>
- In-Reply-To
- <135a07276b0a40b04f2c28d4f48c26b1af76c12c.1646266835.git.me@ttaylorr.com>
On Wed, Mar 02 2022, Taylor Blau wrote:
Show 12 quoted lines
> 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,