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

[PATCH 03/14] builtin: consistently pass cmd_* prefix to parse_options

From
Jeff King <peff@peff.net>
Date
May 9, 2019, 21:28 UTC
Message-ID
<20190509212850.GC15837@sigill.intra.peff.net>
In-Reply-To
<20190509212558.GA15438@sigill.intra.peff.net>

If a builtin uses RUN_SETUP to request that git.c enter the repository directory, we'll get passed in a "prefix" variable with the path to the original directory. It's important to pass this to parse_options(), since we may use it to fix up relative OPT_FILENAME() options. Some builtins don't bother; let's make sure we do so consistently.

There may not be any particular bugs fixed here; OPT_FILENAME is actually pretty rare, and none of these commands use it directly. However, this does future-proof us against somebody adding an option that uses it and creating a subtle bug that only shows up when you're in a subdirectory of the repository.

In some cases, like hash-object and upload-pack, we don't specify RUN_SETUP, so we know the prefix will always be empty. It's still worth passing the variable along to keep the idiom consistent across all builtins (and of course it protects us if they ever _did_ switch to using RUN_SETUP).

Signed-off-by: Jeff King <peff@peff.net>
---
 builtin/column.c              | 2 +-
 builtin/hash-object.c         | 2 +-
 builtin/range-diff.c          | 2 +-
 builtin/rebase--interactive.c | 2 +-
 builtin/upload-pack.c         | 2 +-
 5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/builtin/column.c b/builtin/column.c
index 5228ccf37a..e815e148aa 100644
--- a/builtin/column.c
+++ b/builtin/column.c
@@ -43,7 +43,7 @@ int cmd_column(int argc, const char **argv, const char *prefix)
 
 	memset(&copts, 0, sizeof(copts));
 	copts.padding = 1;
-	argc = parse_options(argc, argv, "", options, builtin_column_usage, 0);
+	argc = parse_options(argc, argv, prefix, options, builtin_column_usage, 0);
 	if (argc)
 		usage_with_options(builtin_column_usage, options);
 	if (real_command || command) {
diff --git a/builtin/hash-object.c b/builtin/hash-object.c
index e055c11103..640ef4ded5 100644
--- a/builtin/hash-object.c
+++ b/builtin/hash-object.c
@@ -108,7 +108,7 @@ int cmd_hash_object(int argc, const char **argv, const char *prefix)
 	int i;
 	const char *errstr = NULL;
 
-	argc = parse_options(argc, argv, NULL, hash_object_options,
+	argc = parse_options(argc, argv, prefix, hash_object_options,
 			     hash_object_usage, 0);
 
 	if (flags & HASH_WRITE_OBJECT)
diff --git a/builtin/range-diff.c b/builtin/range-diff.c
index 784bd19321..9202e75544 100644
--- a/builtin/range-diff.c
+++ b/builtin/range-diff.c
@@ -32,7 +32,7 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
 	repo_diff_setup(the_repository, &diffopt);
 
 	options = parse_options_concat(range_diff_options, diffopt.parseopts);
-	argc = parse_options(argc, argv, NULL, options,
+	argc = parse_options(argc, argv, prefix, options,
 			     builtin_range_diff_usage, 0);
 
 	diff_setup_done(&diffopt);
diff --git a/builtin/rebase--interactive.c b/builtin/rebase--interactive.c
index 4535523bf5..72fd4b53a8 100644
--- a/builtin/rebase--interactive.c
+++ b/builtin/rebase--interactive.c
@@ -302,7 +302,7 @@ int cmd_rebase__interactive(int argc, const char **argv, const char *prefix)
 	if (argc == 1)
 		usage_with_options(builtin_rebase_interactive_usage, options);
 
-	argc = parse_options(argc, argv, NULL, options,
+	argc = parse_options(argc, argv, prefix, options,
 			builtin_rebase_interactive_usage, PARSE_OPT_KEEP_ARGV0);
 
 	opts.gpg_sign = xstrdup_or_null(opts.gpg_sign);
diff --git a/builtin/upload-pack.c b/builtin/upload-pack.c
index 42dc4da5a1..6da8fa2607 100644
--- a/builtin/upload-pack.c
+++ b/builtin/upload-pack.c
@@ -33,7 +33,7 @@ int cmd_upload_pack(int argc, const char **argv, const char *prefix)
 	packet_trace_identity("upload-pack");
 	read_replace_refs = 0;
 
-	argc = parse_options(argc, argv, NULL, options, upload_pack_usage, 0);
+	argc = parse_options(argc, argv, prefix, options, upload_pack_usage, 0);
 
 	if (argc != 1)
 		usage_with_options(upload_pack_usage, options);
-- 
2.21.0.1382.g4c6032d436
Previous: Jeff KingNext: Derrick Stolee
Message 6 of 20 in “"final" batch of unused parameter cleanups”
  1. 0/14 "final" batch of unused parameter cleanupsJeff King, May 9, 2019
  2. 01/14 cmd_{read,write}_tree: rename "unused" variable that is usedJeff King, May 9, 2019
  3. Derrick StoleeMay 10, 2019
  4. Junio C HamanoMay 13, 2019
  5. 02/14 submodule: drop unused prefix parameter from some functionsJeff King, May 9, 2019
  6. 03/14 builtin: consistently pass cmd_* prefix to parse_optionsJeff King, May 9, 2019
  7. Derrick StoleeMay 10, 2019
  8. 04/14 clone: drop dest parameter from copy_alternates()Jeff King, May 9, 2019
  9. 05/14 read-cache: drop unused parameter from threaded loadJeff King, May 9, 2019
  10. 06/14 wt-status: drop unused status parameterJeff King, May 9, 2019
  11. 07/14 mktree: drop unused length parameterJeff King, May 9, 2019
  12. 08/14 name-rev: drop unused parameters from is_better_name()Jeff King, May 9, 2019
  13. 09/14 pack-objects: drop unused rev_info parametersJeff King, May 9, 2019
  14. 10/14 receive-pack: drop unused "commands" from prepare_shallow_update()Jeff King, May 9, 2019
  15. 11/14 remove_all_fetch_refspecs(): drop unused "remote" parameterJeff King, May 9, 2019
  16. 12/14 rev-list: drop unused void pointer from finish_commit()Jeff King, May 9, 2019
  17. 13/14 show-branch: drop unused parameter from show_independent()Jeff King, May 9, 2019
  18. 14/14 verify-commit: simplify parameters to run_gpg_verify()Jeff King, May 9, 2019
  19. Derrick StoleeMay 10, 2019
  20. Derrick StoleeMay 10, 2019

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.