From: Johannes Schindelin Date: Sun, 1 Jul 2007 21:51:58 +0000 (+0100) Subject: Make '!' aliases more useful X-Git-Tag: v1.5.3-rc0~17 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=a2f8028d3d661b314d5a784764f2f5f9e4c2dde0;p=git.git 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 Signed-off-by: Junio C Hamano --- diff --git a/git.c b/git.c index 696a97edc..727aabcbb 100644 --- a/git.c +++ b/git.c @@ -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);