Browse Source

git.c: convert --list-* to --list-cmds=*

Even if these are hidden options, let's make them a bit more generic
since we're introducing more listing types shortly. The code is
structured to allow combining multiple listing types together because
we will soon add more types the 'builtins'.

'parseopt' remains separate because it has separate (SPC) to match
git-completion.bash needs and will not combine with others.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Nguyễn Thái Ngọc Duy 7 years ago committed by Junio C Hamano
parent
commit
0089521cac
  1. 6
      Documentation/git.txt
  2. 2
      contrib/completion/git-completion.bash
  3. 37
      git.c
  4. 2
      t/t0012-help.sh

6
Documentation/git.txt

@ -163,6 +163,12 @@ foo.bar= ...`) sets `foo.bar` to the empty string which `git config @@ -163,6 +163,12 @@ foo.bar= ...`) sets `foo.bar` to the empty string which `git config
Do not perform optional operations that require locks. This is
equivalent to setting the `GIT_OPTIONAL_LOCKS` to `0`.

--list-cmds=group[,group...]::
List commands by group. This is an internal/experimental
option and may change or be removed in the future. Supported
groups are: builtins, parseopt (builtin commands that use
parse-options).

GIT COMMANDS
------------


2
contrib/completion/git-completion.bash

@ -3049,7 +3049,7 @@ __git_complete_common () { @@ -3049,7 +3049,7 @@ __git_complete_common () {
__git_cmds_with_parseopt_helper=
__git_support_parseopt_helper () {
test -n "$__git_cmds_with_parseopt_helper" ||
__git_cmds_with_parseopt_helper="$(__git --list-parseopt-builtins)"
__git_cmds_with_parseopt_helper="$(__git --list-cmds=parseopt)"

case " $__git_cmds_with_parseopt_helper " in
*" $1 "*)

37
git.c

@ -38,6 +38,30 @@ static int use_pager = -1; @@ -38,6 +38,30 @@ static int use_pager = -1;

static void list_builtins(unsigned int exclude_option, char sep);

static int match_token(const char *spec, int len, const char *token)
{
int token_len = strlen(token);

return len == token_len && !strncmp(spec, token, token_len);
}

static int list_cmds(const char *spec)
{
while (*spec) {
const char *sep = strchrnul(spec, ',');
int len = sep - spec;

if (match_token(spec, len, "builtins"))
list_builtins(0, '\n');
else
die(_("unsupported command listing type '%s'"), spec);
spec += len;
if (*spec == ',')
spec++;
}
return 0;
}

static void commit_pager_choice(void) {
switch (use_pager) {
case 0:
@ -223,12 +247,13 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) @@ -223,12 +247,13 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
}
(*argv)++;
(*argc)--;
} else if (!strcmp(cmd, "--list-builtins")) {
list_builtins(0, '\n');
exit(0);
} else if (!strcmp(cmd, "--list-parseopt-builtins")) {
list_builtins(NO_PARSEOPT, ' ');
exit(0);
} else if (skip_prefix(cmd, "--list-cmds=", &cmd)) {
if (!strcmp(cmd, "parseopt")) {
list_builtins(NO_PARSEOPT, ' ');
exit(0);
} else {
exit(list_cmds(cmd));
}
} else {
fprintf(stderr, _("unknown option: %s\n"), cmd);
usage(git_usage_string);

2
t/t0012-help.sh

@ -59,7 +59,7 @@ test_expect_success 'git help' ' @@ -59,7 +59,7 @@ test_expect_success 'git help' '
'

test_expect_success 'generate builtin list' '
git --list-builtins >builtins
git --list-cmds=builtins >builtins
'

while read builtin

Loading…
Cancel
Save