git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v4 3/6] enter_repo: avoid duplicating logic, use is_git_directory() instead

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Sep 28, 2015, 13:06 UTC
Message-ID
<1443445576-29526-4-git-send-email-pclouds@gmail.com>
In-Reply-To
<1443445576-29526-1-git-send-email-pclouds@gmail.com>

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>
---
 path.c             |  3 +--
 t/t0002-gitfile.sh | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/path.c b/path.c
index a536ee3..7340e11 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 545bfe2..2e709cc 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
-- 
2.3.0.rc1.137.g477eb31
Previous: Nguyễn Thái Ngọc DuyNext: Nguyễn Thái Ngọc Duy
Message 25 of 28 in “workdirs: cannot clone a local workdir directory”
  1. Bjørnar SnoksrudJul 15, 2015
  2. Duy NguyenJul 15, 2015
  3. 0/5 fix local clone from a linked checkoutNguyễn Thái Ngọc Duy, Aug 22, 2015
  4. 1/5 path.c: delete an extra spaceNguyễn Thái Ngọc Duy, Aug 22, 2015
  5. 2/5 enter_repo: avoid duplicating logic, use is_git_directory() insteadNguyễn Thái Ngọc Duy, Aug 22, 2015
  6. Junio C HamanoSep 7, 2015
  7. Duy NguyenSep 13, 2015
  8. Junio C HamanoSep 13, 2015
  9. Duy NguyenSep 14, 2015
  10. Junio C HamanoSep 21, 2015
  11. 3/5 enter_repo: allow .git files in strict modeNguyễn Thái Ngọc Duy, Aug 22, 2015
  12. 4/5 clone: allow --local from a linked checkoutNguyễn Thái Ngọc Duy, Aug 22, 2015
  13. Junio C HamanoSep 7, 2015
  14. 5/5 clone: better error when --reference is a linked checkoutNguyễn Thái Ngọc Duy, Aug 22, 2015
  15. 0/5 fix local clone from a linked checkoutNguyễn Thái Ngọc Duy, Sep 13, 2015
  16. 1/5 path.c: delete an extra spaceNguyễn Thái Ngọc Duy, Sep 13, 2015
  17. 2/5 enter_repo: avoid duplicating logic, use is_git_directory() insteadNguyễn Thái Ngọc Duy, Sep 13, 2015
  18. 3/5 enter_repo: allow .git files in strict modeNguyễn Thái Ngọc Duy, Sep 13, 2015
  19. Junio C HamanoSep 25, 2015
  20. 4/5 clone: allow --local from a linked checkoutNguyễn Thái Ngọc Duy, Sep 13, 2015
  21. 5/5 clone: better error when --reference is a linked checkoutNguyễn Thái Ngọc Duy, Sep 13, 2015
  22. 0/6 fix local clone from a linked checkoutNguyễn Thái Ngọc Duy, Sep 28, 2015
  23. 1/6 path.c: delete an extra spaceNguyễn Thái Ngọc Duy, Sep 28, 2015
  24. 2/6 t0002: add test for enter_repo(), non-strict modeNguyễn Thái Ngọc Duy, Sep 28, 2015
  25. 3/6 enter_repo: avoid duplicating logic, use is_git_directory() insteadNguyễn Thái Ngọc Duy, Sep 28, 2015
  26. 4/6 enter_repo: allow .git files in strict modeNguyễn Thái Ngọc Duy, Sep 28, 2015
  27. 5/6 clone: allow --local from a linked checkoutNguyễn Thái Ngọc Duy, Sep 28, 2015
  28. 6/6 clone: better error when --reference is a linked checkoutNguyễn Thái Ngọc Duy, Sep 28, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.