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>
This commit is contained in:
parent
7627943a1b
commit
a2f8028d3d
15
git.c
15
git.c
@ -181,6 +181,21 @@ static int handle_alias(int *argcp, const char ***argv)
|
|||||||
git_config(git_alias_config);
|
git_config(git_alias_config);
|
||||||
if (alias_string) {
|
if (alias_string) {
|
||||||
if (alias_string[0] == '!') {
|
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",
|
trace_printf("trace: alias to shell cmd: %s => %s\n",
|
||||||
alias_command, alias_string + 1);
|
alias_command, alias_string + 1);
|
||||||
ret = system(alias_string + 1);
|
ret = system(alias_string + 1);
|
||||||
|
Loading…
Reference in New Issue
Block a user