Re: [PATCH] grep: die gracefully when outside repository
- From
Kristoffer Haugsbakk <code@khaugsbakk.name>
- Date
- Oct 17, 2023, 19:51 UTC
- Message-ID
- <f8a2abc0f610912af3eb56536ed217b8f90db2f9.1697571664.git.code@khaugsbakk.name>
- In-Reply-To
- <xmqqmswhjj48.fsf@gitster.g>
On Tue, Oct 17, 2023, at 18:42, Junio C Hamano wrote:
Show 21 quoted lines
> It is curious that the original has two sources of hint_path (i.e.,
> get_git_dir() is used as a fallback for get_git_work_tree()). Are
> we certain that the check is at the right place? If we do not have
> a repository, then both would fail by returning NULL, so it should
> not matter if we add the new check before we check either or both,
> or even after we checked both before dying.
>
> I wonder if
>
> const char *hint_path = get_git_work_tree();
>
> if (!hint_path)
> hint_path = get_git_dir();
> if (hint_path)
> die(_("%s: '%s' is outside repository at '%s'"),
> elt, copyfrom, absolute_path(hint_path));
> else
> die(_("%s: '%s' is outside the directory tree"),
> elt, copyfrom);
>
> makes the intent of the code clearer.That doesn't work since `get_git_dir()` triggers `BUG` instead of returning `NULL`.
The `hint_path` declaration has to be at the start because of style rules. But we can initialize it after.
I can also have a second look at the test since I am using `grep` to test the failure output and not the translation string variant.
-- >8 -- Subject: [PATCH] fixup! grep: die gracefully when outside repository
--- pathspec.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/pathspec.c b/pathspec.c index e115832f17a..0c1061fad11 100644 --- a/pathspec.c +++ b/pathspec.c @@ -467,10 +467,11 @@ static void init_pathspec_item(struct pathspec_item *item, unsigned flags, match = prefix_path_gently(prefix, prefixlen, &prefixlen, copyfrom); if (!match) { - const char *hint_path = get_git_work_tree(); + const char *hint_path; if (!have_git_dir()) die(_("'%s' is outside the directory tree"), copyfrom); + hint_path = get_git_work_tree(); if (!hint_path) hint_path = get_git_dir(); die(_("%s: '%s' is outside repository at '%s'"), elt,
-- 2.42.0.2.g879ad04204