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>
This commit is contained in:
Johannes Schindelin 2007-07-01 22:51:58 +01:00 коммит произвёл Junio C Hamano
Родитель 7627943a1b
Коммит a2f8028d3d
1 изменённых файлов: 15 добавлений и 0 удалений

15
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);