diff options
author | René Scharfe <l.s.r@web.de> | 2020-08-12 16:52:54 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-08-17 17:29:39 (GMT) |
commit | 6af3b00abc3d2af69e6bdf4f8c0843d7e3bf9c88 (patch) | |
tree | 4be310540b2b0726a2e680d6be67e5d3dfbe106c /midx.c | |
parent | 24b75faf0da7a025a192ab4c65cb1f1d6dc6b7f6 (diff) | |
download | git-6af3b00abc3d2af69e6bdf4f8c0843d7e3bf9c88.zip git-6af3b00abc3d2af69e6bdf4f8c0843d7e3bf9c88.tar.gz git-6af3b00abc3d2af69e6bdf4f8c0843d7e3bf9c88.tar.bz2 |
midx: use buffered I/O to talk to pack-objects
Like f0bca72dc77 (send-pack: use buffered I/O to talk to pack-objects,
2016-06-08), significantly reduce the number of system calls and
simplify the code for sending object IDs to pack-objects by using
stdio's buffering.
Helped-by: Chris Torek <chris.torek@gmail.com>
Helped-by: Johannes Sixt <j6t@kdbg.org>
Encouraged-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'midx.c')
-rw-r--r-- | midx.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -1383,6 +1383,7 @@ int midx_repack(struct repository *r, const char *object_dir, size_t batch_size, uint32_t i; unsigned char *include_pack; struct child_process cmd = CHILD_PROCESS_INIT; + FILE *cmd_in; struct strbuf base_name = STRBUF_INIT; struct multi_pack_index *m = load_multi_pack_index(object_dir, 1); @@ -1435,6 +1436,8 @@ int midx_repack(struct repository *r, const char *object_dir, size_t batch_size, goto cleanup; } + cmd_in = xfdopen(cmd.in, "w"); + for (i = 0; i < m->num_objects; i++) { struct object_id oid; uint32_t pack_int_id = nth_midxed_pack_int_id(m, i); @@ -1443,10 +1446,9 @@ int midx_repack(struct repository *r, const char *object_dir, size_t batch_size, continue; nth_midxed_object_oid(&oid, m, i); - xwrite(cmd.in, oid_to_hex(&oid), the_hash_algo->hexsz); - xwrite(cmd.in, "\n", 1); + fprintf(cmd_in, "%s\n", oid_to_hex(&oid)); } - close(cmd.in); + fclose(cmd_in); if (finish_command(&cmd)) { error(_("could not finish pack-objects")); |