Re: [PATCH 1/7] hash: use git_hash_init() consistently
From: Junio C Hamano <hidden>
Date: 2026-07-07 14:39:27
Jeff King [off-list ref] writes:
We'd like to add more logic to git_hash_init(), but many callers skip it and call algop->init_fn() directly. Let's make sure we're consistently using the wrapper by adding a coccinelle rule. Besides the coccinelle file itself, this is a purely mechanical conversion based on the patch it generates. There should be no bare init_fn() calls left (except for the one in the wrapper). Signed-off-by: Jeff King <redacted> --- It feels like the "expression ALGO" in the rule should be a "git_hash_algo", but I had trouble getting coccinelle to recognize all cases when I did that. Probably not worth digging too far into, as the presence of the git_hash_ctx type means we should never hit any false positives.
Thanks. May conversions do look simple and straight-forward, but some look a bit curious.
quoted hunk ↗ jump to hunk
diff --git a/object-file.c b/object-file.c index e3c68cfb66..f292683c2d 100644 --- a/object-file.c +++ b/object-file.c... - algo->init_fn(c); - if (compat && compat_c) - compat->init_fn(compat_c); + git_hash_init(c, algo); + if (compat && compat_c) { + git_hash_init(compat_c, compat); + }
For example, it is a mystery how Coccinelle decided to add a pair of braces around this single statement. It should be obvious that the corresponding single statement in the original did not need one.
quoted hunk ↗ jump to hunk
diff --git a/rerere.c b/rerere.c index 8232542585..2e932439a4 100644 --- a/rerere.c +++ b/rerere.c@@ -438,8 +438,9 @@ static int handle_path(unsigned char *hash, struct rerere_io *io, int marker_siz struct git_hash_ctx ctx; struct strbuf buf = STRBUF_INIT, out = STRBUF_INIT; int has_conflicts = 0; - if (hash) - the_hash_algo->init_fn(&ctx); + if (hash) { + git_hash_init(&ctx, the_hash_algo); + }
Ditto.