Skip to content

Commit 1f5d271

Browse files
davvidgitster
authored andcommitted
setup: Provide GIT_PREFIX to built-ins
GIT_PREFIX was added in 7cf16a1 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>
1 parent 7cf16a1 commit 1f5d271

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

setup.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,11 @@ const char *setup_git_directory_gently(int *nongit_ok)
602602
const char *prefix;
603603

604604
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+
605610
if (startup_info) {
606611
startup_info->have_repository = !nongit_ok || !*nongit_ok;
607612
startup_info->prefix = prefix;

t/t1020-subdirectory.sh

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,22 @@ test_expect_success 'GIT_PREFIX for !alias' '
139139
test_cmp expect actual
140140
'
141141

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+
142158
test_expect_success 'no file/rev ambiguity check inside .git' '
143159
git commit -a -m 1 &&
144160
(

0 commit comments

Comments
 (0)