[PATCH v2 06/49] builtin/repack.c: avoid "the_hash_algo" when deleting packs

Taylor Blau
2025-10-15T22:27:35Z

The "mark_packs_for_deletion_1" function uses "the_hash_algo->hexsz" to
isolate a pack's checksum before deleting it to avoid deleting a newly
written pack having the same checksum (that is, some generated pack
wound up identical to an existing pack).

Avoid this by passing down a "struct git_hash_algo" pointer, and refer to
the hash algorithm through it instead.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
builtin/repack.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/builtin/repack.c b/builtin/repack.c
index 4f08b57ddb..094f5a0cc2 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -168,11 +168,12 @@ static int pack_is_retained(struct string_list_item *item)
return (uintptr_t)item->util & RETAIN_PACK;
}

-static void mark_packs_for_deletion_1(struct string_list *names,
+static void mark_packs_for_deletion_1(const struct git_hash_algo *algop,
+ struct string_list *names,
struct string_list *list)
{
struct string_list_item *item;
- const int hexsz = the_hash_algo->hexsz;
+ const int hexsz = algop->hexsz;

for_each_string_list_item(item, list) {
char *sha1;
@@ -217,8 +218,9 @@ static void mark_packs_for_deletion(struct existing_packs *existing,
struct string_list *names)

{
- mark_packs_for_deletion_1(names, &existing->non_kept_packs);
- mark_packs_for_deletion_1(names, &existing->cruft_packs);
+ const struct git_hash_algo *algop = existing->repo->hash_algo;
+ mark_packs_for_deletion_1(algop, names, &existing->non_kept_packs);
+ mark_packs_for_deletion_1(algop, names, &existing->cruft_packs);
}

static void remove_redundant_pack(struct repository *repo,
--
2.51.0.540.ga7423965ad8