Kristoffer Haugsbakk <code@xxxxxxxxxxxxxxx> writes: > 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`. Ah, interesting. > The `hint_path` declaration has to be at the start because of style > rules. But we can initialize it after. Yes, what you have below (but please leave a blank line between the last line of decl and the first line of statement for readablility) looks very readable and sensible. > 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. That is not necessary, as we no longer run under phoney i18n that required us to use test_i18ngrep. It is OK to assume that the tests are run under "C" locale. Thanks. > -- >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,