diff options
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | 2007-07-01 22:51:58 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-07-02 01:33:44 -0700 |
commit | a2f8028d3d661b314d5a784764f2f5f9e4c2dde0 (patch) | |
tree | 670a4fe52001e3c03cc236facf5f2cc461f409c7 /git.c | |
parent | 7627943a1bb0cda6f37b66381a62facf9e200285 (diff) | |
download | git-a2f8028d3d661b314d5a784764f2f5f9e4c2dde0.tar.gz git-a2f8028d3d661b314d5a784764f2f5f9e4c2dde0.tar.xz |
Make '!' aliases more useful
When an alias starts with an exclamation mark, the rest is interpreted
as a shell command. However, all arguments passed to git used to be
ignored.
Now you can have an alias like
$ git config alias.e '!echo'
and
$ git e Hello World
does what you expect it to do.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git.c')
-rw-r--r-- | git.c | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -181,6 +181,21 @@ static int handle_alias(int *argcp, const char ***argv) git_config(git_alias_config); if (alias_string) { if (alias_string[0] == '!') { + if (*argcp > 1) { + int i, sz = PATH_MAX; + char *s = xmalloc(sz), *new_alias = s; + + add_to_string(&s, &sz, alias_string, 0); + free(alias_string); + alias_string = new_alias; + for (i = 1; i < *argcp && + !add_to_string(&s, &sz, " ", 0) && + !add_to_string(&s, &sz, (*argv)[i], 1) + ; i++) + ; /* do nothing */ + if (!sz) + die("Too many or long arguments"); + } trace_printf("trace: alias to shell cmd: %s => %s\n", alias_command, alias_string + 1); ret = system(alias_string + 1); |