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

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

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 4, 2026, 18:06 UTC
Message-ID
<xmqqcy1j8o5r.fsf@gitster.g>
In-Reply-To
<fc2aaed9-ecc3-4efa-bdef-e6ac951c1d5b@gmail.com>
Tian Yuchen <a3205153416@gmail.com> writes:
> Unfortunately, looking back now, my implementation barely qualifies as 
> “functional” and actually undermines the purpose of setup_git..() 
> itself. It's a mess — I rushed into it without properly reviewing the 
> context (like how other cases are handled) :(((

v12 does work differently from what we have been aiming for, but I find that it arguably is a much safer approach.

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.

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.

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.

Thanks.
Previous: Tian YuchenNext: Tian Yuchen
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. 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.