From: Junio C Hamano <gitster@pobox.com>
To: Tian Yuchen <a3205153416@gmail.com>
Cc: Phillip Wood <phillip.wood123@gmail.com>,
git@vger.kernel.org, karthik.188@gmail.com,
Johannes Schindelin <johannes.schindelin@gmx.de>
Subject: Re: [PATCH v11] setup: improve error diagnosis for invalid .git files
Date: Wed, 04 Mar 2026 10:06:40 -0800 [thread overview]
Message-ID: <xmqqcy1j8o5r.fsf@gitster.g> (raw)
In-Reply-To: <fc2aaed9-ecc3-4efa-bdef-e6ac951c1d5b@gmail.com> (Tian Yuchen's message of "Thu, 5 Mar 2026 01:35:11 +0800")
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.
next prev parent reply other threads:[~2026-03-04 18:06 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-18 12:46 [PATCH v6 0/2] setup: allow cwd/.git to be a symlink to a directory Tian Yuchen
2026-02-18 12:46 ` [PATCH v6 1/2] setup: distinguish ENOENT from other stat errors Tian Yuchen
2026-02-18 12:46 ` [PATCH v6 2/2] setup: allow cwd/.git to be a symlink to a directory Tian Yuchen
2026-02-19 7:16 ` [PATCH v7] " Tian Yuchen
2026-02-20 3:40 ` Junio C Hamano
2026-02-20 16:27 ` Tian Yuchen
2026-02-20 16:45 ` [PATCH v8] " Tian Yuchen
2026-02-20 18:00 ` Junio C Hamano
2026-02-21 8:10 ` Tian Yuchen
2026-02-21 17:20 ` Junio C Hamano
2026-02-22 3:22 ` Tian Yuchen
2026-02-21 8:30 ` [PATCH v9] setup: improve error diagnosis for invalid .git files Tian Yuchen
2026-02-22 5:42 ` Junio C Hamano
2026-02-22 10:28 ` Tian Yuchen
2026-02-22 10:29 ` [PATCH v10] " Tian Yuchen
2026-02-22 16:53 ` Karthik Nayak
2026-02-23 7:00 ` Tian Yuchen
2026-02-22 22:23 ` Junio C Hamano
2026-02-23 0:23 ` Junio C Hamano
2026-02-23 3:35 ` Tian Yuchen
2026-02-23 5:10 ` Junio C Hamano
2026-02-23 15:39 ` Junio C Hamano
2026-02-23 17:17 ` Tian Yuchen
2026-02-23 19:27 ` Junio C Hamano
2026-02-24 10:23 ` Tian Yuchen
2026-02-24 17:01 ` Tian Yuchen
2026-02-25 2:50 ` Junio C Hamano
2026-02-25 16:03 ` Tian Yuchen
2026-02-23 7:44 ` [PATCH v11] " Tian Yuchen
2026-02-26 23:03 ` Junio C Hamano
2026-02-27 5:26 ` Tian Yuchen
2026-02-27 22:20 ` Junio C Hamano
2026-02-28 4:38 ` Tian Yuchen
2026-03-02 16:26 ` Junio C Hamano
2026-03-03 19:31 ` Phillip Wood
2026-03-04 5:39 ` Junio C Hamano
2026-03-04 11:03 ` Tian Yuchen
2026-03-04 16:53 ` Junio C Hamano
2026-03-04 17:35 ` Tian Yuchen
2026-03-04 18:06 ` Junio C Hamano [this message]
2026-03-04 18:41 ` Tian Yuchen
2026-03-04 22:50 ` Junio C Hamano
2026-03-05 12:40 ` Tian Yuchen
2026-03-09 23:30 ` Junio C Hamano
2026-03-04 14:15 ` [PATCH v12] " Tian Yuchen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqcy1j8o5r.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=a3205153416@gmail.com \
--cc=git@vger.kernel.org \
--cc=johannes.schindelin@gmx.de \
--cc=karthik.188@gmail.com \
--cc=phillip.wood123@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox