From a2f8028d3d661b314d5a784764f2f5f9e4c2dde0 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Sun, 1 Jul 2007 22:51:58 +0100 Subject: 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 --- git.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'git.c') 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); -- cgit v1.2.1