Re: [PATCH 36/47] rev-parse: prints --git-dir relative to user's cwd
From: Nguyen Thai Ngoc Duy <hidden>
Date: 2016-06-15 22:50:17
2010/12/22 Junio C Hamano [off-list ref]:
Nguyễn Thái Ngọc Duy [off-list ref] writes:quoted
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 <redacted> Signed-off-by: Junio C Hamano <redacted> --- 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