summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2015-08-19 14:41:30 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2015-08-19 14:41:30 -0700
commit25a294e44db1c479e8abe2449f71279e6511ea32 (patch)
treeb77ff79cf66660d1db638d02135e982f1bf01999
parentMerge branch 'mh/fast-import-optimize-current-from' into maint (diff)
parentsetup: set env $GIT_WORK_TREE when work tree is set, like $GIT_DIR (diff)
downloadtgif-25a294e44db1c479e8abe2449f71279e6511ea32.tar.xz
Merge branch 'nd/export-worktree' into maint
Running an aliased command from a subdirectory when the .git thing in the working tree is a gitfile pointing elsewhere did not work. * nd/export-worktree: setup: set env $GIT_WORK_TREE when work tree is set, like $GIT_DIR
-rw-r--r--environment.c2
-rwxr-xr-xt/t0002-gitfile.sh17
2 files changed, 19 insertions, 0 deletions
diff --git a/environment.c b/environment.c
index 61c685b8d9..03cf5f67a6 100644
--- a/environment.c
+++ b/environment.c
@@ -231,6 +231,8 @@ void set_git_work_tree(const char *new_work_tree)
}
git_work_tree_initialized = 1;
work_tree = xstrdup(real_path(new_work_tree));
+ if (setenv(GIT_WORK_TREE_ENVIRONMENT, work_tree, 1))
+ die("could not set GIT_WORK_TREE to '%s'", work_tree);
}
const char *get_git_work_tree(void)
diff --git a/t/t0002-gitfile.sh b/t/t0002-gitfile.sh
index 37e9396e5d..9393322c3e 100755
--- a/t/t0002-gitfile.sh
+++ b/t/t0002-gitfile.sh
@@ -99,4 +99,21 @@ test_expect_success 'check rev-list' '
test "$SHA" = "$(git rev-list HEAD)"
'
+test_expect_success 'setup_git_dir twice in subdir' '
+ git init sgd &&
+ (
+ cd sgd &&
+ git config alias.lsfi ls-files &&
+ mv .git .realgit &&
+ echo "gitdir: .realgit" >.git &&
+ mkdir subdir &&
+ cd subdir &&
+ >foo &&
+ git add foo &&
+ git lsfi >actual &&
+ echo foo >expected &&
+ test_cmp expected actual
+ )
+'
+
test_done