Skip to content

Commit 54ef767

Browse files
szedergitster
authored andcommitted
builtin/notes.c: let parse-options parse subcommands
'git notes' parses its subcommands with a long list of if-else if statements. parse-options has just learned to parse subcommands, so let's use that facility instead, with the benefits of shorter code, handling unknown subcommands, and listing subcommands for Bash completion. Make sure that the default operation mode doesn't accept any arguments. Signed-off-by: SZEDER Gábor <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent bf0a6b6 commit 54ef767

File tree

1 file changed

+17
-26
lines changed

1 file changed

+17
-26
lines changed

builtin/notes.c

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -994,17 +994,31 @@ static int get_ref(int argc, const char **argv, const char *prefix)
994994

995995
int cmd_notes(int argc, const char **argv, const char *prefix)
996996
{
997-
int result;
998997
const char *override_notes_ref = NULL;
998+
parse_opt_subcommand_fn *fn = list;
999999
struct option options[] = {
10001000
OPT_STRING(0, "ref", &override_notes_ref, N_("notes-ref"),
10011001
N_("use notes from <notes-ref>")),
1002+
OPT_SUBCOMMAND("list", &fn, list),
1003+
OPT_SUBCOMMAND("add", &fn, add),
1004+
OPT_SUBCOMMAND("copy", &fn, copy),
1005+
OPT_SUBCOMMAND("append", &fn, append_edit),
1006+
OPT_SUBCOMMAND("edit", &fn, append_edit),
1007+
OPT_SUBCOMMAND("show", &fn, show),
1008+
OPT_SUBCOMMAND("merge", &fn, merge),
1009+
OPT_SUBCOMMAND("remove", &fn, remove_cmd),
1010+
OPT_SUBCOMMAND("prune", &fn, prune),
1011+
OPT_SUBCOMMAND("get-ref", &fn, get_ref),
10021012
OPT_END()
10031013
};
10041014

10051015
git_config(git_default_config, NULL);
10061016
argc = parse_options(argc, argv, prefix, options, git_notes_usage,
1007-
PARSE_OPT_STOP_AT_NON_OPTION);
1017+
PARSE_OPT_SUBCOMMAND_OPTIONAL);
1018+
if (fn == list && argc && strcmp(argv[0], "list")) {
1019+
error(_("unknown subcommand: %s"), argv[0]);
1020+
usage_with_options(git_notes_usage, options);
1021+
}
10081022

10091023
if (override_notes_ref) {
10101024
struct strbuf sb = STRBUF_INIT;
@@ -1014,28 +1028,5 @@ int cmd_notes(int argc, const char **argv, const char *prefix)
10141028
strbuf_release(&sb);
10151029
}
10161030

1017-
if (argc < 1 || !strcmp(argv[0], "list"))
1018-
result = list(argc, argv, prefix);
1019-
else if (!strcmp(argv[0], "add"))
1020-
result = add(argc, argv, prefix);
1021-
else if (!strcmp(argv[0], "copy"))
1022-
result = copy(argc, argv, prefix);
1023-
else if (!strcmp(argv[0], "append") || !strcmp(argv[0], "edit"))
1024-
result = append_edit(argc, argv, prefix);
1025-
else if (!strcmp(argv[0], "show"))
1026-
result = show(argc, argv, prefix);
1027-
else if (!strcmp(argv[0], "merge"))
1028-
result = merge(argc, argv, prefix);
1029-
else if (!strcmp(argv[0], "remove"))
1030-
result = remove_cmd(argc, argv, prefix);
1031-
else if (!strcmp(argv[0], "prune"))
1032-
result = prune(argc, argv, prefix);
1033-
else if (!strcmp(argv[0], "get-ref"))
1034-
result = get_ref(argc, argv, prefix);
1035-
else {
1036-
result = error(_("unknown subcommand: %s"), argv[0]);
1037-
usage_with_options(git_notes_usage, options);
1038-
}
1039-
1040-
return result ? 1 : 0;
1031+
return !!fn(argc, argv, prefix);
10411032
}

0 commit comments

Comments
 (0)