From: David Aguilar Date: Sun, 22 May 2011 09:57:07 GMT Subject: [PATCH 1/3] setup: Provide GIT_PREFIX to built-ins Message-ID: <1306058229-93800-1-git-send-email-davvid@gmail.com> In-Reply-To: <7vwrhjxn4t.fsf@alter.siamese.dyndns.org> 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. Signed-off-by: David Aguilar --- setup.c | 6 ++++++ t/t1020-subdirectory.sh | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 0 deletions(-) diff --git a/setup.c b/setup.c index b6e6b5a..fc169a4 100644 --- a/setup.c +++ b/setup.c @@ -603,6 +603,12 @@ const char *setup_git_directory_gently(int *nongit_ok) const char *prefix; prefix = setup_git_directory_gently_1(nongit_ok); + /* Provide the prefix to all external processes and programs */ + if (prefix) + setenv("GIT_PREFIX", prefix, 1); + else + unsetenv("GIT_PREFIX"); + 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 ddc3921..a85b594 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\"\n" >>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 && ( -- 1.7.5.2.317.g391b14