When GIT_DIR is not set, cwd is used to determine where .git is. If core.worktree is set, setup_git_directory() needs to jump back to the original cwd in order to setup worktree, this leads to incorrect .git location later in setup_work_tree(). Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- On Thu, Jul 24, 2008 at 08:50:16AM +0200, Johannes Sixt wrote: > Nguyễn Thái Ngọc Duy schrieb: > > --- a/setup.c > > +++ b/setup.c > > @@ -577,10 +577,14 @@ const char *setup_git_directory(void) > > /* If the work tree is not the default one, recompute prefix */ > > if (inside_work_tree < 0) { > > static char buffer[PATH_MAX + 1]; > > + static char cwd[PATH_MAX + 1]; > > char *rel; > > + getcwd(cwd, PATH_MAX); > > This needs an error check. Check added. setup.c | 5 +++++ t/t1501-worktree.sh | 13 ++++++++++++- 2 files changed, 17 insertions(+), 1 deletions(-) diff --git a/setup.c b/setup.c index 6cf9094..fa1d696 100644 --- a/setup.c +++ b/setup.c @@ -577,10 +577,15 @@ const char *setup_git_directory(void) /* If the work tree is not the default one, recompute prefix */ if (inside_work_tree < 0) { static char buffer[PATH_MAX + 1]; + static char cwd[PATH_MAX + 1]; char *rel; + if (!getcwd(cwd, PATH_MAX)) + die ("Could not get the current working directory"); if (retval && chdir(retval)) die ("Could not jump back into original cwd"); rel = get_relative_cwd(buffer, PATH_MAX, get_git_work_tree()); + if (retval && chdir(cwd)) + die ("Could not jump back into original cwd"); return rel && *rel ? strcat(rel, "/") : NULL; } diff --git a/t/t1501-worktree.sh b/t/t1501-worktree.sh index 2ee88d8..d53d66a 100755 --- a/t/t1501-worktree.sh +++ b/t/t1501-worktree.sh @@ -29,7 +29,18 @@ test_rev_parse() { } mkdir -p work/sub/dir || exit 1 -mv .git repo.git || exit 1 + +git config core.worktree "$(pwd)"/work +mv .git work || exit 1 +test_expect_success '--git-dir with relative .git' ' + ( + MYPWD="$(pwd)" + cd work/sub/dir && + test "$MYPWD"/work/.git = "$(git rev-parse --git-dir)" + ) +' + +mv work/.git repo.git || exit 1 say "core.worktree = relative path" GIT_DIR=repo.git -- 1.5.5.GIT -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html