From: Patrick Steinhardt Date: Wed, 17 Jun 2026 06:39:49 +0000 (+0200) Subject: odb/source-packed: wire up `close()` callback X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=4f35c8b060085835150ab605207f6669e58a8d94;p=thirdparty%2Fgit.git odb/source-packed: wire up `close()` callback Wire up a new `close()` callback for the packed source and call it from the "files" source via the generic `odb_source_close()` interface. Signed-off-by: Patrick Steinhardt Signed-off-by: Junio C Hamano --- diff --git a/odb/source-files.c b/odb/source-files.c index 3608808e7c..9b0fa9ccdc 100644 --- a/odb/source-files.c +++ b/odb/source-files.c @@ -38,7 +38,7 @@ static void odb_source_files_close(struct odb_source *source) { struct odb_source_files *files = odb_source_files_downcast(source); odb_source_close(&files->loose->base); - packfile_store_close(files->packed); + odb_source_close(&files->packed->base); } static void odb_source_files_reprepare(struct odb_source *source) diff --git a/odb/source-packed.c b/odb/source-packed.c index f81a990cbd..74805be1dd 100644 --- a/odb/source-packed.c +++ b/odb/source-packed.c @@ -1,6 +1,7 @@ #include "git-compat-util.h" #include "abspath.h" #include "chdir-notify.h" +#include "midx.h" #include "odb/source-packed.h" #include "packfile.h" @@ -16,6 +17,20 @@ static void odb_source_packed_reparent(const char *name UNUSED, packed->base.path = path; } +static void odb_source_packed_close(struct odb_source *source) +{ + struct odb_source_packed *packed = odb_source_packed_downcast(source); + + for (struct packfile_list_entry *e = packed->packs.head; e; e = e->next) { + if (e->pack->do_not_close) + BUG("want to close pack marked 'do-not-close'"); + close_pack(e->pack); + } + if (packed->midx) + close_midx(packed->midx); + packed->midx = NULL; +} + static void odb_source_packed_free(struct odb_source *source) { struct odb_source_packed *packed = odb_source_packed_downcast(source); @@ -42,6 +57,7 @@ struct odb_source_packed *odb_source_packed_new(struct odb_source_files *parent) strmap_init(&packed->packs_by_path); packed->base.free = odb_source_packed_free; + packed->base.close = odb_source_packed_close; if (!is_absolute_path(parent->base.path)) chdir_notify_register(NULL, odb_source_packed_reparent, packed); diff --git a/packfile.c b/packfile.c index 6d492216de..e5386145a7 100644 --- a/packfile.c +++ b/packfile.c @@ -2749,18 +2749,6 @@ int parse_pack_header_option(const char *in, unsigned char *out, unsigned int *l return 0; } -void packfile_store_close(struct odb_source_packed *store) -{ - for (struct packfile_list_entry *e = store->packs.head; e; e = e->next) { - if (e->pack->do_not_close) - BUG("want to close pack marked 'do-not-close'"); - close_pack(e->pack); - } - if (store->midx) - close_midx(store->midx); - store->midx = NULL; -} - struct odb_packed_read_stream { struct odb_read_stream base; struct packed_git *pack; diff --git a/packfile.h b/packfile.h index e8bc9349f8..9dc3a13112 100644 --- a/packfile.h +++ b/packfile.h @@ -55,12 +55,6 @@ struct packed_git { char pack_name[FLEX_ARRAY]; /* more */ }; -/* - * Close all packfiles associated with this store. The packfiles won't be - * free'd, so they can be re-opened at a later point in time. - */ -void packfile_store_close(struct odb_source_packed *store); - /* * Prepare the packfile store by loading packfiles and multi-pack indices for * all alternates. This becomes a no-op if the store is already prepared.