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

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

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 22, 2026, 05:42 UTC
Message-ID
<xmqqseatqqpr.fsf@gitster.g>
In-Reply-To
<20260221083001.220061-1-a3205153416@gmail.com>
Tian Yuchen <a3205153416@gmail.com> writes:
Show 16 quoted lines
>  void read_gitfile_error_die(int error_code, const char *path, const char *dir)
>  {
>  	switch (error_code) {
> -	case READ_GITFILE_ERR_STAT_FAILED:
> -	case READ_GITFILE_ERR_NOT_A_FILE:
> +	case READ_GITFILE_ERR_STAT_ENOENT:
> +	case READ_GITFILE_ERR_IS_A_DIR:
>  		/* non-fatal; follow return path */
>  		break;
> +	case READ_GITFILE_ERR_STAT_FAILED:
> +		die(_("error reading %s"), path);
> +	case READ_GITFILE_ERR_NOT_A_FILE:
> +		die(_("not a regular file: %s"), path);
>  	case READ_GITFILE_ERR_OPEN_FAILED:
>  		die_errno(_("error opening '%s'"), path);
>  	case READ_GITFILE_ERR_TOO_LARGE:

The changes to these two functions require us to audit callers of them that are outside the call graph of the main focus of this patch. For example, we see the following code in submodule.c:

        void absorb_git_dir_into_superproject(const char *path,
                                              const char *super_prefix)
        {
                int err_code;
                const char *sub_git_dir;
                struct strbuf gitdir = STRBUF_INIT;
                if (validate_submodule_path(path) < 0)
                        exit(128);
                strbuf_addf(&gitdir, "%s/.git", path);
                sub_git_dir = resolve_gitdir_gently(gitdir.buf, &err_code);
                /* Not populated? */
                if (!sub_git_dir) {
                        const struct submodule *sub;
                        struct strbuf sub_gitdir = STRBUF_INIT;
                        if (err_code == READ_GITFILE_ERR_STAT_FAILED) {
                                /* unpopulated as expected */
                                strbuf_release(&gitdir);
                                return;
                        }
                        if (err_code != READ_GITFILE_ERR_NOT_A_REPO)
                                /* We don't know what broke here. */
                                read_gitfile_error_die(err_code, path, NULL);
Let's take a look.

ERR_STAT_FAILED used to be "If we got ENOENT, it is an unpopulated submodule so it is OK; it is so unlikely that we get other kinds of failure and we cannot deal with them anyway".

With the patch we have been looking at, shouldn't the above code check for ERR_STAT_ENOENT instead, to do the same "unpopulated, nothing to do here, happy!" return?

This is merely just one example. All hits from "git grep" for the functions whose semantics have been updated by the patch must be looked at in a similar way, but I didn't look at how many releavnt code paths there are. It could be an easier way to find code paths that may need to be updated to grep for ERR_STAT_FAILED and ERR_NOT_A_FILE, the two symbols whose meaning have changed.

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