Die gracefully when `git grep --no-index` is run outside of a Git repository and the path is outside the directory tree. If you are not in a Git repository and say: git grep --no-index search .. You trigger a `BUG`: BUG: environment.c:213: git environment hasn't been setup Aborted (core dumped) Because `..` is a valid path which is treated as a pathspec. Then `pathspec` figures out that it is not in the current directory tree. The `BUG` is triggered when `pathspec` tries to advice the user about the path to the (non-existing) repository. Reported-by: ks1322 ks1322 <ks1322@xxxxxxxxx> Signed-off-by: Kristoffer Haugsbakk <code@xxxxxxxxxxxxxxx> --- pathspec.c | 3 +++ t/t7810-grep.sh | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/pathspec.c b/pathspec.c index 3a3a5724c44..e115832f17a 100644 --- a/pathspec.c +++ b/pathspec.c @@ -468,6 +468,9 @@ static void init_pathspec_item(struct pathspec_item *item, unsigned flags, &prefixlen, copyfrom); if (!match) { const char *hint_path = get_git_work_tree(); + if (!have_git_dir()) + die(_("'%s' is outside the directory tree"), + copyfrom); if (!hint_path) hint_path = get_git_dir(); die(_("%s: '%s' is outside repository at '%s'"), elt, diff --git a/t/t7810-grep.sh b/t/t7810-grep.sh index 39d6d713ecb..b976f81a166 100755 --- a/t/t7810-grep.sh +++ b/t/t7810-grep.sh @@ -1234,6 +1234,19 @@ test_expect_success 'outside of git repository with fallbackToNoIndex' ' ) ' +test_expect_success 'outside of git repository with pathspec outside the directory tree' ' + test_when_finished rm -fr non && + rm -fr non && + mkdir -p non/git/sub && + ( + GIT_CEILING_DIRECTORIES="$(pwd)/non" && + export GIT_CEILING_DIRECTORIES && + cd non/git && + test_expect_code 128 git grep --no-index search .. 2>error && + grep "is outside the directory tree" error + ) +' + test_expect_success 'inside git repository but with --no-index' ' rm -fr is && mkdir -p is/git/sub && base-commit: 43c8a30d150ecede9709c1f2527c8fba92c65f40 -- 2.42.0.2.g879ad04204