@matheusbsbs / matheus-bagliano / commits / 3778292017
Fork 0

parse-opts: prepare for OPT_FILENAME

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>

Stephen Boyd committed May 23, 2009 at 11:53 UTC 377829201783b8a648e07af6ce7d747e0f45dc19
51 files changed +86 -64
Documentation/technical/api-parse-options.txt
+2 -2
@@ -60,13 +60,13 @@ Steps to parse options
60 . in `cmd_foo(int argc, const char **argv, const char *prefix)`
61 call
62
63 - argc = parse_options(argc, argv, builtin_foo_options, builtin_foo_usage, flags);
63 + argc = parse_options(argc, argv, prefix, builtin_foo_options, builtin_foo_usage, flags);
64 +
65 `parse_options()` will filter out the processed options of `argv[]` and leave the
66 non-option arguments in `argv[]`.
67 `argc` is updated appropriately because of the assignment.
68 +
69 -You can also pass NULL instead of a usage array as fourth parameter of
69 +You can also pass NULL instead of a usage array as the fifth parameter of
70 parse_options(), to avoid displaying a help screen with usage info and
71 option list. This should only be done if necessary, e.g. to implement
72 a limited parser for only a subset of the options that needs to be run
archive.c
+1 -1
@@ -309,7 +309,7 @@ static int parse_archive_args(int argc, const char **argv,
309 OPT_END()
310 };
311
312 - argc = parse_options(argc, argv, opts, archive_usage, 0);
312 + argc = parse_options(argc, argv, NULL, opts, archive_usage, 0);
313
314 if (remote)
315 die("Unexpected option --remote");
builtin-add.c
+1 -1
@@ -298,7 +298,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
298 int add_new_files;
299 int require_pathspec;
300
301 - argc = parse_options(argc, argv, builtin_add_options,
301 + argc = parse_options(argc, argv, prefix, builtin_add_options,
302 builtin_add_usage, PARSE_OPT_KEEP_ARGV0);
303 if (patch_interactive)
304 add_interactive = 1;
builtin-apply.c
+1 -1
@@ -3313,7 +3313,7 @@ int cmd_apply(int argc, const char **argv, const char *unused_prefix)
3313 if (apply_default_whitespace)
3314 parse_whitespace_option(apply_default_whitespace);
3315
3316 - argc = parse_options(argc, argv, builtin_apply_options,
3316 + argc = parse_options(argc, argv, prefix, builtin_apply_options,
3317 apply_usage, 0);
3318 fake_ancestor = parse_options_fix_filename(prefix, fake_ancestor);
3319 if (fake_ancestor)
builtin-archive.c
+2 -1
@@ -80,7 +80,8 @@ int cmd_archive(int argc, const char **argv, const char *prefix)
80 OPT_END()
81 };
82
83 - argc = parse_options(argc, argv, local_opts, NULL, PARSE_OPT_KEEP_ALL);
83 + argc = parse_options(argc, argv, prefix, local_opts, NULL,
84 + PARSE_OPT_KEEP_ALL);
85
86 if (output)
87 create_output_file(output);
builtin-bisect--helper.c
+2 -1
@@ -17,7 +17,8 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
17 OPT_END()
18 };
19
20 - argc = parse_options(argc, argv, options, git_bisect_helper_usage, 0);
20 + argc = parse_options(argc, argv, prefix, options,
21 + git_bisect_helper_usage, 0);
22
23 if (!next_all)
24 usage_with_options(git_bisect_helper_usage, options);
builtin-blame.c
+1 -1
@@ -2229,7 +2229,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
2229 save_commit_buffer = 0;
2230 dashdash_pos = 0;
2231
2232 - parse_options_start(&ctx, argc, argv, PARSE_OPT_KEEP_DASHDASH |
2232 + parse_options_start(&ctx, argc, argv, prefix, PARSE_OPT_KEEP_DASHDASH |
2233 PARSE_OPT_KEEP_ARGV0);
2234 for (;;) {
2235 switch (parse_options_step(&ctx, options, blame_opt_usage)) {
builtin-branch.c
+2 -1
@@ -610,7 +610,8 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
610 }
611 hashcpy(merge_filter_ref, head_sha1);
612
613 - argc = parse_options(argc, argv, options, builtin_branch_usage, 0);
613 + argc = parse_options(argc, argv, prefix, options, builtin_branch_usage,
614 + 0);
615 if (!!delete + !!rename + !!force_create > 1)
616 usage_with_options(builtin_branch_usage, options);
617
builtin-cat-file.c
+1 -1
@@ -231,7 +231,7 @@ int cmd_cat_file(int argc, const char **argv, const char *prefix)
231 if (argc != 3 && argc != 2)
232 usage_with_options(cat_file_usage, options);
233
234 - argc = parse_options(argc, argv, options, cat_file_usage, 0);
234 + argc = parse_options(argc, argv, prefix, options, cat_file_usage, 0);
235
236 if (opt) {
237 if (argc == 1)
builtin-check-attr.c
+2 -2
@@ -69,8 +69,8 @@ int cmd_check_attr(int argc, const char **argv, const char *prefix)
69 int cnt, i, doubledash;
70 const char *errstr = NULL;
71
72 - argc = parse_options(argc, argv, check_attr_options, check_attr_usage,
73 - PARSE_OPT_KEEP_DASHDASH);
72 + argc = parse_options(argc, argv, prefix, check_attr_options,
73 + check_attr_usage, PARSE_OPT_KEEP_DASHDASH);
74 if (!argc)
75 usage_with_options(check_attr_usage, check_attr_options);
76
builtin-checkout-index.c
+1 -1
@@ -249,7 +249,7 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)
249 die("invalid cache");
250 }
251
252 - argc = parse_options(argc, argv, builtin_checkout_index_options,
252 + argc = parse_options(argc, argv, prefix, builtin_checkout_index_options,
253 builtin_checkout_index_usage, 0);
254 state.force = force;
255 state.quiet = quiet;
builtin-checkout.c
+1 -1
@@ -605,7 +605,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
605
606 opts.track = BRANCH_TRACK_UNSPECIFIED;
607
608 - argc = parse_options(argc, argv, options, checkout_usage,
608 + argc = parse_options(argc, argv, prefix, options, checkout_usage,
609 PARSE_OPT_KEEP_DASHDASH);
610
611 /* --track without -b should DWIM */
builtin-clean.c
+2 -1
@@ -56,7 +56,8 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
56 else
57 config_set = 1;
58
59 - argc = parse_options(argc, argv, options, builtin_clean_usage, 0);
59 + argc = parse_options(argc, argv, prefix, options, builtin_clean_usage,
60 + 0);
61
62 memset(&dir, 0, sizeof(dir));
63 if (ignored_only)
builtin-clone.c
+1 -1
@@ -360,7 +360,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
360
361 junk_pid = getpid();
362
363 - argc = parse_options(argc, argv, builtin_clone_options,
363 + argc = parse_options(argc, argv, prefix, builtin_clone_options,
364 builtin_clone_usage, 0);
365
366 if (argc == 0)
builtin-commit.c
+2 -1
@@ -697,7 +697,8 @@ static int parse_and_validate_options(int argc, const char *argv[],
697 {
698 int f = 0;
699
700 - argc = parse_options(argc, argv, builtin_commit_options, usage, 0);
700 + argc = parse_options(argc, argv, prefix, builtin_commit_options, usage,
701 + 0);
702 logfile = parse_options_fix_filename(prefix, logfile);
703 if (logfile)
704 logfile = xstrdup(logfile);
builtin-config.c
+2 -1
@@ -316,7 +316,8 @@ int cmd_config(int argc, const char **argv, const char *unused_prefix)
316
317 config_exclusive_filename = getenv(CONFIG_ENVIRONMENT);
318
319 - argc = parse_options(argc, argv, builtin_config_options, builtin_config_usage,
319 + argc = parse_options(argc, argv, prefix, builtin_config_options,
320 + builtin_config_usage,
321 PARSE_OPT_STOP_AT_NON_OPTION);
322
323 if (use_global_config + use_system_config + !!given_config_file > 1) {
builtin-count-objects.c
+1 -1
@@ -83,7 +83,7 @@ int cmd_count_objects(int argc, const char **argv, const char *prefix)
83 OPT_END(),
84 };
85
86 - argc = parse_options(argc, argv, opts, count_objects_usage, 0);
86 + argc = parse_options(argc, argv, prefix, opts, count_objects_usage, 0);
87 /* we do not take arguments other than flags for now */
88 if (argc)
89 usage_with_options(count_objects_usage, opts);
builtin-describe.c
+1 -1
@@ -322,7 +322,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
322 OPT_END(),
323 };
324
325 - argc = parse_options(argc, argv, options, describe_usage, 0);
325 + argc = parse_options(argc, argv, prefix, options, describe_usage, 0);
326 if (max_candidates < 0)
327 max_candidates = 0;
328 else if (max_candidates > MAX_TAGS)
builtin-fast-export.c
+1 -1
@@ -515,7 +515,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
515
516 init_revisions(&revs, prefix);
517 argc = setup_revisions(argc, argv, &revs, NULL);
518 - argc = parse_options(argc, argv, options, fast_export_usage, 0);
518 + argc = parse_options(argc, argv, prefix, options, fast_export_usage, 0);
519 if (argc > 1)
520 usage_with_options (fast_export_usage, options);
521
builtin-fetch.c
+1 -1
@@ -634,7 +634,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
634 for (i = 1; i < argc; i++)
635 strbuf_addf(&default_rla, " %s", argv[i]);
636
637 - argc = parse_options(argc, argv,
637 + argc = parse_options(argc, argv, prefix,
638 builtin_fetch_options, builtin_fetch_usage, 0);
639
640 if (argc == 0)
builtin-fmt-merge-msg.c
+2 -1
@@ -360,7 +360,8 @@ int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix)
360 int ret;
361
362 git_config(fmt_merge_msg_config, NULL);
363 - argc = parse_options(argc, argv, options, fmt_merge_msg_usage, 0);
363 + argc = parse_options(argc, argv, prefix, options, fmt_merge_msg_usage,
364 + 0);
365 if (argc > 0)
366 usage_with_options(fmt_merge_msg_usage, options);
367 inpath = parse_options_fix_filename(prefix, inpath);
builtin-for-each-ref.c
+1 -1
@@ -905,7 +905,7 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
905 OPT_END(),
906 };
907
908 - parse_options(argc, argv, opts, for_each_ref_usage, 0);
908 + parse_options(argc, argv, prefix, opts, for_each_ref_usage, 0);
909 if (maxcount < 0) {
910 error("invalid --count argument: `%d'", maxcount);
911 usage_with_options(for_each_ref_usage, opts);
builtin-fsck.c
+1 -1
@@ -590,7 +590,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
590
591 errors_found = 0;
592
593 - argc = parse_options(argc, argv, fsck_opts, fsck_usage, 0);
593 + argc = parse_options(argc, argv, prefix, fsck_opts, fsck_usage, 0);
594 if (write_lost_and_found) {
595 check_full = 1;
596 include_reflogs = 0;
builtin-gc.c
+2 -1
@@ -194,7 +194,8 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
194 if (pack_refs < 0)
195 pack_refs = !is_bare_repository();
196
197 - argc = parse_options(argc, argv, builtin_gc_options, builtin_gc_usage, 0);
197 + argc = parse_options(argc, argv, prefix, builtin_gc_options,
198 + builtin_gc_usage, 0);
199 if (argc > 0)
200 usage_with_options(builtin_gc_usage, builtin_gc_options);
201
builtin-grep.c
+1 -1
@@ -765,7 +765,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
765 * unrecognized non option is the beginning of the refs list
766 * that continues up to the -- (if exists), and then paths.
767 */
768 - argc = parse_options(argc, argv, options, grep_usage,
768 + argc = parse_options(argc, argv, prefix, options, grep_usage,
769 PARSE_OPT_KEEP_DASHDASH |
770 PARSE_OPT_STOP_AT_NON_OPTION |
771 PARSE_OPT_NO_INTERNAL_HELP);
builtin-help.c
+1 -1
@@ -423,7 +423,7 @@ int cmd_help(int argc, const char **argv, const char *prefix)
423 setup_git_directory_gently(&nongit);
424 git_config(git_help_config, NULL);
425
426 - argc = parse_options(argc, argv, builtin_help_options,
426 + argc = parse_options(argc, argv, prefix, builtin_help_options,
427 builtin_help_usage, 0);
428
429 if (show_all) {
builtin-log.c
+1 -1
@@ -936,7 +936,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
936 * like "git format-patch -o a123 HEAD^.." may fail; a123 is
937 * possibly a valid SHA1.
938 */
939 - argc = parse_options(argc, argv, builtin_format_patch_options,
939 + argc = parse_options(argc, argv, prefix, builtin_format_patch_options,
940 builtin_format_patch_usage,
941 PARSE_OPT_KEEP_ARGV0 | PARSE_OPT_KEEP_UNKNOWN);
942
builtin-ls-files.c
+1 -1
@@ -486,7 +486,7 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix)
486 prefix_offset = strlen(prefix);
487 git_config(git_default_config, NULL);
488
489 - argc = parse_options(argc, argv, builtin_ls_files_options,
489 + argc = parse_options(argc, argv, prefix, builtin_ls_files_options,
490 ls_files_usage, 0);
491 if (show_tag || show_valid_bit) {
492 tag_cached = "H ";
builtin-merge-base.c
+1 -1
@@ -53,7 +53,7 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix)
53 };
54
55 git_config(git_default_config, NULL);
56 - argc = parse_options(argc, argv, options, merge_base_usage, 0);
56 + argc = parse_options(argc, argv, prefix, options, merge_base_usage, 0);
57 if (argc < 2)
58 usage_with_options(merge_base_usage, options);
59 rev = xmalloc(argc * sizeof(*rev));
builtin-merge-file.c
+1 -1
@@ -48,7 +48,7 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
48 merge_style = git_xmerge_style;
49 }
50
51 - argc = parse_options(argc, argv, options, merge_file_usage, 0);
51 + argc = parse_options(argc, argv, prefix, options, merge_file_usage, 0);
52 if (argc != 3)
53 usage_with_options(merge_file_usage, options);
54 if (quiet) {
builtin-merge.c
+2 -2
@@ -462,7 +462,7 @@ static int git_merge_config(const char *k, const char *v, void *cb)
462 argv = xrealloc(argv, sizeof(*argv) * (argc + 2));
463 memmove(argv + 1, argv, sizeof(*argv) * (argc + 1));
464 argc++;
465 - parse_options(argc, argv, builtin_merge_options,
465 + parse_options(argc, argv, NULL, builtin_merge_options,
466 builtin_merge_usage, 0);
467 free(buf);
468 }
@@ -855,7 +855,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
855 if (diff_use_color_default == -1)
856 diff_use_color_default = git_use_color_default;
857
858 - argc = parse_options(argc, argv, builtin_merge_options,
858 + argc = parse_options(argc, argv, prefix, builtin_merge_options,
859 builtin_merge_usage, 0);
860 if (verbosity < 0)
861 show_diffstat = 0;
builtin-mktree.c
+1 -1
@@ -155,7 +155,7 @@ int cmd_mktree(int ac, const char **av, const char *prefix)
155 OPT_END()
156 };
157
158 - ac = parse_options(ac, av, option, mktree_usage, 0);
158 + ac = parse_options(ac, av, prefix, option, mktree_usage, 0);
159
160 while (!got_eof) {
161 while (1) {
builtin-mv.c
+2 -1
@@ -72,7 +72,8 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
72 if (read_cache() < 0)
73 die("index file corrupt");
74
75 - argc = parse_options(argc, argv, builtin_mv_options, builtin_mv_usage, 0);
75 + argc = parse_options(argc, argv, prefix, builtin_mv_options,
76 + builtin_mv_usage, 0);
77 if (--argc < 1)
78 usage_with_options(builtin_mv_usage, builtin_mv_options);
79
builtin-name-rev.c
+1 -1
@@ -238,7 +238,7 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)
238 };
239
240 git_config(git_default_config, NULL);
241 - argc = parse_options(argc, argv, opts, name_rev_usage, 0);
241 + argc = parse_options(argc, argv, prefix, opts, name_rev_usage, 0);
242 if (!!all + !!transform_stdin + !!argc > 1) {
243 error("Specify either a list, or --all, not both!");
244 usage_with_options(name_rev_usage, opts);
builtin-pack-refs.c
+1 -1
@@ -15,7 +15,7 @@ int cmd_pack_refs(int argc, const char **argv, const char *prefix)
15 OPT_BIT(0, "prune", &flags, "prune loose refs (default)", PACK_REFS_PRUNE),
16 OPT_END(),
17 };
18 - if (parse_options(argc, argv, opts, pack_refs_usage, 0))
18 + if (parse_options(argc, argv, prefix, opts, pack_refs_usage, 0))
19 usage_with_options(pack_refs_usage, opts);
20 return pack_refs(flags);
21 }
builtin-prune.c
+1 -1
@@ -142,7 +142,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
142 save_commit_buffer = 0;
143 init_revisions(&revs, prefix);
144
145 - argc = parse_options(argc, argv, options, prune_usage, 0);
145 + argc = parse_options(argc, argv, prefix, options, prune_usage, 0);
146 while (argc--) {
147 unsigned char sha1[20];
148 const char *name = *argv++;
builtin-push.c
+1 -1
@@ -198,7 +198,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
198 OPT_END()
199 };
200
201 - argc = parse_options(argc, argv, options, push_usage, 0);
201 + argc = parse_options(argc, argv, prefix, options, push_usage, 0);
202
203 if (tags)
204 add_refspec("refs/tags/*");
builtin-remote.c
+10 -6
@@ -79,7 +79,8 @@ static int add(int argc, const char **argv)
79 OPT_END()
80 };
81
82 - argc = parse_options(argc, argv, options, builtin_remote_usage, 0);
82 + argc = parse_options(argc, argv, NULL, options, builtin_remote_usage,
83 + 0);
84
85 if (argc < 2)
86 usage_with_options(builtin_remote_usage, options);
@@ -986,7 +987,8 @@ static int show(int argc, const char **argv)
987 struct string_list info_list = { NULL, 0, 0, 0 };
988 struct show_info info;
989
989 - argc = parse_options(argc, argv, options, builtin_remote_usage, 0);
990 + argc = parse_options(argc, argv, NULL, options, builtin_remote_usage,
991 + 0);
992
993 if (argc < 1)
994 return show_all();
@@ -1076,7 +1078,8 @@ static int set_head(int argc, const char **argv)
1078 "delete refs/remotes/<name>/HEAD"),
1079 OPT_END()
1080 };
1079 - argc = parse_options(argc, argv, options, builtin_remote_usage, 0);
1081 + argc = parse_options(argc, argv, NULL, options, builtin_remote_usage,
1082 + 0);
1083 if (argc)
1084 strbuf_addf(&buf, "refs/remotes/%s/HEAD", argv[0]);
1085
@@ -1130,7 +1133,8 @@ static int prune(int argc, const char **argv)
1133 OPT_END()
1134 };
1135
1133 - argc = parse_options(argc, argv, options, builtin_remote_usage, 0);
1136 + argc = parse_options(argc, argv, NULL, options, builtin_remote_usage,
1137 + 0);
1138
1139 if (argc < 1)
1140 usage_with_options(builtin_remote_usage, options);
@@ -1220,7 +1224,7 @@ static int update(int argc, const char **argv)
1224 OPT_END()
1225 };
1226
1223 - argc = parse_options(argc, argv, options, builtin_remote_usage,
1227 + argc = parse_options(argc, argv, NULL, options, builtin_remote_usage,
1228 PARSE_OPT_KEEP_ARGV0);
1229 if (argc < 2) {
1230 argc = 2;
@@ -1306,7 +1310,7 @@ int cmd_remote(int argc, const char **argv, const char *prefix)
1310 };
1311 int result;
1312
1309 - argc = parse_options(argc, argv, options, builtin_remote_usage,
1313 + argc = parse_options(argc, argv, prefix, options, builtin_remote_usage,
1314 PARSE_OPT_STOP_AT_NON_OPTION);
1315
1316 if (argc < 1)
builtin-reset.c
+1 -1
@@ -203,7 +203,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
203
204 git_config(git_default_config, NULL);
205
206 - argc = parse_options(argc, argv, options, git_reset_usage,
206 + argc = parse_options(argc, argv, prefix, options, git_reset_usage,
207 PARSE_OPT_KEEP_DASHDASH);
208 reflog_action = args_to_str(argv);
209 setenv("GIT_REFLOG_ACTION", reflog_action, 0);
builtin-rev-parse.c
+2 -2
@@ -318,7 +318,7 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix)
318 int onb = 0, osz = 0, unb = 0, usz = 0;
319
320 strbuf_addstr(&parsed, "set --");
321 - argc = parse_options(argc, argv, parseopt_opts, parseopt_usage,
321 + argc = parse_options(argc, argv, prefix, parseopt_opts, parseopt_usage,
322 PARSE_OPT_KEEP_DASHDASH);
323 if (argc < 1 || strcmp(argv[0], "--"))
324 usage_with_options(parseopt_usage, parseopt_opts);
@@ -393,7 +393,7 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix)
393 /* put an OPT_END() */
394 ALLOC_GROW(opts, onb + 1, osz);
395 memset(opts + onb, 0, sizeof(opts[onb]));
396 - argc = parse_options(argc, argv, opts, usage,
396 + argc = parse_options(argc, argv, prefix, opts, usage,
397 keep_dashdash ? PARSE_OPT_KEEP_DASHDASH : 0);
398
399 strbuf_addf(&parsed, " --");
builtin-revert.c
+1 -1
@@ -60,7 +60,7 @@ static void parse_args(int argc, const char **argv)
60 OPT_END(),
61 };
62
63 - if (parse_options(argc, argv, options, usage_str, 0) != 1)
63 + if (parse_options(argc, argv, NULL, options, usage_str, 0) != 1)
64 usage_with_options(usage_str, options);
65 arg = argv[0];
66
builtin-rm.c
+2 -1
@@ -157,7 +157,8 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
157
158 git_config(git_default_config, NULL);
159
160 - argc = parse_options(argc, argv, builtin_rm_options, builtin_rm_usage, 0);
160 + argc = parse_options(argc, argv, prefix, builtin_rm_options,
161 + builtin_rm_usage, 0);
162 if (!argc)
163 usage_with_options(builtin_rm_usage, builtin_rm_options);
164
builtin-shortlog.c
+1 -1
@@ -263,7 +263,7 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
263 git_config(git_default_config, NULL);
264 shortlog_init(&log);
265 init_revisions(&rev, prefix);
266 - parse_options_start(&ctx, argc, argv, PARSE_OPT_KEEP_DASHDASH |
266 + parse_options_start(&ctx, argc, argv, prefix, PARSE_OPT_KEEP_DASHDASH |
267 PARSE_OPT_KEEP_ARGV0);
268
269 for (;;) {
builtin-show-branch.c
+1 -1
@@ -697,7 +697,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)
697 av = default_arg - 1; /* ick; we would not address av[0] */
698 }
699
700 - ac = parse_options(ac, av, builtin_show_branch_options,
700 + ac = parse_options(ac, av, prefix, builtin_show_branch_options,
701 show_branch_usage, PARSE_OPT_STOP_AT_NON_OPTION);
702 if (all_heads)
703 all_remotes = 1;
builtin-symbolic-ref.c
+2 -1
@@ -36,7 +36,8 @@ int cmd_symbolic_ref(int argc, const char **argv, const char *prefix)
36 };
37
38 git_config(git_default_config, NULL);
39 - argc = parse_options(argc, argv, options, git_symbolic_ref_usage, 0);
39 + argc = parse_options(argc, argv, prefix, options,
40 + git_symbolic_ref_usage, 0);
41 if (msg &&!*msg)
42 die("Refusing to perform update with empty message");
43 switch (argc) {
builtin-tag.c
+1 -1
@@ -405,7 +405,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
405
406 git_config(git_tag_config, NULL);
407
408 - argc = parse_options(argc, argv, options, git_tag_usage, 0);
408 + argc = parse_options(argc, argv, prefix, options, git_tag_usage, 0);
409 msgfile = parse_options_fix_filename(prefix, msgfile);
410
411 if (keyid) {
builtin-update-ref.c
+2 -1
@@ -23,7 +23,8 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)
23 };
24
25 git_config(git_default_config, NULL);
26 - argc = parse_options(argc, argv, options, git_update_ref_usage, 0);
26 + argc = parse_options(argc, argv, prefix, options, git_update_ref_usage,
27 + 0);
28 if (msg && !*msg)
29 die("Refusing to perform update with empty message.");
30
hash-object.c
+2 -1
@@ -84,7 +84,8 @@ int main(int argc, const char **argv)
84
85 git_extract_argv0_path(argv[0]);
86
87 - argc = parse_options(argc, argv, hash_object_options, hash_object_usage, 0);
87 + argc = parse_options(argc, argv, NULL, hash_object_options,
88 + hash_object_usage, 0);
89
90 if (write_object) {
91 prefix = setup_git_directory();
parse-options.c
+7 -4
@@ -285,12 +285,14 @@ static void check_typos(const char *arg, const struct option *options)
285 }
286
287 void parse_options_start(struct parse_opt_ctx_t *ctx,
288 - int argc, const char **argv, int flags)
288 + int argc, const char **argv, const char *prefix,
289 + int flags)
290 {
291 memset(ctx, 0, sizeof(*ctx));
292 ctx->argc = argc - 1;
293 ctx->argv = argv + 1;
294 ctx->out = argv;
295 + ctx->prefix = prefix;
296 ctx->cpidx = ((flags & PARSE_OPT_KEEP_ARGV0) != 0);
297 ctx->flags = flags;
298 if ((flags & PARSE_OPT_KEEP_UNKNOWN) &&
@@ -389,12 +391,13 @@ int parse_options_end(struct parse_opt_ctx_t *ctx)
391 return ctx->cpidx + ctx->argc;
392 }
393
392 -int parse_options(int argc, const char **argv, const struct option *options,
393 - const char * const usagestr[], int flags)
394 +int parse_options(int argc, const char **argv, const char *prefix,
395 + const struct option *options, const char * const usagestr[],
396 + int flags)
397 {
398 struct parse_opt_ctx_t ctx;
399
397 - parse_options_start(&ctx, argc, argv, flags);
400 + parse_options_start(&ctx, argc, argv, prefix, flags);
401 switch (parse_options_step(&ctx, options, usagestr)) {
402 case PARSE_OPT_HELP:
403 exit(129);
parse-options.h
+4 -2
@@ -122,7 +122,7 @@ struct option {
122 * non-option arguments in argv[].
123 * Returns the number of arguments left in argv[].
124 */
125 -extern int parse_options(int argc, const char **argv,
125 +extern int parse_options(int argc, const char **argv, const char *prefix,
126 const struct option *options,
127 const char * const usagestr[], int flags);
128
@@ -148,13 +148,15 @@ struct parse_opt_ctx_t {
148 int argc, cpidx;
149 const char *opt;
150 int flags;
151 + const char *prefix;
152 };
153
154 extern int parse_options_usage(const char * const *usagestr,
155 const struct option *opts);
156
157 extern void parse_options_start(struct parse_opt_ctx_t *ctx,
157 - int argc, const char **argv, int flags);
158 + int argc, const char **argv, const char *prefix,
159 + int flags);
160
161 extern int parse_options_step(struct parse_opt_ctx_t *ctx,
162 const struct option *options,
test-parse-options.c
+1 -1
@@ -65,7 +65,7 @@ int main(int argc, const char **argv)
65 };
66 int i;
67
68 - argc = parse_options(argc, argv, options, usage, 0);
68 + argc = parse_options(argc, argv, NULL, options, usage, 0);
69
70 printf("boolean: %d\n", boolean);
71 printf("integer: %u\n", integer);