summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--path.c9
-rwxr-xr-xt/t0002-gitfile.sh10
2 files changed, 17 insertions, 2 deletions
diff --git a/path.c b/path.c
index 7340e11d7d..a346134462 100644
--- a/path.c
+++ b/path.c
@@ -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