aboutsummaryrefslogtreecommitdiffstats
path: root/pathspec.c
diff options
context:
space:
mode:
authorKristoffer Haugsbakk <code@khaugsbakk.name>2023-10-20 18:40:07 +0200
committerJunio C Hamano <gitster@pobox.com>2023-10-20 11:06:45 -0700
commitb1688ea02df6fdefd5a228a0d52583356d433a99 (patch)
tree3f72d6fb62c303cebbcc0329288845548766356b /pathspec.c
parenta9ecda2788e229afc9b611acaa26d0d9d4da53ed (diff)
downloadgit-b1688ea02df6fdefd5a228a0d52583356d433a99.tar.gz
grep: die gracefully when outside repository
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 advise the user about how the path is not in the current (non-existing) repository. Reported-by: ks1322 ks1322 <ks1322@gmail.com> Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'pathspec.c')
-rw-r--r--pathspec.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/pathspec.c b/pathspec.c
index 7f88f1c02b..bb1efe1f39 100644
--- a/pathspec.c
+++ b/pathspec.c
@@ -467,7 +467,12 @@ 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,