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

[PATCH 46/49] repack: move `pack_kept_objects` to `struct pack_objects_args`

From
Taylor Blau <me@ttaylorr.com>
Date
Sep 28, 2025, 22:10 UTC
Message-ID
<2d9a879bb027ef8dbd7b4ff7eccd2d038bbfb84c.1759097191.git.me@ttaylorr.com>
In-Reply-To
<cover.1759097191.git.me@ttaylorr.com>

The "pack_kept_objects" variable is defined as static to the repack builtin, but is inherently related to the pack-objects arguments that the builtin uses when generating new packs.

Move that field into the "struct pack_objects_args", and shuffle around where we append the corresponding command-line option when preparing a pack-objects process. Specifically:

 - `write_cruft_pack()` always wants to pass "--honor-pack-keep", so
   explicitly set the `pack_kept_objects` field to "0" when initializing
   the `write_pack_opts` struct before calling `write_cruft_pack()`.
 - `write_filtered_pack()` no longer needs to handle writing the
   command-line option "--honor-pack-keep" when preparing a pack-objects
   process, since its call to `prepare_pack_objects()` will have already
   taken care of that.
   `write_filtered_pack()` also reads the `pack_kept_objects` field to
   determine whether to write the existing kept packs with a leading "^"
   character, so update that to read through the `po_args` pointer
   instead.
 - `cmd_repack()` also no longer has to write the "--honor-pack-keep"
   flag explicitly, since this is also handled via its call to
   `prepare_pack_objects()`.

Since there is a default value for "pack_kept_objects" that relies on whether or not we are writing a bitmap (and not writing a MIDX), extract a default initializer for `struct pack_objects_args` that keeps this conditional default behavior.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
 builtin/repack.c  | 20 +++++++-------------
 repack-geometry.c |  5 ++---
 repack.c          |  2 ++
 repack.h          |  9 ++++++---
 4 files changed, 17 insertions(+), 19 deletions(-)
diff --git a/builtin/repack.c b/builtin/repack.c
index 836a006607..9d89217b77 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -33,7 +33,6 @@
 #define RETAIN_PACK 2
 
 static int pack_everything;
-static int pack_kept_objects = -1;
 static int write_bitmaps = -1;
 static int use_delta_islands;
 static int run_update_server_info = 1;
