builtin: consistently pass cmd_* prefix to parse_options
authorJeff King <peff@peff.net>
Thu, 9 May 2019 21:28:51 +0000 (17:28 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 May 2019 05:22:53 +0000 (14:22 +0900)
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/column.c
builtin/hash-object.c
builtin/range-diff.c
builtin/rebase--interactive.c
builtin/upload-pack.c
index 5228ccf37a5c8f568091ebef6df86fda40aa93dc..e815e148aa18364c198eef0ee5c2ed4e34ae77e9 100644 (file)
@@ -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) {
index e055c1110310bc3b6ccef4fa83dae84316fcc75f..640ef4ded595a3a21579a5630e04c3e6a412420d 100644 (file)
@@ -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)
index 784bd193219e46dff7a9773614036344b23f7039..9202e75544761f274d3e360a3dc609fff294d0bb 100644 (file)
@@ -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);
index 4535523bf53f989759176c550d20d75b5ef7e587..72fd4b53a884e198b90daf7bfc06030955b793f2 100644 (file)
@@ -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);
index 42dc4da5a1fc047baa9f71288670c3b981cb3b7e..6da8fa2607c6b831c69a76c5bb2ec5caec444d54 100644 (file)
@@ -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);