[PATCH] grep: die gracefully when outside repository
From: Kristoffer Haugsbakk <hidden>
Date: 2023-10-14 21:05:00
Subsystem:
the rest · Maintainer:
Linus Torvalds
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 <redacted>
Signed-off-by: Kristoffer Haugsbakk <redacted>
---
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