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

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

From
Tian Yuchen <a3205153416@gmail.com>
Date
Mar 4, 2026, 18:41 UTC
Message-ID
<00f6d468-7d00-4edc-886d-723322420539@gmail.com>
In-Reply-To
<xmqqcy1j8o5r.fsf@gitster.g>
Hi Junio,
On 3/5/26 02:06, Junio C Hamano wrote:
> v12 does work differently from what we have been aiming for, but I
> find that it arguably is a much safer approach.

Maybe, but my main concern was that adding 'die()' in 'setup_git_directory_gently_1()' might not be the best choice. Considering the implementations of the preceding functions, I though locating 'die()' in 'setup_explicit_git_dir()' might be a better choice? By the way, I noticed there's a '(read_gitfile(path))' macro that expands to 'read_gitfile(path, NULL)'. I was planning to pass 'error_code' here, essentially moving the logic from the original 'setup_git_directory_gently_1()' to this location, where the former would only be responsible for returning the error status... The changes would be a bit too extensive if I did it that way.

Since you say the v12 patch is safer, I have no objections. I'm completely unsure about the overall structure of this part. Skill issue.

Show 7 quoted lines
> Even though the updated read_gitfile_gently() returns finer-grained
> READ_GITFILE_ERR_* codes than the original, read_gitfile_error_die()
> does not change behaviour from the original.  Any caller that use
> read_gitfile(path), which is read_gitfile_gently(path, NULL), like
> the setup_explicit_git_dir() codepath we have been looking at lately,
> lets read_gitfile_error_die() react to the error code, which is to
> behave exactly as what the code did before this patch.

I should have considered this. I feel that the changes in v12 are actually more like a band-aid fix compared to the previous ones.

You mentioned this change didn't touch 'read_gitfile_error_die()', and I think that's one of the benefits of such simple modifications. I just can't be entirely sure what the trade-offs might be — perhaps it's my lack of experience, but I always worry about digging a deep hole for future developers to fill. I'll keep learning.

Show 10 quoted lines
> So, I dunno.  After all, these two NEEDSWORK comments have been with
> us for quite some time, and reminded us that we may want to consider
> if we need to do anything differently.  I do not think we mind if we
> conclude negatively, taking "no, it is of dubious value to tighten
> error checking in these code paths" as an answer to these NEEDSWORK
> comments.  v12 is slightly less defeatest than that stance in that
> we are only allowing the callers that care about what kind of errors
> they are getting and and want to decide how to react to them, while
> keeping the default error behaviour the same for those who do not
> ask with &error_code what kind of errors we saw.
I see.
Show 33 quoted lines
> The patch makes the behaviour change for callers that pass an
> &error_code pointer to read_gitfile_gently() and act on the returned
> error code itself, like the discovery code path.  As long as these
> callers are audited and adjusted as necessary, we have very little
> risk of regression.
> 
> I won't be doing a full audit in this message, but just to give
> taste of what is expected ...
> 
> $ git grep -n -e 'read_gitfile_gently('
> 
> builtin/init-db.c:212:		p = read_gitfile_gently(git_dir, &err);
> 
> This caller gives &err but it never looks at what is in it after the
> call returns, so there shouldn't be any behaviour change.
> 
> setup.c:465:	if (read_gitfile_gently(path->buf, &gitfile_error) || is_git_directory(path->buf))
> 
> This is followed by
> 
> 		ret = 1;
>          if (gitfile_error == READ_GITFILE_ERR_OPEN_FAILED ||
>              gitfile_error == READ_GITFILE_ERR_READ_FAILED)
>                  ret = 1;
> 
> I do not offhand know if this list of "error codes that should
> result in returning 1 from this function" needs to be tweaked to
> adjust for the change in this patch.
> 
> worktree.c:390:	path = xstrdup_or_null(read_gitfile_gently(wt_path.buf, &err));
> 
> This is followed by code that reacts to path being NULL and shows
> the contents of err in an error message.  Should be benign.

I don't think this needs to be changed. If a new error_code READ_GITFILE_MISSING is encountered, then this isn't a repository at all, so it won't enter the if statement, and ret = 0.

If encountering the READ_GITFILE_ERR_IS_A_DIR, the is_git_directory(path->buf) check takes precedence. If it detects a valid .git directory, it returns 1. Therefore, the gitfile_error function doesn't need to match IS_A_DIR at all.

Thank you for taking the time to review my (roughly made) patch.
Goodnight,
Yuchen
Previous: Junio C HamanoNext: Junio C Hamano
Message 41 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. Junio C HamanoFeb 21, 2026
  11. Tian YuchenFeb 22, 2026
  12. setup: improve error diagnosis for invalid .git filesTian Yuchen, Feb 21, 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. Tian YuchenFeb 23, 2026
  18. Junio C HamanoFeb 22, 2026
  19. Junio C HamanoFeb 23, 2026
  20. Tian YuchenFeb 23, 2026
  21. Junio C HamanoFeb 23, 2026
  22. Junio C HamanoFeb 23, 2026
  23. Tian YuchenFeb 23, 2026
  24. Junio C HamanoFeb 23, 2026
  25. Tian YuchenFeb 24, 2026
  26. Tian YuchenFeb 24, 2026
  27. Junio C HamanoFeb 25, 2026
  28. Tian YuchenFeb 25, 2026
  29. setup: improve error diagnosis for invalid .git filesTian Yuchen, Feb 23, 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. Junio C HamanoMar 4, 2026
  39. Tian YuchenMar 4, 2026
  40. Junio C HamanoMar 4, 2026
  41. Tian YuchenMar 4, 2026
  42. Junio C HamanoMar 4, 2026
  43. Tian YuchenMar 5, 2026
  44. Junio C HamanoMar 9, 2026
  45. setup: improve error diagnosis for invalid .git filesTian Yuchen, Mar 4, 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.