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

[RFC PATCH resend] builtin/repack: Honor --keep-pack and .keep when repacking promisor objects

From
TTTomáš Trnka <trnka@scm.com>
Date
Jan 29, 2025, 10:02 UTC
Message-ID
<2728513.vuYhMxLoTh@mintaka.ncbr.muni.cz>

git-repack currently does not pass --keep-pack or --honor-pack-keep to the git-pack-objects handling promisor packs. This means that settings like gc.bigPackThreshold are completely ignored for promisor packs.

The simple fix is to just copy the keep-pack logic into repack_promisor_objects(), although this could possibly be improved by making prepare_pack_objects() handle it instead.

Signed-off-by: Tomáš Trnka <trnka@scm.com>
---
RFC: This probably needs a test, but where and how should it be
implemented? Perhaps in t7700-repack.sh, copying one of the tests using
prepare_for_keep_packs and just touching .promisor files? Or instead in
t/t0410-partial-clone.sh using a copy/variant of one of the basic 
repack tests there?
 builtin/repack.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/builtin/repack.c b/builtin/repack.c
index d6bb37e84a..fe62fe03eb 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -388,15 +388,23 @@ static int has_pack_ext(const struct generated_pack_data 
*data,
 }
 
 static void repack_promisor_objects(const struct pack_objects_args *args,
-				    struct string_list *names)
+				    struct string_list *names,
+				    struct string_list 
*keep_pack_list)
 {
 	struct child_process cmd = CHILD_PROCESS_INIT;
 	FILE *out;
 	struct strbuf line = STRBUF_INIT;
+	int i;
 
 	prepare_pack_objects(&cmd, args, packtmp);
 	cmd.in = -1;
 
+	if (!pack_kept_objects)
+		strvec_push(&cmd.args, "--honor-pack-keep");
+	for (i = 0; i < keep_pack_list->nr; i++)
+		strvec_pushf(&cmd.args, "--keep-pack=%s",
+			     keep_pack_list->items[i].string);
+
 	/*
 	 * NEEDSWORK: Giving pack-objects only the OIDs without any 
ordering
 	 * hints may result in suboptimal deltas in the resulting pack. See 
if
@@ -1350,7 +1358,7 @@ int cmd_repack(int argc,
 		strvec_push(&cmd.args, "--delta-islands");
 
 	if (pack_everything & ALL_INTO_ONE) {
-		repack_promisor_objects(&po_args, &names);
+		repack_promisor_objects(&po_args, &names, 
&keep_pack_list);
 
 		if (has_existing_non_kept_packs(&existing) &&
 		    delete_redundant &&

base-commit: 92999a42db1c5f43f330e4f2bca4026b5b81576f
-- 
2.47.1
Next: brian m. carlson
Message 1 of 6 in “builtin/repack: Honor --keep-pack and .keep when repacking promisor objects”
  1. builtin/repack: Honor --keep-pack and .keep when repacking promisor objectsTomáš Trnka, Jan 29, 2025
  2. brian m. carlsonJan 30, 2025
  3. Tomáš TrnkaJan 30, 2025
  4. Han YoungFeb 10, 2025
  5. Tomáš TrnkaFeb 10, 2025
  6. Han YoungFeb 19, 2025

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.