diff options
author | David Aguilar <davvid@gmail.com> | 2011-05-25 20:37:12 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-05-26 15:05:33 -0700 |
commit | 1f5d271f5e8f7b1e2a5b296ff43ca4087eb08244 (patch) | |
tree | 9cb79cbbee8e285be1220665b44b5fb6be24ac59 | |
parent | 7cf16a14f5c070f7b14cf28023769450133172ae (diff) | |
download | git-1f5d271f5e8f7b1e2a5b296ff43ca4087eb08244.tar.gz |
setup: Provide GIT_PREFIX to built-ins
GIT_PREFIX was added in 7cf16a14f5c070f7b14cf28023769450133172ae so that
aliases can know the directory from which a !alias was called.
Knowing the prefix relative to the root is helpful in other programs
so export it to built-ins as well.
Helped-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | setup.c | 5 | ||||
-rwxr-xr-x | t/t1020-subdirectory.sh | 16 |
2 files changed, 21 insertions, 0 deletions
@@ -602,6 +602,11 @@ const char *setup_git_directory_gently(int *nongit_ok) const char *prefix; prefix = setup_git_directory_gently_1(nongit_ok); + if (prefix) + setenv("GIT_PREFIX", prefix, 1); + else + setenv("GIT_PREFIX", "", 1); + if (startup_info) { startup_info->have_repository = !nongit_ok || !*nongit_ok; startup_info->prefix = prefix; diff --git a/t/t1020-subdirectory.sh b/t/t1020-subdirectory.sh index ddc3921ac6..3c7448026d 100755 --- a/t/t1020-subdirectory.sh +++ b/t/t1020-subdirectory.sh @@ -139,6 +139,22 @@ test_expect_success 'GIT_PREFIX for !alias' ' test_cmp expect actual ' +test_expect_success 'GIT_PREFIX for built-ins' ' + # Use GIT_EXTERNAL_DIFF to test that the "diff" built-in + # receives the GIT_PREFIX variable. + printf "dir/" >expect && + printf "#!/bin/sh\n" >diff && + printf "printf \"\$GIT_PREFIX\"" >>diff && + chmod +x diff && + ( + cd dir && + printf "change" >two && + env GIT_EXTERNAL_DIFF=./diff git diff >../actual + git checkout -- two + ) && + test_cmp expect actual +' + test_expect_success 'no file/rev ambiguity check inside .git' ' git commit -a -m 1 && ( |