diff options
-rw-r--r-- | path.c | 9 | ||||
-rwxr-xr-x | t/t0002-gitfile.sh | 10 |
2 files changed, 17 insertions, 2 deletions
@@ -438,8 +438,13 @@ const char *enter_repo(const char *path, int strict) return NULL; path = validated_path; } - else if (chdir(path)) - return NULL; + else { + const char *gitfile = read_gitfile(path); + if (gitfile) + path = gitfile; + if (chdir(path)) + return NULL; + } if (is_git_directory(".")) { set_git_dir("."); diff --git a/t/t0002-gitfile.sh b/t/t0002-gitfile.sh index 2e709cc969..9670e8cbe6 100755 --- a/t/t0002-gitfile.sh +++ b/t/t0002-gitfile.sh @@ -148,4 +148,14 @@ test_expect_success 'enter_repo linked checkout' ' test_cmp expected actual ' +test_expect_success 'enter_repo strict mode' ' + git ls-remote --upload-pack="git upload-pack --strict" foo/.git >actual && + cat >expected <<-\EOF && + 946e985ab20de757ca5b872b16d64e92ff3803a9 HEAD + 946e985ab20de757ca5b872b16d64e92ff3803a9 refs/heads/master + 946e985ab20de757ca5b872b16d64e92ff3803a9 refs/tags/foo + EOF + test_cmp expected actual +' + test_done |