summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: f3dd015)
raw | patch | inline | side by side (parent: f3dd015)
author | Theodore Ts'o <tytso@mit.edu> | |
Sun, 11 Feb 2007 00:33:58 +0000 (19:33 -0500) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Sun, 11 Feb 2007 06:46:34 +0000 (22:46 -0800) |
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>
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>
Documentation/config.txt | patch | blob | history | |
git.c | patch | blob | history |
index 4e650af01af9e0c528805b472e6970e5e24322e4..0129b1fd69ff4b8a82c09b5fc10fb7a999da919f 100644 (file)
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
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].
index c43d4ff1fdf6c056af1b5569079ad9090df564c8..45265f14d0cc225dedcae84b7e2ef5700b966f20 100644 (file)
--- a/git.c
+++ b/git.c
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,