@@ -68,7 +67,7 @@ static int repack_config(const char *var, const char *value,
 		return 0;
 	}
 	if (!strcmp(var, "repack.packkeptobjects")) {
-		pack_kept_objects = git_config_bool(var, value);
+		po_args->pack_kept_objects = git_config_bool(var, value);
 		return 0;
 	}
 	if (!strcmp(var, "repack.writebitmaps") ||
@@ -122,8 +121,6 @@ static int write_filtered_pack(struct write_pack_opts *opts,
 
 	strvec_push(&cmd.args, "--stdin-packs");
 
-	if (!pack_kept_objects)
-		strvec_push(&cmd.args, "--honor-pack-keep");
 	for_each_string_list_item(item, &existing->kept_packs)
 		strvec_pushf(&cmd.args, "--keep-pack=%s", item->string);
 
@@ -146,7 +143,7 @@ static int write_filtered_pack(struct write_pack_opts *opts,
 		fprintf(in, "%s.pack\n", item->string);
 	for_each_string_list_item(item, &existing->cruft_packs)
 		fprintf(in, "%s.pack\n", item->string);
-	caret = pack_kept_objects ? "" : "^";
+	caret = opts->po_args->pack_kept_objects ? "" : "^";
 	for_each_string_list_item(item, &existing->kept_packs)
 		fprintf(in, "%s%s.pack\n", caret, item->string);
 	fclose(in);
@@ -208,7 +205,6 @@ static int write_cruft_pack(struct write_pack_opts *opts,
 		strvec_pushf(&cmd.args, "--cruft-expiration=%s",
 			     cruft_expiration);
 
-	strvec_push(&cmd.args, "--honor-pack-keep");
 	strvec_push(&cmd.args, "--non-empty");
 
 	cmd.in = -1;
@@ -333,7 +329,7 @@ int cmd_repack(int argc,
 		OPT_UNSIGNED(0, "max-pack-size", &po_args.max_pack_size,
 			     N_("maximum size of each packfile")),
 		OPT_PARSE_LIST_OBJECTS_FILTER(&po_args.filter_options),
-		OPT_BOOL(0, "pack-kept-objects", &pack_kept_objects,
+		OPT_BOOL(0, "pack-kept-objects", &po_args.pack_kept_objects,
 				N_("repack objects in packs marked with .keep")),
 		OPT_STRING_LIST(0, "keep-pack", &keep_pack_list, N_("name"),
 				N_("do not repack this pack")),
@@ -379,8 +375,8 @@ int cmd_repack(int argc,
 		    (!(pack_everything & ALL_INTO_ONE) || !is_bare_repository()))
 			write_bitmaps = 0;
 	}
-	if (pack_kept_objects < 0)
-		pack_kept_objects = write_bitmaps > 0 && !write_midx;
+	if (po_args.pack_kept_objects < 0)
+		po_args.pack_kept_objects = write_bitmaps > 0 && !write_midx;
 
 	if (write_bitmaps && !(pack_everything & ALL_INTO_ONE) && !write_midx)
 		die(_(incremental_bitmap_conflict_error));
@@ -421,8 +417,7 @@ int cmd_repack(int argc,
 	if (geometry.split_factor) {
 		if (pack_everything)
 			die(_("options '%s' and '%s' cannot be used together"), "--geometric", "-A/-a");
-		pack_geometry_init(&geometry, &existing, &po_args,
-				   pack_kept_objects);
+		pack_geometry_init(&geometry, &existing, &po_args);
 		pack_geometry_split(&geometry);
 	}
 
@@ -431,8 +426,6 @@ int cmd_repack(int argc,
 	show_progress = !po_args.quiet && isatty(2);
 
 	strvec_push(&cmd.args, "--keep-true-parents");
-	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);
@@ -577,6 +570,7 @@ int cmd_repack(int argc,
 		cruft_po_args.local = po_args.local;
 		cruft_po_args.quiet = po_args.quiet;
 		cruft_po_args.delta_base_offset = po_args.delta_base_offset;
+		cruft_po_args.pack_kept_objects = 0;
 
 		ret = write_cruft_pack(&opts, cruft_expiration,
 				       combine_cruft_below_size, &names,
diff --git a/repack-geometry.c b/repack-geometry.c
index a879f2fe49..fd4a89a115 100644
--- a/repack-geometry.c
+++ b/repack-geometry.c
@@ -26,8 +26,7 @@ static int pack_geometry_cmp(const void *va, const void *vb)
 
 void pack_geometry_init(struct pack_geometry *geometry,
 			struct existing_packs *existing,
-			const struct pack_objects_args *args,
-			int pack_kept_objects)
+			const struct pack_objects_args *args)
 {
 	struct packfile_store *packs = existing->repo->objects->packfiles;
 	struct packed_git *p;
@@ -42,7 +41,7 @@ void pack_geometry_init(struct pack_geometry *geometry,
 			 */
 			continue;
 
-		if (!pack_kept_objects) {
+		if (!args->pack_kept_objects) {
 			/*
 			 * Any pack that has its pack_keep bit set will
 			 * appear in existing->kept_packs below, but
diff --git a/repack.c b/repack.c
index 8a0e4789fa..1982a48165 100644
--- a/repack.c
+++ b/repack.c
@@ -38,6 +38,8 @@ void prepare_pack_objects(struct child_process *cmd,
 		strvec_push(&cmd->args,  "--quiet");
 	if (args->delta_base_offset)
 		strvec_push(&cmd->args,  "--delta-base-offset");
+	if (!args->pack_kept_objects)
+		strvec_push(&cmd->args,  "--honor-pack-keep");
 	strvec_push(&cmd->args, out);
 	cmd->git_cmd = 1;
 	cmd->out = -1;
diff --git a/repack.h b/repack.h
index 9351293233..4a1c4eb606 100644
--- a/repack.h
+++ b/repack.h
@@ -17,10 +17,14 @@ struct pack_objects_args {
 	int name_hash_version;
 	int path_walk;
 	int delta_base_offset;
+	int pack_kept_objects;
 	struct list_objects_filter_options filter_options;
 };
 
-#define PACK_OBJECTS_ARGS_INIT { .delta_base_offset = 1 }
+#define PACK_OBJECTS_ARGS_INIT { \
+	.delta_base_offset = 1, \
+	.pack_kept_objects = -1, \
+}
 
 struct child_process;
 
@@ -104,8 +108,7 @@ struct pack_geometry {
 
 void pack_geometry_init(struct pack_geometry *geometry,
 			struct existing_packs *existing,
-			const struct pack_objects_args *args,
-			int pack_kept_objects);
+			const struct pack_objects_args *args);
 void pack_geometry_split(struct pack_geometry *geometry);
 struct packed_git *pack_geometry_preferred_pack(struct pack_geometry *geometry);
 void pack_geometry_remove_redundant(struct pack_geometry *geometry,
-- 
2.51.0.243.g16eca91f2c0
Previous: Taylor BlauNext: Taylor Blau
Message 101 of 163 in “repack: prepare for incremental MIDX-based repacking”
  1. 00/49 repack: prepare for incremental MIDX-based repackingTaylor Blau, Sep 28, 2025
  2. 01/49 builtin/repack.c: avoid "the_repository" in `cmd_repack()`Taylor Blau, Sep 28, 2025
  3. 02/49 builtin/repack.c: avoid "the_repository" in existing packs APITaylor Blau, Sep 28, 2025
  4. Jeff KingOct 10, 2025
  5. Taylor BlauOct 10, 2025
  6. 03/49 builtin/repack.c: avoid "the_repository" when taking a ref snapshotTaylor Blau, Sep 28, 2025
  7. 04/49 builtin/repack.c: avoid "the_repository" when removing packsTaylor Blau, Sep 28, 2025
  8. Jeff KingOct 10, 2025
  9. Taylor BlauOct 10, 2025
  10. 05/49 builtin/repack.c: avoid "the_repository" when repacking promisor objectsTaylor Blau, Sep 28, 2025
  11. 06/49 builtin/repack.c: avoid "the_hash_algo" when deleting packsTaylor Blau, Sep 28, 2025
  12. 07/49 builtin/repack.c: avoid "the_hash_algo" in `write_oid()`Taylor Blau, Sep 28, 2025
  13. Patrick SteinhardtSep 29, 2025
  14. Taylor BlauOct 7, 2025
  15. 08/49 builtin/repack: avoid "the_hash_algo" in `repack_promisor_objects()`Taylor Blau, Sep 28, 2025
  16. 09/49 builtin/repack.c: avoid "the_hash_algo" in `finish_pack_objects_cmd()`Taylor Blau, Sep 28, 2025
  17. Jeff KingOct 10, 2025
  18. Taylor BlauOct 10, 2025
  19. 10/49 builtin/repack.c: avoid using `hash_to_hex()` in pack geometryTaylor Blau, Sep 28, 2025
  20. Patrick SteinhardtSep 29, 2025
  21. 11/49 repack: introduce new compilation unitTaylor Blau, Sep 28, 2025
  22. Jeff KingOct 10, 2025
  23. Taylor BlauOct 10, 2025
  24. 12/49 builtin/repack.c: pass both pack_objects args to repack_configTaylor Blau, Sep 28, 2025
  25. Patrick SteinhardtSep 29, 2025
  26. 13/49 repack: move 'delta_base_offset' to 'struct pack_objects_args'Taylor Blau, Sep 28, 2025
  27. Jeff KingOct 10, 2025
  28. Taylor BlauOct 10, 2025
  29. 14/49 repack: remove 'prepare_pack_objects' from the builtinTaylor Blau, Sep 28, 2025
  30. 15/49 builtin/repack.c: rename many 'struct existing_packs' functionsTaylor Blau, Sep 28, 2025
  31. 16/49 repack: remove 'remove_redundant_pack' from the builtinTaylor Blau, Sep 28, 2025
  32. 17/49 builtin/repack.c: pass "packdir" when removing packsTaylor Blau, Sep 28, 2025
  33. Patrick SteinhardtSep 29, 2025
  34. Taylor BlauOct 7, 2025
  35. Jeff KingOct 10, 2025
  36. Taylor BlauOct 10, 2025
  37. 18/49 builtin/repack.c: avoid unnecessary numeric casts in existing_packsTaylor Blau, Sep 28, 2025
  38. 19/49 repack: remove 'existing_packs' API from the builtinTaylor Blau, Sep 28, 2025
  39. Patrick SteinhardtSep 29, 2025
  40. Taylor BlauOct 7, 2025
  41. Jeff KingOct 10, 2025
  42. Taylor BlauOct 10, 2025
  43. 20/49 builtin/repack.c: rename "struct generated_pack_data"Taylor Blau, Sep 28, 2025
  44. 21/49 builtin/repack.c: factor our "generated_pack_install"Taylor Blau, Sep 28, 2025
  45. Patrick SteinhardtSep 29, 2025
  46. Taylor BlauOct 7, 2025
  47. Patrick SteinhardtOct 8, 2025
  48. Jeff KingOct 10, 2025
  49. Taylor BlauOct 10, 2025
  50. 22/49 builtin/repack.c: pass "packtmp" to `generated_pack_populate()`Taylor Blau, Sep 28, 2025
  51. Patrick SteinhardtSep 29, 2025
  52. Taylor BlauOct 7, 2025
  53. Patrick SteinhardtOct 8, 2025
  54. 23/49 builtin/repack.c: provide pack locations to `generated_pack_install()`Taylor Blau, Sep 28, 2025
  55. 24/49 repack: remove 'generated_pack' API from the builtinTaylor Blau, Sep 28, 2025
  56. 25/49 builtin/repack.c: pass "packtmp" to `repack_promisor_objects()`Taylor Blau, Sep 28, 2025
  57. 26/49 builtin/repack.c: remove "repack_promisor_objects()" from the builtinTaylor Blau, Sep 28, 2025
  58. Patrick SteinhardtSep 29, 2025
  59. Taylor BlauOct 7, 2025
  60. 27/49 builtin/repack.c: rename various pack_geometry functionsTaylor Blau, Sep 28, 2025
  61. Patrick SteinhardtSep 29, 2025
  62. Taylor BlauOct 7, 2025
  63. Patrick SteinhardtOct 8, 2025
  64. Taylor BlauOct 10, 2025
  65. 28/49 builtin/repack.c: pass 'pack_kept_objects' to `pack_geometry_init()`Taylor Blau, Sep 28, 2025
  66. 29/49 builtin/repack.c: pass 'packdir' to `pack_geometry_remove_redundant()`Taylor Blau, Sep 28, 2025
  67. 30/49 repack: remove pack_geometry API from the builtinTaylor Blau, Sep 28, 2025
  68. 31/49 builtin/repack.c: remove ref snapshotting from builtinTaylor Blau, Sep 28, 2025
  69. 32/49 builtin/repack.c: extract opts struct for 'write_midx_included_packs()'Taylor Blau, Sep 28, 2025
  70. 33/49 builtin/repack.c: use a string_list for 'midx_pack_names'Taylor Blau, Sep 28, 2025
  71. 34/49 repack: keep track of MIDX pack names using existing_packsTaylor Blau, Sep 28, 2025
  72. 35/49 builtin/repack.c: reorder `remove_redundant_bitmaps()`Taylor Blau, Sep 28, 2025
  73. 36/49 builtin/repack.c: inline `remove_redundant_bitmaps()`Taylor Blau, Sep 28, 2025
  74. 37/49 builtin/repack.c: pass `repack_write_midx_opts` to `midx_included_packs`Taylor Blau, Sep 28, 2025
  75. 38/49 builtin/repack.c: inline packs within `write_midx_included_packs()`Taylor Blau, Sep 28, 2025
  76. Patrick SteinhardtOct 10, 2025
  77. Taylor BlauOct 10, 2025
  78. Jeff KingOct 15, 2025
  79. 39/49 repack: 'write_midx_included_packs' API from the builtinTaylor Blau, Sep 28, 2025
  80. 40/49 builtin/repack.c: introduce `struct write_pack_opts`Taylor Blau, Sep 28, 2025
  81. Patrick SteinhardtOct 10, 2025
  82. Taylor BlauOct 10, 2025
  83. Jeff KingOct 15, 2025
  84. Taylor BlauOct 15, 2025
  85. 41/49 builtin/repack.c: use `write_pack_opts` within `write_cruft_pack()`Taylor Blau, Sep 28, 2025
  86. Patrick SteinhardtOct 10, 2025
  87. Taylor BlauOct 10, 2025
  88. Jeff KingOct 15, 2025
  89. 42/49 repack: move `find_pack_prefix()` out of the builtinTaylor Blau, Sep 28, 2025
  90. Jeff KingOct 15, 2025
  91. Taylor BlauOct 15, 2025
  92. 43/49 repack: extract `write_pack_opts_is_local()`Taylor Blau, Sep 28, 2025
  93. Patrick SteinhardtOct 10, 2025
  94. Taylor BlauOct 15, 2025
  95. Jeff KingOct 15, 2025
  96. Taylor BlauOct 15, 2025
  97. 44/49 builtin/repack.c: pass `write_pack_opts` to `finish_pack_objects_cmd()`Taylor Blau, Sep 28, 2025
  98. Jeff KingOct 15, 2025
  99. Taylor BlauOct 15, 2025
  100. 45/49 repack: move `finish_pack_objects_cmd()` out of the builtinTaylor Blau, Sep 28, 2025
  101. 46/49 repack: move `pack_kept_objects` to `struct pack_objects_args`Taylor Blau, Sep 28, 2025
  102. 47/49 repack: move `write_filtered_pack()` out of the builtinTaylor Blau, Sep 28, 2025
  103. 48/49 repack: move `write_cruft_pack()` out of the builtinTaylor Blau, Sep 28, 2025
  104. 49/49 builtin/repack.c: clean up unused `#include`sTaylor Blau, Sep 28, 2025
  105. Junio C HamanoSep 28, 2025
  106. Taylor BlauOct 7, 2025
  107. Jeff KingOct 10, 2025
  108. Taylor BlauOct 10, 2025
  109. Jeff KingOct 15, 2025
  110. 00/49 repack: prepare for incremental MIDX-based repackingTaylor Blau, Oct 15, 2025
  111. 01/49 builtin/repack.c: avoid "the_repository" in `cmd_repack()`Taylor Blau, Oct 15, 2025
  112. 02/49 builtin/repack.c: avoid "the_repository" in existing packs APITaylor Blau, Oct 15, 2025
  113. 03/49 builtin/repack.c: avoid "the_repository" when taking a ref snapshotTaylor Blau, Oct 15, 2025
  114. 04/49 builtin/repack.c: avoid "the_repository" when removing packsTaylor Blau, Oct 15, 2025
  115. 05/49 builtin/repack.c: avoid "the_repository" when repacking promisor objectsTaylor Blau, Oct 15, 2025
  116. 06/49 builtin/repack.c: avoid "the_hash_algo" when deleting packsTaylor Blau, Oct 15, 2025
  117. 07/49 builtin/repack.c: avoid "the_hash_algo" in `write_oid()`Taylor Blau, Oct 15, 2025
  118. 08/49 builtin/repack: avoid "the_hash_algo" in `repack_promisor_objects()`Taylor Blau, Oct 15, 2025
  119. 09/49 builtin/repack.c: avoid "the_hash_algo" in `finish_pack_objects_cmd()`Taylor Blau, Oct 15, 2025
  120. 10/49 builtin/repack.c: avoid using `hash_to_hex()` in pack geometryTaylor Blau, Oct 15, 2025
  121. 11/49 repack: introduce new compilation unitTaylor Blau, Oct 15, 2025
  122. 12/49 builtin/repack.c: pass both pack_objects args to repack_configTaylor Blau, Oct 15, 2025
  123. 13/49 repack: move 'delta_base_offset' to 'struct pack_objects_args'Taylor Blau, Oct 15, 2025
  124. 14/49 repack: remove 'prepare_pack_objects' from the builtinTaylor Blau, Oct 15, 2025
  125. 15/49 builtin/repack.c: rename many 'struct existing_packs' functionsTaylor Blau, Oct 15, 2025
  126. 16/49 repack: remove 'remove_redundant_pack' from the builtinTaylor Blau, Oct 15, 2025
  127. 17/49 builtin/repack.c: pass "packdir" when removing packsTaylor Blau, Oct 15, 2025
  128. 18/49 builtin/repack.c: avoid unnecessary numeric casts in existing_packsTaylor Blau, Oct 15, 2025
  129. 19/49 repack: remove 'existing_packs' API from the builtinTaylor Blau, Oct 15, 2025
  130. 20/49 builtin/repack.c: rename "struct generated_pack_data"Taylor Blau, Oct 15, 2025
  131. 21/49 builtin/repack.c: factor out "generated_pack_install"Taylor Blau, Oct 15, 2025
  132. 22/49 builtin/repack.c: pass "packtmp" to `generated_pack_populate()`Taylor Blau, Oct 15, 2025
  133. 23/49 builtin/repack.c: provide pack locations to `generated_pack_install()`Taylor Blau, Oct 15, 2025
  134. 24/49 repack: remove 'generated_pack' API from the builtinTaylor Blau, Oct 15, 2025
  135. 25/49 builtin/repack.c: pass "packtmp" to `repack_promisor_objects()`Taylor Blau, Oct 15, 2025
  136. 26/49 builtin/repack.c: remove "repack_promisor_objects()" from the builtinTaylor Blau, Oct 15, 2025
  137. 27/49 builtin/repack.c: rename various pack_geometry functionsTaylor Blau, Oct 15, 2025
  138. 28/49 builtin/repack.c: pass 'pack_kept_objects' to `pack_geometry_init()`Taylor Blau, Oct 15, 2025
  139. 29/49 builtin/repack.c: pass 'packdir' to `pack_geometry_remove_redundant()`Taylor Blau, Oct 15, 2025
  140. 30/49 repack: remove pack_geometry API from the builtinTaylor Blau, Oct 15, 2025
  141. 31/49 builtin/repack.c: remove ref snapshotting from builtinTaylor Blau, Oct 15, 2025
  142. 32/49 builtin/repack.c: extract opts struct for 'write_midx_included_packs()'Taylor Blau, Oct 15, 2025
  143. 33/49 builtin/repack.c: use a string_list for 'midx_pack_names'Taylor Blau, Oct 15, 2025
  144. 34/49 repack: keep track of MIDX pack names using existing_packsTaylor Blau, Oct 15, 2025
  145. 35/49 builtin/repack.c: reorder `remove_redundant_bitmaps()`Taylor Blau, Oct 15, 2025
  146. 36/49 builtin/repack.c: inline `remove_redundant_bitmaps()`Taylor Blau, Oct 15, 2025
  147. 37/49 builtin/repack.c: pass `repack_write_midx_opts` to `midx_included_packs`Taylor Blau, Oct 15, 2025
  148. 38/49 builtin/repack.c: inline packs within `write_midx_included_packs()`Taylor Blau, Oct 15, 2025
  149. 39/49 repack: 'write_midx_included_packs' API from the builtinTaylor Blau, Oct 15, 2025
  150. 40/49 builtin/repack.c: introduce `struct write_pack_opts`Taylor Blau, Oct 15, 2025
  151. 41/49 builtin/repack.c: use `write_pack_opts` within `write_cruft_pack()`Taylor Blau, Oct 15, 2025
  152. 42/49 repack: move `find_pack_prefix()` out of the builtinTaylor Blau, Oct 15, 2025
  153. 43/49 repack: extract `write_pack_opts_is_local()`Taylor Blau, Oct 15, 2025
  154. 44/49 builtin/repack.c: pass `write_pack_opts` to `finish_pack_objects_cmd()`Taylor Blau, Oct 15, 2025
  155. 45/49 repack: move `finish_pack_objects_cmd()` out of the builtinTaylor Blau, Oct 15, 2025
  156. 46/49 repack: move `pack_kept_objects` to `struct pack_objects_args`Taylor Blau, Oct 15, 2025
  157. 47/49 repack: move `write_filtered_pack()` out of the builtinTaylor Blau, Oct 15, 2025
  158. 48/49 repack: move `write_cruft_pack()` out of the builtinTaylor Blau, Oct 15, 2025
  159. 49/49 builtin/repack.c: clean up unused `#include`sTaylor Blau, Oct 15, 2025
  160. Patrick SteinhardtOct 16, 2025
  161. Junio C HamanoOct 16, 2025
  162. Taylor BlauOct 16, 2025
  163. Jeff KingOct 17, 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.