[PATCH v2 09/10] csum-file: drop `hashfd_throughput()`
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Mar 3, 2026, 15:00 UTC
- Message-ID
- <20260303-pks-upload-pack-write-contention-v2-9-7321830f08fe@pks.im>
- In-Reply-To
- <20260303-pks-upload-pack-write-contention-v2-0-7321830f08fe@pks.im>
The `hashfd_throughput()` function is used by a single callsite in git-pack-objects(1). In contrast to `hashfd()`, this function uses a progress meter to measure throughput and a smaller buffer length so that the progress meter can provide more granular metrics.
We're going to change that caller in the next commit to be a bit more specific to packing objects. As such, `hashfd_throughput()` will be a somewhat unfitting mechanism for any potential new callers.
Drop the function and replace it with a call to `hashfd_ext()`.
Signed-off-by: Patrick Steinhardt <ps@pks.im> --- builtin/pack-objects.c | 19 +++++++++++++++---- csum-file.c | 16 ---------------- csum-file.h | 2 -- 3 files changed, 15 insertions(+), 22 deletions(-)
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index cfb03d4c09..db04e6dd0e 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -1330,11 +1330,22 @@ static void write_pack_file(void) unsigned char hash[GIT_MAX_RAWSZ]; char *pack_tmp_name = NULL; - if (pack_to_stdout) - f = hashfd_throughput(the_repository->hash_algo, 1, - "<stdout>", progress_state); - else + if (pack_to_stdout) { + /* + * Since we are expecting to report progress of the + * write into this hashfile, use a smaller buffer + * size so the progress indicators arrive at a more + * frequent rate. + */ + struct hashfd_options opts = { + .progress = progress_state, + .buffer_len = 8 * 1024, + }; + f = hashfd_ext(the_repository->hash_algo, 1, + "<stdout>", &opts); + } else { f = create_tmp_packfile(the_repository, &pack_tmp_name); + } offset = write_pack_header(f, nr_remaining); diff --git a/csum-file.c b/csum-file.c index a50416247e..5dfaca5543 100644 --- a/csum-file.c +++ b/csum-file.c @@ -197,22 +197,6 @@ struct hashfile *hashfd(const struct git_hash_algo *algop, return hashfd_ext(algop, fd, name, &opts); } -struct hashfile *hashfd_throughput(const struct git_hash_algo *algop, - int fd, const char *name, struct progress *tp) -{ - /* - * Since we are expecting to report progress of the - * write into this hashfile, use a smaller buffer - * size so the progress indicators arrive at a more - * frequent rate. - */ - struct hashfd_options opts = { - .progress = tp, - .buffer_len = 8 * 1024, - }; - return hashfd_ext(algop, fd, name, &opts); -} - void hashfile_checkpoint_init(struct hashfile *f, struct hashfile_checkpoint *checkpoint) { diff --git a/csum-file.h b/csum-file.h index a03b60120d..01472555c8 100644 --- a/csum-file.h +++ b/csum-file.h @@ -63,8 +63,6 @@ struct hashfile *hashfd(const struct git_hash_algo *algop, int fd, const char *name); struct hashfile *hashfd_check(const struct git_hash_algo *algop, const char *name); -struct hashfile *hashfd_throughput(const struct git_hash_algo *algop, - int fd, const char *name, struct progress *tp); /* * Free the hashfile without flushing its contents to disk. This only
-- 2.53.0.697.g625c4fb2da.dirty