git/list[1] front-page[2] threads[3] people[4] search[5] about
wed 2026-10-07 17:23 UTC

Re: [PATCH v10] setup: improve error diagnosis for invalid .git files

From
Tian Yuchen <a3205153416@gmail.com>
Date
Feb 23, 2026, 03:35 UTC
Message-ID
<5263825f-163c-43af-bac7-152d670919d9@gmail.com>
In-Reply-To
<xmqqqzqcpatz.fsf@gitster.g>
Hi Junio,
 >> We'd probably need to treat ENOTDIR the same way as ENOENT to deal
 >> with cases where we expect a directory "sm1" to be the root of a
 >> submodule working tree, and we have a modification that removes the
 >> submodule directory and replace it with a regular file "sm1".  In
 >> the code path touched by this patch in submodule.c, we would ask "is
 >> sm1/.git a git directory?" and the stat(2) call on that path in
 >> read_gitfile_gently() used to say "Ah, a failure, that means we
 >> cannot positively say that 'sm1/.git' is a git directory or a gitdir
 >> file."  Now we inspect the error code in an attempt to tell if it is
 >> a system failure (e.g., a corrupt filesystem), but catching only
 >> ENOENT is probably a bit too tight.  In the above scenario, asking
 >> about 'sm1/.git' when 'sm1' is a regular file will not result in
 >> ENOENT but in ENOTDIR (i.e., "the leading 'sm1' is not a directory so
 >> it makes no sense to ask about 'sm1/.git'").

I must admit I hadn't considered this edge case at all. Thank you for pointing it out :]

>> Is it always sensible to treat ENOTDIR and ENOENT as two equivalent
>> errors for the purpose of read_gitfile_gently()?  I have no clear
>> answer offhand myself.  This is part of what we need to think about
>> and resolve while addressing the original "NEEDSWORK:" comment.

Hummm, I believe it is safe. From the perspective of 'read_gitfile_gently()', the sole purpose is to locate and read a repository file. Whether 'stat()' returns 'ENOENT' (the file physically does not exist) or 'ENOTDIR' (a component of the path is not a directory, making it impossible for the file to exist there), the functional result is exactly the same: the '.git' file is missing.

But I must say I can't 100% guarantee its safety. Anyway, lemme just do what I can for now.

I will:
  - squash your diff into my patch
  - rename the error code to `READ_GITFILE_ERR_STAT_MISSING`
  - combine this with the commit message refinements and test cleanups 
suggested by Karthik in the previous thread.

Thank you for the patch and for walking me through this edge case. I'll send out v11 soon! (2~3 hours later)

Regards,
Yuchen
Previous: Junio C HamanoNext: Junio C Hamano
Message 19 of 45 in “setup: allow cwd/.git to be a symlink to a directory”
  1. 0/2 setup: allow cwd/.git to be a symlink to a directoryTian Yuchen, Feb 18, 2026
  2. 1/2 setup: distinguish ENOENT from other stat errorsTian Yuchen, Feb 18, 2026
  3. 2/2 setup: allow cwd/.git to be a symlink to a directoryTian Yuchen, Feb 18, 2026
  4. setup: allow cwd/.git to be a symlink to a directoryTian Yuchen, Feb 19, 2026
  5. Junio C HamanoFeb 20, 2026
  6. Tian YuchenFeb 20, 2026
  7. setup: allow cwd/.git to be a symlink to a directoryTian Yuchen, Feb 20, 2026
  8. Junio C HamanoFeb 20, 2026
  9. Tian YuchenFeb 21, 2026
  10. setup: improve error diagnosis for invalid .git filesTian Yuchen, Feb 21, 2026
  11. Junio C HamanoFeb 21, 2026
  12. Tian YuchenFeb 22, 2026
  13. Junio C HamanoFeb 22, 2026
  14. Tian YuchenFeb 22, 2026
  15. setup: improve error diagnosis for invalid .git filesTian Yuchen, Feb 22, 2026
  16. Karthik NayakFeb 22, 2026
  17. Junio C HamanoFeb 22, 2026
  18. Junio C HamanoFeb 23, 2026
  19. Tian YuchenFeb 23, 2026
  20. Junio C HamanoFeb 23, 2026
  21. Tian YuchenFeb 23, 2026
  22. setup: improve error diagnosis for invalid .git filesTian Yuchen, Feb 23, 2026
  23. Junio C HamanoFeb 23, 2026
  24. Tian YuchenFeb 23, 2026
  25. Junio C HamanoFeb 23, 2026
  26. Tian YuchenFeb 24, 2026
  27. Tian YuchenFeb 24, 2026
  28. Junio C HamanoFeb 25, 2026
  29. Tian YuchenFeb 25, 2026
  30. Junio C HamanoFeb 26, 2026
  31. Tian YuchenFeb 27, 2026
  32. Junio C HamanoFeb 27, 2026
  33. Tian YuchenFeb 28, 2026
  34. Junio C HamanoMar 2, 2026
  35. Phillip WoodMar 3, 2026
  36. Junio C HamanoMar 4, 2026
  37. Tian YuchenMar 4, 2026
  38. setup: improve error diagnosis for invalid .git filesTian Yuchen, Mar 4, 2026
  39. Junio C HamanoMar 4, 2026
  40. Tian YuchenMar 4, 2026
  41. Junio C HamanoMar 4, 2026
  42. Tian YuchenMar 4, 2026
  43. Junio C HamanoMar 4, 2026
  44. Tian YuchenMar 5, 2026
  45. Junio C HamanoMar 9, 2026

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.