git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2] midx: use buffered I/O to talk to pack-objects

From
René Scharfe <l.s.r@web.de>
Date
Aug 12, 2020, 16:52 UTC
Message-ID
<9162c1cb-36fd-3203-ec58-4bd1501938d0@web.de>
In-Reply-To
<c5920e08-b7dd-e870-f99e-225d0aafc663@web.de>

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>
---
Change since v1:
- Removed error handling to match the original code.
 midx.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/midx.c b/midx.c
index a5fb797edee..0f95c3d8526 100644
--- a/midx.c
+++ b/midx.c
@@ -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"));
--
2.28.0
Previous: Derrick StoleeNext: Junio C Hamano
Message 10 of 14 in “midx: use buffered I/O to talk to pack-objects”
  1. midx: use buffered I/O to talk to pack-objectsRené Scharfe, Aug 2, 2020
  2. Chris TorekAug 2, 2020
  3. Johannes SixtAug 3, 2020
  4. René ScharfeAug 3, 2020
  5. René ScharfeAug 4, 2020
  6. Junio C HamanoAug 4, 2020
  7. Derrick StoleeAug 3, 2020
  8. René ScharfeAug 11, 2020
  9. Derrick StoleeAug 11, 2020
  10. midx: use buffered I/O to talk to pack-objectsRené Scharfe, Aug 12, 2020
  11. Junio C HamanoAug 12, 2020
  12. Junio C HamanoAug 12, 2020
  13. Jeff KingAug 13, 2020
  14. Jeff KingAug 13, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.