Code

parse-opts: prepare for OPT_FILENAME
authorStephen Boyd <bebarino@gmail.com>
Sat, 23 May 2009 18:53:12 +0000 (11:53 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 25 May 2009 08:07:25 +0000 (01:07 -0700)
To give OPT_FILENAME the prefix, we pass the prefix to parse_options()
which passes the prefix to parse_options_start() which sets the prefix
member of parse_opts_ctx accordingly. If there isn't a prefix in the
calling context, passing NULL will suffice.

Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
51 files changed:
Documentation/technical/api-parse-options.txt
archive.c
builtin-add.c
builtin-apply.c
builtin-archive.c
builtin-bisect--helper.c
builtin-blame.c
builtin-branch.c
builtin-cat-file.c
builtin-check-attr.c
builtin-checkout-index.c
builtin-checkout.c
builtin-clean.c
builtin-clone.c
builtin-commit.c
builtin-config.c
builtin-count-objects.c
builtin-describe.c
builtin-fast-export.c
builtin-fetch.c
builtin-fmt-merge-msg.c
builtin-for-each-ref.c
builtin-fsck.c
builtin-gc.c
builtin-grep.c
builtin-help.c
builtin-log.c
builtin-ls-files.c
builtin-merge-base.c
builtin-merge-file.c
builtin-merge.c
builtin-mktree.c
builtin-mv.c
builtin-name-rev.c
builtin-pack-refs.c
builtin-prune.c
builtin-push.c
builtin-remote.c
builtin-reset.c
builtin-rev-parse.c
builtin-revert.c
builtin-rm.c
builtin-shortlog.c
builtin-show-branch.c
builtin-symbolic-ref.c
builtin-tag.c
builtin-update-ref.c
hash-object.c
parse-options.c
parse-options.h
test-parse-options.c

index b43458eae6787caab163fadab113dff61e577498..aace5801ca8bf7334b73917e88f6e42ec978727e 100644 (file)
@@ -60,13 +60,13 @@ Steps to parse options
 . in `cmd_foo(int argc, const char **argv, const char *prefix)`
   call
 
-       argc = parse_options(argc, argv, builtin_foo_options, builtin_foo_usage, flags);
+       argc = parse_options(argc, argv, prefix, builtin_foo_options, builtin_foo_usage, flags);
 +
 `parse_options()` will filter out the processed options of `argv[]` and leave the
 non-option arguments in `argv[]`.
 `argc` is updated appropriately because of the assignment.
 +
-You can also pass NULL instead of a usage array as fourth parameter of
+You can also pass NULL instead of a usage array as the fifth parameter of
 parse_options(), to avoid displaying a help screen with usage info and
 option list.  This should only be done if necessary, e.g. to implement
 a limited parser for only a subset of the options that needs to be run
index b2b90d31700d3aa50a3ac0626c1a8561c37c49b7..0bca9ca4038ace99c32eff2e042290b03b2324b7 100644 (file)
--- a/archive.c
+++ b/archive.c
@@ -309,7 +309,7 @@ static int parse_archive_args(int argc, const char **argv,
                OPT_END()
        };
 
-       argc = parse_options(argc, argv, opts, archive_usage, 0);
+       argc = parse_options(argc, argv, NULL, opts, archive_usage, 0);
 
        if (remote)
                die("Unexpected option --remote");
index bee45f00de7d82e07b617716033f0d5605b2a368..c1b229a9d8a026ec88cdbf0492856021cacc8097 100644 (file)
@@ -298,7 +298,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
        int add_new_files;
        int require_pathspec;
 
-       argc = parse_options(argc, argv, builtin_add_options,
+       argc = parse_options(argc, argv, prefix, builtin_add_options,
                          builtin_add_usage, PARSE_OPT_KEEP_ARGV0);
        if (patch_interactive)
                add_interactive = 1;
index a40b9822425e25272cadf6f4170ba967eacf11bf..bac03d7902cb836f2ceb449b8f49e7b4005c0970 100644 (file)
@@ -3313,7 +3313,7 @@ int cmd_apply(int argc, const char **argv, const char *unused_prefix)
        if (apply_default_whitespace)
                parse_whitespace_option(apply_default_whitespace);
 
-       argc = parse_options(argc, argv, builtin_apply_options,
+       argc = parse_options(argc, argv, prefix, builtin_apply_options,
                        apply_usage, 0);
        fake_ancestor = parse_options_fix_filename(prefix, fake_ancestor);
        if (fake_ancestor)
index ab50cebba0e6798996cc007ced9079c3f0b94a29..3c5a5a7822afebf87ef6eb1f89c7c54d76844161 100644 (file)
@@ -80,7 +80,8 @@ int cmd_archive(int argc, const char **argv, const char *prefix)
                OPT_END()
        };
 
-       argc = parse_options(argc, argv, local_opts, NULL, PARSE_OPT_KEEP_ALL);
+       argc = parse_options(argc, argv, prefix, local_opts, NULL,
+                            PARSE_OPT_KEEP_ALL);
 
        if (output)
                create_output_file(output);
index cb3e15511611240cbc3ea53a1a591fdee19ba0b9..5b226399e1c30b23a7b5d226a3f45efe9dbedf45 100644 (file)
@@ -17,7 +17,8 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
                OPT_END()
        };
 
-       argc = parse_options(argc, argv, options, git_bisect_helper_usage, 0);
+       argc = parse_options(argc, argv, prefix, options,
+                            git_bisect_helper_usage, 0);
 
        if (!next_all)
                usage_with_options(git_bisect_helper_usage, options);
index cf74a926149668b7e67544aecd46a0e05d4f59d9..9dc333591045b4232e47eec32488e5a2104540c7 100644 (file)
@@ -2229,7 +2229,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
        save_commit_buffer = 0;
        dashdash_pos = 0;
 
-       parse_options_start(&ctx, argc, argv, PARSE_OPT_KEEP_DASHDASH |
+       parse_options_start(&ctx, argc, argv, prefix, PARSE_OPT_KEEP_DASHDASH |
                            PARSE_OPT_KEEP_ARGV0);
        for (;;) {
                switch (parse_options_step(&ctx, options, blame_opt_usage)) {
index 6aaa708473231848db8cba061f6048d41a6782af..5687d6042ced29e60aa1999dc9d73eb6c38b8e77 100644 (file)
@@ -610,7 +610,8 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
        }
        hashcpy(merge_filter_ref, head_sha1);
 
-       argc = parse_options(argc, argv, options, builtin_branch_usage, 0);
+       argc = parse_options(argc, argv, prefix, options, builtin_branch_usage,
+                            0);
        if (!!delete + !!rename + !!force_create > 1)
                usage_with_options(builtin_branch_usage, options);
 
index 8fad19daedef8a38674ee35cd543983bad610857..991e40fb2e01155c2fb9bf875781a8222ddfc715 100644 (file)
@@ -231,7 +231,7 @@ int cmd_cat_file(int argc, const char **argv, const char *prefix)
        if (argc != 3 && argc != 2)
                usage_with_options(cat_file_usage, options);
 
-       argc = parse_options(argc, argv, options, cat_file_usage, 0);
+       argc = parse_options(argc, argv, prefix, options, cat_file_usage, 0);
 
        if (opt) {
                if (argc == 1)
index 15a04b7179a09492764d43c16a3ec5ff7cdd1b61..8bd043009829fb4bb40cd2f730cbffa27c3791cf 100644 (file)
@@ -69,8 +69,8 @@ int cmd_check_attr(int argc, const char **argv, const char *prefix)
        int cnt, i, doubledash;
        const char *errstr = NULL;
 
-       argc = parse_options(argc, argv, check_attr_options, check_attr_usage,
-               PARSE_OPT_KEEP_DASHDASH);
+       argc = parse_options(argc, argv, prefix, check_attr_options,
+                            check_attr_usage, PARSE_OPT_KEEP_DASHDASH);
        if (!argc)
                usage_with_options(check_attr_usage, check_attr_options);
 
index afe35e246c5ab2b262683308def787c6abce2a83..a7a5ee10f32d52c7555f85f2dcf6c567425488dd 100644 (file)
@@ -249,7 +249,7 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)
                die("invalid cache");
        }
 
-       argc = parse_options(argc, argv, builtin_checkout_index_options,
+       argc = parse_options(argc, argv, prefix, builtin_checkout_index_options,
                        builtin_checkout_index_usage, 0);
        state.force = force;
        state.quiet = quiet;
index b8a4b0139b3b9c2f731315413a73db30edaf9231..8a9a474218c128b7878647045ba471df9902636a 100644 (file)
@@ -605,7 +605,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
 
        opts.track = BRANCH_TRACK_UNSPECIFIED;
 
-       argc = parse_options(argc, argv, options, checkout_usage,
+       argc = parse_options(argc, argv, prefix, options, checkout_usage,
                             PARSE_OPT_KEEP_DASHDASH);
 
        /* --track without -b should DWIM */
index c5ad33d3e665f6d1613df2dfba235b03765565ac..1c1b6d26e9987800d2a414e49e4f371a4277b96e 100644 (file)
@@ -56,7 +56,8 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
        else
                config_set = 1;
 
-       argc = parse_options(argc, argv, options, builtin_clean_usage, 0);
+       argc = parse_options(argc, argv, prefix, options, builtin_clean_usage,
+                            0);
 
        memset(&dir, 0, sizeof(dir));
        if (ignored_only)
index c935833c6ce176caf47a14b5ad1f2848f0d1ab22..5c46496a43a8fe2f91b395563b266e79a8b94429 100644 (file)
@@ -360,7 +360,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 
        junk_pid = getpid();
 
-       argc = parse_options(argc, argv, builtin_clone_options,
+       argc = parse_options(argc, argv, prefix, builtin_clone_options,
                             builtin_clone_usage, 0);
 
        if (argc == 0)
index baaa75cf908d57e6d8540b6483684400c0b2494b..b9a1528c9d4aa91a18e4f3b645592551f5ea2157 100644 (file)
@@ -697,7 +697,8 @@ static int parse_and_validate_options(int argc, const char *argv[],
 {
        int f = 0;
 
-       argc = parse_options(argc, argv, builtin_commit_options, usage, 0);
+       argc = parse_options(argc, argv, prefix, builtin_commit_options, usage,
+                            0);
        logfile = parse_options_fix_filename(prefix, logfile);
        if (logfile)
                logfile = xstrdup(logfile);
index a81bc8bbf033fac83ad6deecbf4a67ba44e06a0b..60915f91caff02997222d18bc625d242d95c6bb1 100644 (file)
@@ -316,7 +316,8 @@ int cmd_config(int argc, const char **argv, const char *unused_prefix)
 
        config_exclusive_filename = getenv(CONFIG_ENVIRONMENT);
 
-       argc = parse_options(argc, argv, builtin_config_options, builtin_config_usage,
+       argc = parse_options(argc, argv, prefix, builtin_config_options,
+                            builtin_config_usage,
                             PARSE_OPT_STOP_AT_NON_OPTION);
 
        if (use_global_config + use_system_config + !!given_config_file > 1) {
index b814fe5070873f5c87fc6bbfde480e3b0a83e397..1b0b6c84ea4279df56b82c5a406adbea59e58513 100644 (file)
@@ -83,7 +83,7 @@ int cmd_count_objects(int argc, const char **argv, const char *prefix)
                OPT_END(),
        };
 
-       argc = parse_options(argc, argv, opts, count_objects_usage, 0);
+       argc = parse_options(argc, argv, prefix, opts, count_objects_usage, 0);
        /* we do not take arguments other than flags for now */
        if (argc)
                usage_with_options(count_objects_usage, opts);
index 63c6a19da5b38bc7c00c624c080ba0afbb10ff8a..7a662980d102a275fceb8299bba0b84b41a8f9cb 100644 (file)
@@ -322,7 +322,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
                OPT_END(),
        };
 
-       argc = parse_options(argc, argv, options, describe_usage, 0);
+       argc = parse_options(argc, argv, prefix, options, describe_usage, 0);
        if (max_candidates < 0)
                max_candidates = 0;
        else if (max_candidates > MAX_TAGS)
index 6731713223d4df24614417cc4285cbee793151d3..6cef8103127a8748acb64ca7ec7a7a95fb639cd3 100644 (file)
@@ -515,7 +515,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
 
        init_revisions(&revs, prefix);
        argc = setup_revisions(argc, argv, &revs, NULL);
-       argc = parse_options(argc, argv, options, fast_export_usage, 0);
+       argc = parse_options(argc, argv, prefix, options, fast_export_usage, 0);
        if (argc > 1)
                usage_with_options (fast_export_usage, options);
 
index 77acabfcc71aaee02ea99d2cd10e51dd0feaea6e..0ed6016da190f421b79819d9d1545e061dbffbdf 100644 (file)
@@ -634,7 +634,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
        for (i = 1; i < argc; i++)
                strbuf_addf(&default_rla, " %s", argv[i]);
 
-       argc = parse_options(argc, argv,
+       argc = parse_options(argc, argv, prefix,
                             builtin_fetch_options, builtin_fetch_usage, 0);
 
        if (argc == 0)
index fae1482ba91937232f427a3f5dd03c587c3fba57..d4c72061429329473266abaa7128f810b19f5084 100644 (file)
@@ -360,7 +360,8 @@ int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix)
        int ret;
 
        git_config(fmt_merge_msg_config, NULL);
-       argc = parse_options(argc, argv, options, fmt_merge_msg_usage, 0);
+       argc = parse_options(argc, argv, prefix, options, fmt_merge_msg_usage,
+                            0);
        if (argc > 0)
                usage_with_options(fmt_merge_msg_usage, options);
        inpath = parse_options_fix_filename(prefix, inpath);
index d091e04af9549b70a1e15a4b845383056e71932e..784733b25d21f292c6ac895ba34d0a7b88b3073f 100644 (file)
@@ -905,7 +905,7 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
                OPT_END(),
        };
 
-       parse_options(argc, argv, opts, for_each_ref_usage, 0);
+       parse_options(argc, argv, prefix, opts, for_each_ref_usage, 0);
        if (maxcount < 0) {
                error("invalid --count argument: `%d'", maxcount);
                usage_with_options(for_each_ref_usage, opts);
index 6436bc224840f11af2f7fa26c61b62c25d78d865..7da706cac3bef05f03c09955d41b4e5077558d4f 100644 (file)
@@ -590,7 +590,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
 
        errors_found = 0;
 
-       argc = parse_options(argc, argv, fsck_opts, fsck_usage, 0);
+       argc = parse_options(argc, argv, prefix, fsck_opts, fsck_usage, 0);
        if (write_lost_and_found) {
                check_full = 1;
                include_reflogs = 0;
index fc556ed7f3fb68734fd783e5b38e6b050bed9c5b..7d3e9cc7a04e0aa3eb378cb54b7b71fe17981c95 100644 (file)
@@ -194,7 +194,8 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
        if (pack_refs < 0)
                pack_refs = !is_bare_repository();
 
-       argc = parse_options(argc, argv, builtin_gc_options, builtin_gc_usage, 0);
+       argc = parse_options(argc, argv, prefix, builtin_gc_options,
+                            builtin_gc_usage, 0);
        if (argc > 0)
                usage_with_options(builtin_gc_usage, builtin_gc_options);
 
index 5308b346e69a50d7695b26f3b8e00bfdf71e1dd2..73fc922c4995369c0ca86c01200e2a0ea39161ab 100644 (file)
@@ -765,7 +765,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
         * unrecognized non option is the beginning of the refs list
         * that continues up to the -- (if exists), and then paths.
         */
-       argc = parse_options(argc, argv, options, grep_usage,
+       argc = parse_options(argc, argv, prefix, options, grep_usage,
                             PARSE_OPT_KEEP_DASHDASH |
                             PARSE_OPT_STOP_AT_NON_OPTION |
                             PARSE_OPT_NO_INTERNAL_HELP);
index 67dda3e6e63c9130a6f1e1c94cb35e519d765a95..af565fb6588a900bca322381af6cbd93ca35d09e 100644 (file)
@@ -423,7 +423,7 @@ int cmd_help(int argc, const char **argv, const char *prefix)
        setup_git_directory_gently(&nongit);
        git_config(git_help_config, NULL);
 
-       argc = parse_options(argc, argv, builtin_help_options,
+       argc = parse_options(argc, argv, prefix, builtin_help_options,
                        builtin_help_usage, 0);
 
        if (show_all) {
index 5d39565e940e5218d697ccf671574e8d6188cd5a..ea8dbc869808d8fa80bcf5c46236273ff0a0ca8c 100644 (file)
@@ -936,7 +936,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
         * like "git format-patch -o a123 HEAD^.." may fail; a123 is
         * possibly a valid SHA1.
         */
-       argc = parse_options(argc, argv, builtin_format_patch_options,
+       argc = parse_options(argc, argv, prefix, builtin_format_patch_options,
                             builtin_format_patch_usage,
                             PARSE_OPT_KEEP_ARGV0 | PARSE_OPT_KEEP_UNKNOWN);
 
index 3d59b0e140ca199997704ffcf59fbc2138345168..2312866605c4140ac4e5a9f5bb963ca5ab5c6da3 100644 (file)
@@ -486,7 +486,7 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix)
                prefix_offset = strlen(prefix);
        git_config(git_default_config, NULL);
 
-       argc = parse_options(argc, argv, builtin_ls_files_options,
+       argc = parse_options(argc, argv, prefix, builtin_ls_files_options,
                        ls_files_usage, 0);
        if (show_tag || show_valid_bit) {
                tag_cached = "H ";
index 03fc1c211453f1ed09ee2c6b71d438b0bfbf474f..a6ec2f7ab76db27afbb63aacf3bba60b4e73b3f6 100644 (file)
@@ -53,7 +53,7 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix)
        };
 
        git_config(git_default_config, NULL);
-       argc = parse_options(argc, argv, options, merge_base_usage, 0);
+       argc = parse_options(argc, argv, prefix, options, merge_base_usage, 0);
        if (argc < 2)
                usage_with_options(merge_base_usage, options);
        rev = xmalloc(argc * sizeof(*rev));
index 96edb97a8327ba64cccf64bfa341e94d9f903e94..afd2ea7a732460c431328dbd4c0141a49d638244 100644 (file)
@@ -48,7 +48,7 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
                        merge_style = git_xmerge_style;
        }
 
-       argc = parse_options(argc, argv, options, merge_file_usage, 0);
+       argc = parse_options(argc, argv, prefix, options, merge_file_usage, 0);
        if (argc != 3)
                usage_with_options(merge_file_usage, options);
        if (quiet) {
index 0b58e5eda1f38c1560cc9dcf69be37fa5fc9886f..8d101eff0b433bd5afa6cf1e027e50447fdf5370 100644 (file)
@@ -462,7 +462,7 @@ static int git_merge_config(const char *k, const char *v, void *cb)
                argv = xrealloc(argv, sizeof(*argv) * (argc + 2));
                memmove(argv + 1, argv, sizeof(*argv) * (argc + 1));
                argc++;
-               parse_options(argc, argv, builtin_merge_options,
+               parse_options(argc, argv, NULL, builtin_merge_options,
                              builtin_merge_usage, 0);
                free(buf);
        }
@@ -855,7 +855,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
        if (diff_use_color_default == -1)
                diff_use_color_default = git_use_color_default;
 
-       argc = parse_options(argc, argv, builtin_merge_options,
+       argc = parse_options(argc, argv, prefix, builtin_merge_options,
                        builtin_merge_usage, 0);
        if (verbosity < 0)
                show_diffstat = 0;
index dc4f1a711df0e84657c9f1ea3edcba20c9764e75..098395fda1932674e29f8d2cb332c722a6cb275f 100644 (file)
@@ -155,7 +155,7 @@ int cmd_mktree(int ac, const char **av, const char *prefix)
                OPT_END()
        };
 
-       ac = parse_options(ac, av, option, mktree_usage, 0);
+       ac = parse_options(ac, av, prefix, option, mktree_usage, 0);
 
        while (!got_eof) {
                while (1) {
index 01270fefdfb04ed27379b1ca761a811b929ce887..8b81d4b51d78bb2aa49430102ab585afce9cccdf 100644 (file)
@@ -72,7 +72,8 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
        if (read_cache() < 0)
                die("index file corrupt");
 
-       argc = parse_options(argc, argv, builtin_mv_options, builtin_mv_usage, 0);
+       argc = parse_options(argc, argv, prefix, builtin_mv_options,
+                            builtin_mv_usage, 0);
        if (--argc < 1)
                usage_with_options(builtin_mv_usage, builtin_mv_options);
 
index 08c8aabf9428447abad7def693d7b22c5330e180..06a38ac8c10126085e6477c205d450da089faae2 100644 (file)
@@ -238,7 +238,7 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)
        };
 
        git_config(git_default_config, NULL);
-       argc = parse_options(argc, argv, opts, name_rev_usage, 0);
+       argc = parse_options(argc, argv, prefix, opts, name_rev_usage, 0);
        if (!!all + !!transform_stdin + !!argc > 1) {
                error("Specify either a list, or --all, not both!");
                usage_with_options(name_rev_usage, opts);
index 34246df4ec946273d9f42e6f0848b02d8510beea..091860b2e370561f0811399b0d307e732e9eaac3 100644 (file)
@@ -15,7 +15,7 @@ int cmd_pack_refs(int argc, const char **argv, const char *prefix)
                OPT_BIT(0, "prune", &flags, "prune loose refs (default)", PACK_REFS_PRUNE),
                OPT_END(),
        };
-       if (parse_options(argc, argv, opts, pack_refs_usage, 0))
+       if (parse_options(argc, argv, prefix, opts, pack_refs_usage, 0))
                usage_with_options(pack_refs_usage, opts);
        return pack_refs(flags);
 }
index 145ba83651e9c8560e20d6ab449ce64783bc65f5..0ed9cce4a23aa575c1e131a808cedd4f8bb542f4 100644 (file)
@@ -142,7 +142,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
        save_commit_buffer = 0;
        init_revisions(&revs, prefix);
 
-       argc = parse_options(argc, argv, options, prune_usage, 0);
+       argc = parse_options(argc, argv, prefix, options, prune_usage, 0);
        while (argc--) {
                unsigned char sha1[20];
                const char *name = *argv++;
index 2eabcd3bdfb3f5d5705125a8f74d21d4ab1deafc..c869974013b5c1bb563d4f9b306820362545c9ea 100644 (file)
@@ -198,7 +198,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
                OPT_END()
        };
 
-       argc = parse_options(argc, argv, options, push_usage, 0);
+       argc = parse_options(argc, argv, prefix, options, push_usage, 0);
 
        if (tags)
                add_refspec("refs/tags/*");
index 71abf68404f5b260ba96208717d89e50e778dd36..13d5db168a8ec58ce6f99742fc35e71949559a6d 100644 (file)
@@ -79,7 +79,8 @@ static int add(int argc, const char **argv)
                OPT_END()
        };
 
-       argc = parse_options(argc, argv, options, builtin_remote_usage, 0);
+       argc = parse_options(argc, argv, NULL, options, builtin_remote_usage,
+                            0);
 
        if (argc < 2)
                usage_with_options(builtin_remote_usage, options);
@@ -986,7 +987,8 @@ static int show(int argc, const char **argv)
        struct string_list info_list = { NULL, 0, 0, 0 };
        struct show_info info;
 
-       argc = parse_options(argc, argv, options, builtin_remote_usage, 0);
+       argc = parse_options(argc, argv, NULL, options, builtin_remote_usage,
+                            0);
 
        if (argc < 1)
                return show_all();
@@ -1076,7 +1078,8 @@ static int set_head(int argc, const char **argv)
                            "delete refs/remotes/<name>/HEAD"),
                OPT_END()
        };
-       argc = parse_options(argc, argv, options, builtin_remote_usage, 0);
+       argc = parse_options(argc, argv, NULL, options, builtin_remote_usage,
+                            0);
        if (argc)
                strbuf_addf(&buf, "refs/remotes/%s/HEAD", argv[0]);
 
@@ -1130,7 +1133,8 @@ static int prune(int argc, const char **argv)
                OPT_END()
        };
 
-       argc = parse_options(argc, argv, options, builtin_remote_usage, 0);
+       argc = parse_options(argc, argv, NULL, options, builtin_remote_usage,
+                            0);
 
        if (argc < 1)
                usage_with_options(builtin_remote_usage, options);
@@ -1220,7 +1224,7 @@ static int update(int argc, const char **argv)
                OPT_END()
        };
 
-       argc = parse_options(argc, argv, options, builtin_remote_usage,
+       argc = parse_options(argc, argv, NULL, options, builtin_remote_usage,
                             PARSE_OPT_KEEP_ARGV0);
        if (argc < 2) {
                argc = 2;
@@ -1306,7 +1310,7 @@ int cmd_remote(int argc, const char **argv, const char *prefix)
        };
        int result;
 
-       argc = parse_options(argc, argv, options, builtin_remote_usage,
+       argc = parse_options(argc, argv, prefix, options, builtin_remote_usage,
                PARSE_OPT_STOP_AT_NON_OPTION);
 
        if (argc < 1)
index 7e7ebabaa865ebd749502774638efe7b6d26bec1..5fa1789d0c2b90ef9ee83d091b67292f2ff0db26 100644 (file)
@@ -203,7 +203,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
 
        git_config(git_default_config, NULL);
 
-       argc = parse_options(argc, argv, options, git_reset_usage,
+       argc = parse_options(argc, argv, prefix, options, git_reset_usage,
                                                PARSE_OPT_KEEP_DASHDASH);
        reflog_action = args_to_str(argv);
        setenv("GIT_REFLOG_ACTION", reflog_action, 0);
index c5b3d6e31bc899fe511f760de33870f20dc9766f..112d622cda6f74f9752627d9adf3a1cdb04851c3 100644 (file)
@@ -318,7 +318,7 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix)
        int onb = 0, osz = 0, unb = 0, usz = 0;
 
        strbuf_addstr(&parsed, "set --");
-       argc = parse_options(argc, argv, parseopt_opts, parseopt_usage,
+       argc = parse_options(argc, argv, prefix, parseopt_opts, parseopt_usage,
                             PARSE_OPT_KEEP_DASHDASH);
        if (argc < 1 || strcmp(argv[0], "--"))
                usage_with_options(parseopt_usage, parseopt_opts);
@@ -393,7 +393,7 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix)
        /* put an OPT_END() */
        ALLOC_GROW(opts, onb + 1, osz);
        memset(opts + onb, 0, sizeof(opts[onb]));
-       argc = parse_options(argc, argv, opts, usage,
+       argc = parse_options(argc, argv, prefix, opts, usage,
                             keep_dashdash ? PARSE_OPT_KEEP_DASHDASH : 0);
 
        strbuf_addf(&parsed, " --");
index 3f2614e1bbef009afadefff7d284225533db2a09..fa4752fd205ea6b3e122756d6c0640f059795737 100644 (file)
@@ -60,7 +60,7 @@ static void parse_args(int argc, const char **argv)
                OPT_END(),
        };
 
-       if (parse_options(argc, argv, options, usage_str, 0) != 1)
+       if (parse_options(argc, argv, NULL, options, usage_str, 0) != 1)
                usage_with_options(usage_str, options);
        arg = argv[0];
 
index 269d60890ac6732f05b835e88bdb60a10bb3d441..0cc491271846214d73d55a4f528c8854e0460c8f 100644 (file)
@@ -157,7 +157,8 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
 
        git_config(git_default_config, NULL);
 
-       argc = parse_options(argc, argv, builtin_rm_options, builtin_rm_usage, 0);
+       argc = parse_options(argc, argv, prefix, builtin_rm_options,
+                            builtin_rm_usage, 0);
        if (!argc)
                usage_with_options(builtin_rm_usage, builtin_rm_options);
 
index b28091b4455db15e80841f2779ce0686d4f18826..6a3812ee18a2ca1bc251f67582ebaee3675d9af5 100644 (file)
@@ -263,7 +263,7 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
        git_config(git_default_config, NULL);
        shortlog_init(&log);
        init_revisions(&rev, prefix);
-       parse_options_start(&ctx, argc, argv, PARSE_OPT_KEEP_DASHDASH |
+       parse_options_start(&ctx, argc, argv, prefix, PARSE_OPT_KEEP_DASHDASH |
                            PARSE_OPT_KEEP_ARGV0);
 
        for (;;) {
index b1affd2ffbbff955d24ed0a32b2d89d1ae7fe024..94338119569b6af85c9d121daa2134818f7d321e 100644 (file)
@@ -697,7 +697,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)
                av = default_arg - 1; /* ick; we would not address av[0] */
        }
 
-       ac = parse_options(ac, av, builtin_show_branch_options,
+       ac = parse_options(ac, av, prefix, builtin_show_branch_options,
                           show_branch_usage, PARSE_OPT_STOP_AT_NON_OPTION);
        if (all_heads)
                all_remotes = 1;
index 6ae6bcc0e8d02d9af8a81a7d694c0bfd2c6c0514..ca855a5eb239f4dadccd53369e38db4e78b1d13f 100644 (file)
@@ -36,7 +36,8 @@ int cmd_symbolic_ref(int argc, const char **argv, const char *prefix)
        };
 
        git_config(git_default_config, NULL);
-       argc = parse_options(argc, argv, options, git_symbolic_ref_usage, 0);
+       argc = parse_options(argc, argv, prefix, options,
+                            git_symbolic_ref_usage, 0);
        if (msg &&!*msg)
                die("Refusing to perform update with empty message");
        switch (argc) {
index e54443009420d98dc281285e997b32f2a263b996..6e8b464109af51718eb3b83718af3d6ffaab137b 100644 (file)
@@ -405,7 +405,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
 
        git_config(git_tag_config, NULL);
 
-       argc = parse_options(argc, argv, options, git_tag_usage, 0);
+       argc = parse_options(argc, argv, prefix, options, git_tag_usage, 0);
        msgfile = parse_options_fix_filename(prefix, msgfile);
 
        if (keyid) {
index 378dc1b7a6bb4d56d301a34a4d44dae2f9a37e44..76ba1d5881b3cddc527bd363dec340c83dde605f 100644 (file)
@@ -23,7 +23,8 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)
        };
 
        git_config(git_default_config, NULL);
-       argc = parse_options(argc, argv, options, git_update_ref_usage, 0);
+       argc = parse_options(argc, argv, prefix, options, git_update_ref_usage,
+                            0);
        if (msg && !*msg)
                die("Refusing to perform update with empty message.");
 
index ebb3bedb074202a29e2356845012bd1ffae0dc19..47cf43c3cdd2bcd7638360a130fc8ef04ce132e9 100644 (file)
@@ -84,7 +84,8 @@ int main(int argc, const char **argv)
 
        git_extract_argv0_path(argv[0]);
 
-       argc = parse_options(argc, argv, hash_object_options, hash_object_usage, 0);
+       argc = parse_options(argc, argv, NULL, hash_object_options,
+                            hash_object_usage, 0);
 
        if (write_object) {
                prefix = setup_git_directory();
index 1d25b94c72b3fc52eabbdc31a61e43e404ddb303..be1800d7b48bf07bd3b01395f6ea6fed40bddb37 100644 (file)
@@ -285,12 +285,14 @@ static void check_typos(const char *arg, const struct option *options)
 }
 
 void parse_options_start(struct parse_opt_ctx_t *ctx,
-                        int argc, const char **argv, int flags)
+                        int argc, const char **argv, const char *prefix,
+                        int flags)
 {
        memset(ctx, 0, sizeof(*ctx));
        ctx->argc = argc - 1;
        ctx->argv = argv + 1;
        ctx->out  = argv;
+       ctx->prefix = prefix;
        ctx->cpidx = ((flags & PARSE_OPT_KEEP_ARGV0) != 0);
        ctx->flags = flags;
        if ((flags & PARSE_OPT_KEEP_UNKNOWN) &&
@@ -389,12 +391,13 @@ int parse_options_end(struct parse_opt_ctx_t *ctx)
        return ctx->cpidx + ctx->argc;
 }
 
-int parse_options(int argc, const char **argv, const struct option *options,
-                 const char * const usagestr[], int flags)
+int parse_options(int argc, const char **argv, const char *prefix,
+                 const struct option *options, const char * const usagestr[],
+                 int flags)
 {
        struct parse_opt_ctx_t ctx;
 
-       parse_options_start(&ctx, argc, argv, flags);
+       parse_options_start(&ctx, argc, argv, prefix, flags);
        switch (parse_options_step(&ctx, options, usagestr)) {
        case PARSE_OPT_HELP:
                exit(129);
index fe41ab2c67024b91794c483c2436e33e205f5f62..f652c0f3c735a213ac2cc169b11025fc40987997 100644 (file)
@@ -122,7 +122,7 @@ struct option {
  * non-option arguments in argv[].
  * Returns the number of arguments left in argv[].
  */
-extern int parse_options(int argc, const char **argv,
+extern int parse_options(int argc, const char **argv, const char *prefix,
                          const struct option *options,
                          const char * const usagestr[], int flags);
 
@@ -148,13 +148,15 @@ struct parse_opt_ctx_t {
        int argc, cpidx;
        const char *opt;
        int flags;
+       const char *prefix;
 };
 
 extern int parse_options_usage(const char * const *usagestr,
                               const struct option *opts);
 
 extern void parse_options_start(struct parse_opt_ctx_t *ctx,
-                               int argc, const char **argv, int flags);
+                               int argc, const char **argv, const char *prefix,
+                               int flags);
 
 extern int parse_options_step(struct parse_opt_ctx_t *ctx,
                              const struct option *options,
index e0669dcb41d1d779f274e1ff785352e284953b14..da3d6581d307763d05fa4b8492ade424a85f50f1 100644 (file)
@@ -65,7 +65,7 @@ int main(int argc, const char **argv)
        };
        int i;
 
-       argc = parse_options(argc, argv, options, usage, 0);
+       argc = parse_options(argc, argv, NULL, options, usage, 0);
 
        printf("boolean: %d\n", boolean);
        printf("integer: %u\n", integer);