diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2010-12-27 08:26:04 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-12-27 08:34:19 -0800 |
commit | 0ed748134748579a13cf27e1e8b3e55371bcd9dc (patch) | |
tree | 3f39dda690dc82e361b0e33df3bf59512d2bd3f3 /setup.c | |
parent | e7d1efbe9dc5c03e65a573d6f8c4d8804118eb0a (diff) | |
download | git-0ed748134748579a13cf27e1e8b3e55371bcd9dc.tar.gz |
setup_work_tree: adjust relative $GIT_WORK_TREE after moving cwd
When setup_work_tree() is called, it moves cwd to $GIT_WORK_TREE and
makes internal copy of $GIT_WORK_TREE absolute. The environt variable,
if set by user, remains unchanged. If the variable is relative, it is
no longer correct because its base dir has changed.
Instead of making $GIT_WORK_TREE absolute too, we just say "." and let
subsequent git processes handle it.
Reported-by: Michel Briand <michelbriand@free.fr>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'setup.c')
-rw-r--r-- | setup.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -221,6 +221,14 @@ void setup_work_tree(void) git_dir = make_absolute_path(git_dir); if (!work_tree || chdir(work_tree)) die("This operation must be run in a work tree"); + + /* + * Make sure subsequent git processes find correct worktree + * if $GIT_WORK_TREE is set relative + */ + if (getenv(GIT_WORK_TREE_ENVIRONMENT)) + setenv(GIT_WORK_TREE_ENVIRONMENT, ".", 1); + set_git_dir(make_relative_path(git_dir, work_tree)); initialized = 1; } |