summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>2015-09-28 20:06:13 +0700
committerJunio C Hamano <gitster@pobox.com>2015-09-28 10:46:22 -0700
commit0f64cc407f32f979c8bcfa7d3d9b24d8e023df35 (patch)
tree62deb9f13bd3ba946fc56d3f8a0b0abea320203f
parent31041209fee1ebc6420b069e9c1e283241496545 (diff)
downloadgit-0f64cc407f32f979c8bcfa7d3d9b24d8e023df35.tar.gz
enter_repo: avoid duplicating logic, use is_git_directory() instead
It matters for linked checkouts where 'refs' directory won't be available in $GIT_DIR. is_git_directory() knows about $GIT_COMMON_DIR and can handle this case. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--path.c3
-rwxr-xr-xt/t0002-gitfile.sh14
2 files changed, 15 insertions, 2 deletions
diff --git a/path.c b/path.c
index a536ee329f..7340e11d7d 100644
--- a/path.c
+++ b/path.c
@@ -441,8 +441,7 @@ const char *enter_repo(const char *path, int strict)
else if (chdir(path))
return NULL;
- if (access("objects", X_OK) == 0 && access("refs", X_OK) == 0 &&
- validate_headref("HEAD") == 0) {
+ if (is_git_directory(".")) {
set_git_dir(".");
check_repository_format();
return path;
diff --git a/t/t0002-gitfile.sh b/t/t0002-gitfile.sh
index 545bfe2982..2e709cc969 100755
--- a/t/t0002-gitfile.sh
+++ b/t/t0002-gitfile.sh
@@ -134,4 +134,18 @@ test_expect_success 'enter_repo non-strict mode' '
test_cmp expected actual
'
+test_expect_success 'enter_repo linked checkout' '
+ (
+ cd enter_repo &&
+ git worktree add ../foo refs/tags/foo
+ ) &&
+ git ls-remote foo >actual &&
+ cat >expected <<-\EOF &&
+ 946e985ab20de757ca5b872b16d64e92ff3803a9 HEAD
+ 946e985ab20de757ca5b872b16d64e92ff3803a9 refs/heads/master
+ 946e985ab20de757ca5b872b16d64e92ff3803a9 refs/tags/foo
+ EOF
+ test_cmp expected actual
+'
+
test_done