From: Nguyễn Thái Ngọc Duy Date: Mon, 28 Sep 2015 13:06:13 +0000 (+0700) Subject: enter_repo: avoid duplicating logic, use is_git_directory() instead X-Git-Tag: v2.6.3~9^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0f64cc407f32f979c8bcfa7d3d9b24d8e023df35;p=thirdparty%2Fgit.git 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 Signed-off-by: Junio C Hamano --- 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