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>

David Aguilar committed May 25, 2011 at 20:37 UTC 1f5d271f5e8f7b1e2a5b296ff43ca4087eb08244
2 files changed +21
setup.c
+5
@@ -602,6 +602,11 @@ const char *setup_git_directory_gently(int *nongit_ok)
602 const char *prefix;
603
604 prefix = setup_git_directory_gently_1(nongit_ok);
605 + if (prefix)
606 + setenv("GIT_PREFIX", prefix, 1);
607 + else
608 + setenv("GIT_PREFIX", "", 1);
609 +
610 if (startup_info) {
611 startup_info->have_repository = !nongit_ok || !*nongit_ok;
612 startup_info->prefix = prefix;
t/t1020-subdirectory.sh
+16
@@ -139,6 +139,22 @@ test_expect_success 'GIT_PREFIX for !alias' '
139 test_cmp expect actual
140 '
141
142 +test_expect_success 'GIT_PREFIX for built-ins' '
143 + # Use GIT_EXTERNAL_DIFF to test that the "diff" built-in
144 + # receives the GIT_PREFIX variable.
145 + printf "dir/" >expect &&
146 + printf "#!/bin/sh\n" >diff &&
147 + printf "printf \"\$GIT_PREFIX\"" >>diff &&
148 + chmod +x diff &&
149 + (
150 + cd dir &&
151 + printf "change" >two &&
152 + env GIT_EXTERNAL_DIFF=./diff git diff >../actual
153 + git checkout -- two
154 + ) &&
155 + test_cmp expect actual
156 +'
157 +
158 test_expect_success 'no file/rev ambiguity check inside .git' '
159 git commit -a -m 1 &&
160 (