From: Nguyen Thai Ngoc Duy Date: Wed, 22 Dec 2010 07:05:28 GMT Subject: Re: [PATCH 36/47] rev-parse: prints --git-dir relative to user's cwd Message-ID: In-Reply-To: <7vvd2m605f.fsf@alter.siamese.dyndns.org> 2010/12/22 Junio C Hamano : > Nguyễn Thái Ngọc Duy   writes: > >> git_dir variable in environment.c is relative to git's cwd, not user's >> cwd. Convert the relative path (actualy by making it absolute path) >> before printing out. >> >> Signed-off-by: Nguyễn Thái Ngọc Duy >> Signed-off-by: Junio C Hamano >> --- >>  builtin/rev-parse.c |    6 +++++- >>  1 files changed, 5 insertions(+), 1 deletions(-) >> >> diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c >> index a5a1c86..65c287b 100644 >> --- a/builtin/rev-parse.c >> +++ b/builtin/rev-parse.c >> @@ -647,7 +647,11 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) >>                               static char cwd[PATH_MAX]; >>                               int len; >>                               if (gitdir) { >> -                                     puts(gitdir); >> +                                     if (is_absolute_path(gitdir) || !prefix) { >> +                                             puts(gitdir); >> +                                             continue; >> +                                     } >> +                                     puts(make_absolute_path(gitdir)); >>                                       continue; >>                               } >>                               if (!prefix) { > > I do not quite understand this change.  I can obtain GIT_DIR in a relative > form without this patch already: > >    $ cd t/ >    $ git --git-dir=../.git rev-parse --git-dir HEAD >    ../.git >    c7511731675da8b50c0d5243aa04a98c8a5ee316 > > Could we please have a new test case to demonstrate what is broken without > this patch? > Um.. GIT_DIR can be changed by set_git_dir() inside setup_directory_gently() and be relative to git's internal (movable) cwd. The current code won't fall to that code path because GIT_DIR is made absolute in most cases. A few cases we keep GIT_DIR relative, we're sure cwd is not moved, or $GIT_DIR is not set and handled by rev-parse code. I reverted the patch and ran "make test". Passed. When an attempt to make $GIT_DIR relative to worktree as much as possible happens, this may be needed. But for now, I'm OK if you take this patch out. I'll put it back on when I make such an attempt. -- Duy