[PATCH 2/2] Handle relative paths in submodule .git files
- From
Brad King <brad.king@kitware.com>
- Date
- Jan 8, 2010, 22:36 UTC
- Message-ID
- <1262990208-15554-3-git-send-email-brad.king@kitware.com>
- In-Reply-To
- <1262990208-15554-1-git-send-email-brad.king@kitware.com>
Commit 842abf06f36b5b31050db6406265972e3e1cc189 taught resolve_gitlink_ref() to call read_gitfile_gently() to resolve .git files. However, read_gitfile_gently() needs to chdir over to the directory containing the .git file to resolve relative paths correctly.
Signed-off-by: Brad King <brad.king@kitware.com> --- setup.c | 17 +++++++++++++++++ t/t2104-update-index-gitfile.sh | 2 +- 2 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/setup.c b/setup.c index 2cf0f19..a233e01 100644 --- a/setup.c +++ b/setup.c @@ -255,6 +255,8 @@ const char *read_gitfile_gently(const char *path) struct stat st; int fd; size_t len; + char cwd[1024] = ""; + const char *slash; if (stat(path, &st)) return NULL; @@ -276,9 +278,24 @@ const char *read_gitfile_gently(const char *path) if (len < 9) die("No path in gitfile: %s", path); buf[len] = '\0'; + + slash = strrchr(path, '/'); + if (slash) { + char *dir = xstrndup(path, slash - path); + if (!getcwd(cwd, sizeof(cwd))) + die_errno ("Could not get current working directory"); + if (chdir(dir)) + die_errno ("Could not switch to '%s'", dir); + free(dir); + } + if (!is_git_directory(buf + 8)) die("Not a git repository: %s", buf + 8); path = make_absolute_path(buf + 8); + + if (*cwd && chdir(cwd)) + die_errno ("Could not change back to '%s'", cwd); + free(buf); return path; } diff --git a/t/t2104-update-index-gitfile.sh b/t/t2104-update-index-gitfile.sh index ba71984..641607d 100755 --- a/t/t2104-update-index-gitfile.sh +++ b/t/t2104-update-index-gitfile.sh @@ -31,7 +31,7 @@ test_expect_success 'submodule with relative .git file' ' test_commit first) ' -test_expect_failure 'add gitlink to relative .git file' ' +test_expect_success 'add gitlink to relative .git file' ' git update-index --add -- sub2 '
-- 1.6.5