summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 0daed41)
raw | patch | inline | side by side (parent: 0daed41)
author | Michael J Gruber <git@drmicha.warpmail.net> | |
Wed, 27 Apr 2011 08:36:27 +0000 (10:36 +0200) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Wed, 27 Apr 2011 17:50:05 +0000 (10:50 -0700) |
Provide an environment variable GIT_PREFIX which contains the subdirectory
from which a !alias was called (i.e. 'git rev-parse --show-prefix') since
these cd to the to level directory before they are executed.
Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
from which a !alias was called (i.e. 'git rev-parse --show-prefix') since
these cd to the to level directory before they are executed.
Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config.txt | patch | blob | history | |
git.c | patch | blob | history | |
t/t1020-subdirectory.sh | patch | blob | history |
index 750c86d4f51b256faac1b1b5eb26275384d87886..66281dd6bdb5d3d8d7bec675d01a833c9489748a 100644 (file)
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
"gitk --all --not ORIG_HEAD". Note that shell commands will be
executed from the top-level directory of a repository, which may
not necessarily be the current directory.
+'GIT_PREFIX' is set as returned by running 'git rev-parse --show-prefix'
+from the original current directory. See linkgit:git-rev-parse[1].
am.keepcr::
If true, git-am will call git-mailsplit for patches in mbox format
index ef598c3e7053b8dd2859f4d582ce2917a804fe42..ed899512f9c4220f7d7a2b9e28e1a0eb23c06b8c 100644 (file)
--- a/git.c
+++ b/git.c
if (alias_string[0] == '!') {
const char **alias_argv;
int argc = *argcp, i;
+ struct strbuf sb = STRBUF_INIT;
+ const char *env[2];
commit_pager_choice();
alias_argv[i] = (*argv)[i];
alias_argv[argc] = NULL;
- ret = run_command_v_opt(alias_argv, RUN_USING_SHELL);
+ strbuf_addstr(&sb, "GIT_PREFIX=");
+ if (subdir)
+ strbuf_addstr(&sb, subdir);
+ env[0] = sb.buf;
+ env[1] = NULL;
+ ret = run_command_v_opt_cd_env(alias_argv, RUN_USING_SHELL, NULL, env);
+ strbuf_release(&sb);
if (ret >= 0) /* normal exit */
exit(ret);
index 66e40d38a309e2f3f7198954ca6cf995c65981d3..ddc3921ac6a009dfc706cd19ad94f2b29af4b1cc 100755 (executable)
--- a/t/t1020-subdirectory.sh
+++ b/t/t1020-subdirectory.sh
test_cmp expect actual
'
+test_expect_success 'GIT_PREFIX for !alias' '
+ printf "dir/" >expect &&
+ (
+ git config alias.test "!sh -c \"printf \$GIT_PREFIX\"" &&
+ cd dir &&
+ git test >../actual
+ ) &&
+ test_cmp expect actual
+'
+
test_expect_success 'no file/rev ambiguity check inside .git' '
git commit -a -m 1 &&
(