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

Re: [RFC PATCH v2 3/4] setup: introduce new helper 'is_git_directory_verbose'

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 30, 2026, 18:32 UTC
Message-ID
<xmqqv77ma8ty.fsf@gitster.g>
In-Reply-To
<20260929102513.712181-4-kaartic.sivaraam@gmail.com>
Kaartic Sivaraam <kaartic.sivaraam@gmail.com> writes:
Show 12 quoted lines
> Introduce a new helper is_git_directory_verbose() as a
> counterpart to the existing is_git_directory().
>
> is_git_directory_verbose() also populates an optional
> string strbuf with reasoning around why the given suspect
> is not a valid git directory. This strbuf in turn can be
> used to improve the error reporting which is currently blunt:
>
>   fatal: not a git repository
>
> This is not helpful as the user does not get any hint about "why"
> the repository is not considered valid.

I suspect that it is much less the failure to report the reason that may confuse users than the failure to report which directory was inspected and why we picked that directory. Once we make it clear which directory was used as the repository to run the Git operation the user specified, they can visit the directory themselves and see that there is no HEAD, etc. The user may have a leftover GIT_DIR in the environment that is interfering with their operation without their remembering they still had it, for example. For this reason, I am not so enthused to see this much code churn to tell the user the subtle differences among a dangling symlink HEAD, a HEAD pointing outside refs, and a missing HEAD.

What would be preferable is a much less invasive patch that reports which path was assumed to be the repository and where it came from (among GIT_DIR, auto-discovery stopped at GIT_CEILING_DIRECTORIES, etc.). It would help the user figure out why the directory they thought was the Git directory is not what the git binary inspected.

This patch does report which path we thought HEAD should be at in its messages, but does not explain where that assumption came from, unlike the verification of the objects/ directory, which mentions the environment variable if it is involved. This feels uneven.

Thanks.
Previous: Kaartic SivaraamNext: Kaartic Sivaraam
Message 17 of 20 in “Improve error reporting to mention "why" a directory is not a repository”
  1. 0/3 Improve error reporting to mention "why" a directory is not a repositoryKaartic Sivaraam, Sep 24, 2026
  2. 1/3 t0009: add tests to cover more error reporting scenariosKaartic Sivaraam, Sep 24, 2026
  3. Junio C HamanoSep 24, 2026
  4. Kaartic SivaraamSep 25, 2026
  5. 2/3 setup: introduce new helper 'is_git_directory_verbose'Kaartic Sivaraam, Sep 24, 2026
  6. Junio C HamanoSep 24, 2026
  7. Kaartic SivaraamSep 25, 2026
  8. 3/3 setup: communicate why a directory is not a valid git directoryKaartic Sivaraam, Sep 24, 2026
  9. Junio C HamanoSep 24, 2026
  10. Kaartic SivaraamSep 25, 2026
  11. 0/4 Improve error reporting to mention "why" a directory is not a repositoryKaartic Sivaraam, Sep 29, 2026
  12. 1/4 setup: normalize an if-else to follow our conventionKaartic Sivaraam, Sep 29, 2026
  13. 2/4 t0009: add tests to cover more error reporting scenariosKaartic Sivaraam, Sep 29, 2026
  14. 3/4 setup: introduce new helper 'is_git_directory_verbose'Kaartic Sivaraam, Sep 29, 2026
  15. Patrick SteinhardtSep 30, 2026
  16. Kaartic SivaraamOct 5, 2026
  17. Junio C HamanoSep 30, 2026
  18. 4/4 setup: communicate why a directory is not a valid git directoryKaartic Sivaraam, Sep 29, 2026
  19. Patrick SteinhardtSep 30, 2026
  20. Kaartic SivaraamOct 5, 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.