diff options
author | Theodore Ts'o <tytso@mit.edu> | 2007-02-10 19:33:58 -0500 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-02-10 22:46:34 -0800 |
commit | dfd42a3c6281275b518f10938dcd858558cd82e3 (patch) | |
tree | de0831a6b88036f483f0d7ae9df04cdf56f55554 /git.c | |
parent | Print a sane error message if an alias expands to an invalid git command (diff) | |
download | tgif-dfd42a3c6281275b518f10938dcd858558cd82e3.tar.xz |
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>
Diffstat (limited to 'git.c')
-rw-r--r-- | git.c | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -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, |