[PATCH 1/7] bulk-checkin: factor out `format_object_header_hash()`
- From
Taylor Blau <me@ttaylorr.com>
- Date
- Oct 6, 2023, 22:01 UTC
- Message-ID
- <37f407281596dd596e49c847c35fdf163977b479.1696629697.git.me@ttaylorr.com>
- In-Reply-To
- <cover.1696629697.git.me@ttaylorr.com>
Before deflating a blob into a pack, the bulk-checkin mechanism prepares the pack object header by calling `format_object_header()`, and writing into a scratch buffer, the contents of which eventually makes its way into the pack.
Future commits will add support for deflating multiple kinds of objects into a pack, and will likewise need to perform a similar operation as below.
This is a mostly straightforward extraction, with one notable exception. Instead of hard-coding `the_hash_algo`, pass it in to the new function as an argument. This isn't strictly necessary for our immediate purposes here, but will prove useful in the future if/when the bulk-checkin mechanism grows support for the hash transition plan.
Signed-off-by: Taylor Blau <me@ttaylorr.com> --- bulk-checkin.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/bulk-checkin.c b/bulk-checkin.c index 223562b4e7..0aac3dfe31 100644 --- a/bulk-checkin.c +++ b/bulk-checkin.c @@ -247,6 +247,19 @@ static void prepare_to_stream(struct bulk_checkin_packfile *state, die_errno("unable to write pack header"); } +static void format_object_header_hash(const struct git_hash_algo *algop, + git_hash_ctx *ctx, enum object_type type, + size_t size) +{ + unsigned char header[16384]; + unsigned header_len = format_object_header((char *)header, + sizeof(header), + type, size); + + algop->init_fn(ctx); + algop->update_fn(ctx, header, header_len); +} + static int deflate_blob_to_pack(struct bulk_checkin_packfile *state, struct object_id *result_oid, int fd, size_t size, @@ -254,8 +267,6 @@ static int deflate_blob_to_pack(struct bulk_checkin_packfile *state, { off_t seekback, already_hashed_to; git_hash_ctx ctx; - unsigned char obuf[16384]; - unsigned header_len; struct hashfile_checkpoint checkpoint = {0}; struct pack_idx_entry *idx = NULL; @@ -263,10 +274,7 @@ static int deflate_blob_to_pack(struct bulk_checkin_packfile *state, if (seekback == (off_t) -1) return error("cannot find the current offset"); - header_len = format_object_header((char *)obuf, sizeof(obuf), - OBJ_BLOB, size); - the_hash_algo->init_fn(&ctx); - the_hash_algo->update_fn(&ctx, obuf, header_len); + format_object_header_hash(the_hash_algo, &ctx, OBJ_BLOB, size); /* Note: idx is non-NULL when we are writing */ if ((flags & HASH_WRITE_OBJECT) != 0)
-- 2.42.0.8.g7a7e1e881e.dirty