[PATCH] Preserve cwd in setup_git_directory()
- From
Nguyen Thai Ngoc Duy <pclouds@gmail.com>
- Date
- Jul 24, 2008, 08:12 UTC
- Message-ID
- <20080724081222.GA32354@laptop>
- In-Reply-To
- <48882628.7030305@viscovery.net>
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@gmail.com>
---
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