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>
This commit is contained in:
parent
31041209fe
commit
0f64cc407f
3
path.c
3
path.c
@ -441,8 +441,7 @@ const char *enter_repo(const char *path, int strict)
|
|||||||
else if (chdir(path))
|
else if (chdir(path))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (access("objects", X_OK) == 0 && access("refs", X_OK) == 0 &&
|
if (is_git_directory(".")) {
|
||||||
validate_headref("HEAD") == 0) {
|
|
||||||
set_git_dir(".");
|
set_git_dir(".");
|
||||||
check_repository_format();
|
check_repository_format();
|
||||||
return path;
|
return path;
|
||||||
|
@ -134,4 +134,18 @@ test_expect_success 'enter_repo non-strict mode' '
|
|||||||
test_cmp expected actual
|
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
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user