Message ID | 20181001112107.28956-2-rv@rasmusvillemoes.dk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2,1/3] help: redirect to aliased commands for "git cmd --help" | expand |
On Mon, Oct 01, 2018 at 01:21:06PM +0200, Rasmus Villemoes wrote: > Most git commands respond to -h anywhere in the command line, or at > least as a first and lone argument, by printing the usage > information. For aliases, we can provide a little more information that > might be useful in interpreting/understanding the following output by > prepending a line telling that the command is an alias, and for what. > > When one invokes a simple alias, such as "cp = cherry-pick" > with -h, this results in > > $ git cp -h > 'cp' is aliased to 'cherry-pick' > usage: git cherry-pick [<options>] <commit-ish>... > ... > > When the alias consists of more than one word, this provides the > additional benefit of informing the user which options are implicit in > using the alias, e.g. with "cp = cherry-pick -n": > > $ git cp -h > 'cp' is aliased to 'cherry-pick -n' > usage: git cherry-pick [<options>] <commit-ish>... > ... > > For shell commands, we cannot know how it responds to -h, but printing > this line to stderr should not hurt, and can help in figuring out what > is happening in a case like > > $ git sc -h > 'sc' is aliased to '!somecommand' > somecommand: invalid option '-h' Nicely explained. > diff --git a/git.c b/git.c > index a6f4b44af5..0211c2d4c0 100644 > --- a/git.c > +++ b/git.c > @@ -318,6 +318,9 @@ static int handle_alias(int *argcp, const char ***argv) > alias_command = (*argv)[0]; > alias_string = alias_lookup(alias_command); > if (alias_string) { > + if (*argcp > 1 && !strcmp((*argv)[1], "-h")) > + fprintf_ln(stderr, _("'%s' is aliased to '%s'"), > + alias_command, alias_string); > if (alias_string[0] == '!') { > struct child_process child = CHILD_PROCESS_INIT; > int nongit_ok; And the implementation makes sense. -Peff
diff --git a/git.c b/git.c index a6f4b44af5..0211c2d4c0 100644 --- a/git.c +++ b/git.c @@ -318,6 +318,9 @@ static int handle_alias(int *argcp, const char ***argv) alias_command = (*argv)[0]; alias_string = alias_lookup(alias_command); if (alias_string) { + if (*argcp > 1 && !strcmp((*argv)[1], "-h")) + fprintf_ln(stderr, _("'%s' is aliased to '%s'"), + alias_command, alias_string); if (alias_string[0] == '!') { struct child_process child = CHILD_PROCESS_INIT; int nongit_ok;
Most git commands respond to -h anywhere in the command line, or at least as a first and lone argument, by printing the usage information. For aliases, we can provide a little more information that might be useful in interpreting/understanding the following output by prepending a line telling that the command is an alias, and for what. When one invokes a simple alias, such as "cp = cherry-pick" with -h, this results in $ git cp -h 'cp' is aliased to 'cherry-pick' usage: git cherry-pick [<options>] <commit-ish>... ... When the alias consists of more than one word, this provides the additional benefit of informing the user which options are implicit in using the alias, e.g. with "cp = cherry-pick -n": $ git cp -h 'cp' is aliased to 'cherry-pick -n' usage: git cherry-pick [<options>] <commit-ish>... ... For shell commands, we cannot know how it responds to -h, but printing this line to stderr should not hurt, and can help in figuring out what is happening in a case like $ git sc -h 'sc' is aliased to '!somecommand' somecommand: invalid option '-h' Suggested-by: Jeff King <peff@peff.net> Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk> --- git.c | 3 +++ 1 file changed, 3 insertions(+)