cat-file: make the options mutually exclusive

We only parse the options if 2 or 3 arguments are specified. Update 'struct option options[]' to use OPT_CMDMODE rather than OPT_SET_INT to allow only one mutually exclusive option and avoid the need for checking number of arguments. This was written by Junio C Hamano, tested by me. Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Karthik Nayak committed May 3, 2015 at 20:00 UTC b48158ac94cf725834b70b4a5ab7f2d152a741d4
1 file changed +5 -8
builtin/cat-file.c
+5 -8
@@ -362,12 +362,12 @@ int cmd_cat_file(int argc, const char **argv, const char *prefix)
362
363 const struct option options[] = {
364 OPT_GROUP(N_("<type> can be one of: blob, tree, commit, tag")),
365 - OPT_SET_INT('t', NULL, &opt, N_("show object type"), 't'),
366 - OPT_SET_INT('s', NULL, &opt, N_("show object size"), 's'),
367 - OPT_SET_INT('e', NULL, &opt,
365 + OPT_CMDMODE('t', NULL, &opt, N_("show object type"), 't'),
366 + OPT_CMDMODE('s', NULL, &opt, N_("show object size"), 's'),
367 + OPT_CMDMODE('e', NULL, &opt,
368 N_("exit with zero when there's no error"), 'e'),
369 - OPT_SET_INT('p', NULL, &opt, N_("pretty-print object's content"), 'p'),
370 - OPT_SET_INT(0, "textconv", &opt,
369 + OPT_CMDMODE('p', NULL, &opt, N_("pretty-print object's content"), 'p'),
370 + OPT_CMDMODE(0, "textconv", &opt,
371 N_("for blob objects, run textconv on object's content"), 'c'),
372 { OPTION_CALLBACK, 0, "batch", &batch, "format",
373 N_("show info and content of objects fed from the standard input"),
@@ -380,9 +380,6 @@ int cmd_cat_file(int argc, const char **argv, const char *prefix)
380
381 git_config(git_cat_file_config, NULL);
382
383 - if (argc != 3 && argc != 2)
384 - usage_with_options(cat_file_usage, options);
385 -
383 argc = parse_options(argc, argv, prefix, options, cat_file_usage, 0);
384
385 if (opt) {