On Tue, Oct 17, 2023, at 18:42, Junio C Hamano wrote: > 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