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

[PATCH 08/11] config-batch: pass prefix through commands

From
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
Date
Feb 4, 2026, 14:20 UTC
Message-ID
<60443c56f456ca794e299ae8d8bbea23793780b5.1770214803.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.2033.git.1770214803.gitgitgadget@gmail.com>
From: Derrick Stolee <stolee@gmail.com>

The 'help' and 'get' commands of 'git config-batch' have not needed the prefix parameter from the builtin entrance point, but an upcoming command will need it in order to identify the location of the appropriate config file. Pass it through the appropriate functions and function pointers.

Signed-off-by: Derrick Stolee <stolee@gmail.com>
---
 builtin/config-batch.c | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)
diff --git a/builtin/config-batch.c b/builtin/config-batch.c
index 2c48c4ea37..9829b16c6f 100644
--- a/builtin/config-batch.c
+++ b/builtin/config-batch.c
@@ -67,9 +67,11 @@ static int command_parse_error(const char *command)
  * Return 0 on success.
  */
 typedef int (*command_fn)(struct repository *repo,
+			  const char *prefix,
 			  char *data, size_t data_len);
 
 static int unknown_command(struct repository *repo UNUSED,
+			   const char *prefix UNUSED,
 			   char *data UNUSED, size_t data_len UNUSED)
 {
 	return emit_response(UNKNOWN_COMMAND, NULL);
@@ -176,6 +178,7 @@ static size_t parse_token(char **data, size_t *data_len,
 }
 
 static int help_command_1(struct repository *repo,
+			  const char *prefix UNUSED,
 			  char *data, size_t data_len);
 
 enum value_match_mode {
@@ -292,6 +295,7 @@ static int parse_scope(const char *str, enum config_scope *scope)
  * [N*] indicates optional parameters that are not needed.
  */
 static int get_command_1(struct repository *repo,
+			 const char *prefix UNUSED,
 			 char *data,
 			 size_t data_len)
 {
@@ -402,6 +406,7 @@ static struct command commands[] = {
 #define COMMAND_COUNT ((size_t)(sizeof(commands) / sizeof(*commands)))
 
 static int help_command_1(struct repository *repo UNUSED,
+			  const char *prefix UNUSED,
 			  char *data UNUSED, size_t data_len UNUSED)
 {
 	struct strbuf fmt_str = STRBUF_INIT;
@@ -424,7 +429,8 @@ static int help_command_1(struct repository *repo UNUSED,
 	return 0;
 }
 
-static int process_command_nul(struct repository *repo)
+static int process_command_nul(struct repository *repo,
+			       const char *prefix)
 {
 	static struct strbuf line = STRBUF_INIT;
 	char *data, *command, *versionstr;
@@ -476,7 +482,7 @@ static int process_command_nul(struct repository *repo)
 		if (!commands[i].name[0] ||
 		    (!strcmp(command, commands[i].name) &&
 		     commands[i].version == version)) {
-			res = commands[i].fn(repo, data, data_len);
+			res = commands[i].fn(repo, prefix, data, data_len);
 			goto cleanup;
 		}
 	}
@@ -484,14 +490,15 @@ static int process_command_nul(struct repository *repo)
 	BUG(_("scanned to end of command list, including 'unknown_command'"));
 
 parse_error:
-	res = unknown_command(repo, NULL, 0);
+	res = unknown_command(repo, prefix, NULL, 0);
 
 cleanup:
 	strbuf_release(&line);
 	return res;
 }
 
-static int process_command_whitespace(struct repository *repo)
+static int process_command_whitespace(struct repository *repo,
+				      const char *prefix)
 {
 	static struct strbuf line = STRBUF_INIT;
 	struct string_list tokens = STRING_LIST_INIT_NODUP;
@@ -536,7 +543,7 @@ static int process_command_whitespace(struct repository *repo)
 		if (!commands[i].name[0] ||
 		    (!strcmp(command, commands[i].name) &&
 		     commands[i].version == version)) {
-			res = commands[i].fn(repo, data, data_len);
+			res = commands[i].fn(repo, prefix, data, data_len);
 			goto cleanup;
 		}
 	}
@@ -559,11 +566,12 @@ cleanup:
  *
  * Returns negative value on other catastrophic error.
  */
-static int process_command(struct repository *repo)
+static int process_command(struct repository *repo,
+			   const char *prefix)
 {
 	if (zformat)
-		return process_command_nul(repo);
-	return process_command_whitespace(repo);
+		return process_command_nul(repo, prefix);
+	return process_command_whitespace(repo, prefix);
 }
 
 int cmd_config_batch(int argc,
@@ -586,7 +594,7 @@ int cmd_config_batch(int argc,
 
 	repo_config(repo, git_default_config, NULL);
 
-	while (!(res = process_command(repo)));
+	while (!(res = process_command(repo, prefix)));
 
 	if (res == 1)
 		return 0;
-- 
gitgitgadget
Previous: Derrick Stolee via GitGitGadgetNext: Derrick Stolee via GitGitGadget
Message 24 of 40 in “[RFC] config-batch: a new builtin for tools querying config”
  1. 00/11 [RFC] config-batch: a new builtin for tools querying configDerrick Stolee via GitGitGadget, Feb 4, 2026
  2. 01/11 config-batch: basic boilerplate of new builtinDerrick Stolee via GitGitGadget, Feb 4, 2026
  3. Junio C HamanoFeb 4, 2026
  4. Derrick StoleeFeb 5, 2026
  5. Kristoffer HaugsbakkFeb 5, 2026
  6. Kristoffer HaugsbakkFeb 5, 2026
  7. Jean-Noël AvilaFeb 6, 2026
  8. 02/11 config-batch: create parse loop and unknown commandDerrick Stolee via GitGitGadget, Feb 4, 2026
  9. Junio C HamanoFeb 4, 2026
  10. Kristoffer HaugsbakkFeb 5, 2026
  11. Jean-Noël AvilaFeb 6, 2026
  12. 03/11 config-batch: implement get v1Derrick Stolee via GitGitGadget, Feb 4, 2026
  13. Jean-Noël AvilaFeb 6, 2026
  14. 04/11 config-batch: create 'help' commandDerrick Stolee via GitGitGadget, Feb 4, 2026
  15. Jean-Noël AvilaFeb 6, 2026
  16. Derrick StoleeFeb 10, 2026
  17. 05/11 config-batch: add NUL-terminated I/O formatDerrick Stolee via GitGitGadget, Feb 4, 2026
  18. Kristoffer HaugsbakkFeb 5, 2026
  19. Jean-Noël AvilaFeb 6, 2026
  20. 06/11 docs: add design doc for config-batchDerrick Stolee via GitGitGadget, Feb 4, 2026
  21. Kristoffer HaugsbakkFeb 5, 2026
  22. Derrick StoleeFeb 10, 2026
  23. 07/11 config: extract location structs from builtinDerrick Stolee via GitGitGadget, Feb 4, 2026
  24. 08/11 config-batch: pass prefix through commandsDerrick Stolee via GitGitGadget, Feb 4, 2026
  25. 09/11 config-batch: add 'set' v1 commandDerrick Stolee via GitGitGadget, Feb 4, 2026
  26. Kristoffer HaugsbakkFeb 5, 2026
  27. Kristoffer HaugsbakkFeb 5, 2026
  28. Kristoffer HaugsbakkFeb 5, 2026
  29. Derrick StoleeFeb 10, 2026
  30. Jean-Noël AvilaFeb 6, 2026
  31. 10/11 t1312: create read/write testDerrick Stolee via GitGitGadget, Feb 4, 2026
  32. 11/11 config-batch: add unset v1 commandDerrick Stolee via GitGitGadget, Feb 4, 2026
  33. Kristoffer HaugsbakkFeb 5, 2026
  34. Junio C HamanoFeb 4, 2026
  35. Derrick StoleeFeb 5, 2026
  36. brian m. carlsonFeb 5, 2026
  37. Derrick StoleeFeb 5, 2026
  38. Derrick StoleeFeb 10, 2026
  39. Phillip WoodFeb 5, 2026
  40. Kristoffer HaugsbakkFeb 5, 2026

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.