Allow aliases to expand to shell commands
If the alias expansion is prefixed with an exclamation point, treat it as a shell command which is run using system(3). Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
f3dd015c91
commit
dfd42a3c62
@ -222,6 +222,12 @@ alias.*::
|
||||
spaces, the usual shell quoting and escaping is supported.
|
||||
quote pair and a backslash can be used to quote them.
|
||||
|
||||
If the alias expansion is prefixed with an exclamation point,
|
||||
it will be treated as a shell command. For example, defining
|
||||
"alias.new = !gitk --all --not ORIG_HEAD", the invocation
|
||||
"git new" is equivalent to running the shell command
|
||||
"gitk --all --not ORIG_HEAD".
|
||||
|
||||
apply.whitespace::
|
||||
Tells `git-apply` how to handle whitespaces, in the same way
|
||||
as the '--whitespace' option. See gitlink:git-apply[1].
|
||||
|
10
git.c
10
git.c
@ -159,6 +159,16 @@ static int handle_alias(int *argcp, const char ***argv)
|
||||
alias_command = (*argv)[0];
|
||||
git_config(git_alias_config);
|
||||
if (alias_string) {
|
||||
if (alias_string[0] == '!') {
|
||||
trace_printf("trace: alias to shell cmd: %s => %s\n",
|
||||
alias_command, alias_string + 1);
|
||||
ret = system(alias_string + 1);
|
||||
if (ret >= 0 && WIFEXITED(ret) &&
|
||||
WEXITSTATUS(ret) != 127)
|
||||
exit(WEXITSTATUS(ret));
|
||||
die("Failed to run '%s' when expanding alias '%s'\n",
|
||||
alias_string + 1, alias_command);
|
||||
}
|
||||
count = split_cmdline(alias_string, &new_argv);
|
||||
option_count = handle_options(&new_argv, &count);
|
||||
memmove(new_argv - option_count, new_argv,
|
||||
|
Loading…
Reference in New Issue
Block a user