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
(