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>
This commit is contained in:

committed by
Junio C Hamano

parent
a9ecda2788
commit
b1688ea02d
@ -467,7 +467,12 @@ static void init_pathspec_item(struct pathspec_item *item, unsigned flags,
|
|||||||
match = prefix_path_gently(prefix, prefixlen,
|
match = prefix_path_gently(prefix, prefixlen,
|
||||||
&prefixlen, copyfrom);
|
&prefixlen, copyfrom);
|
||||||
if (!match) {
|
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)
|
if (!hint_path)
|
||||||
hint_path = get_git_dir();
|
hint_path = get_git_dir();
|
||||||
die(_("%s: '%s' is outside repository at '%s'"), elt,
|
die(_("%s: '%s' is outside repository at '%s'"), elt,
|
||||||
|
@ -1234,6 +1234,33 @@ test_expect_success 'outside of git repository with fallbackToNoIndex' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'no repository with path outside $cwd' '
|
||||||
|
test_when_finished rm -fr non &&
|
||||||
|
rm -fr non &&
|
||||||
|
mkdir -p non/git/sub non/tig &&
|
||||||
|
(
|
||||||
|
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
|
||||||
|
) &&
|
||||||
|
(
|
||||||
|
GIT_CEILING_DIRECTORIES="$(pwd)/non" &&
|
||||||
|
export GIT_CEILING_DIRECTORIES &&
|
||||||
|
cd non/git &&
|
||||||
|
test_expect_code 128 git grep --no-index search ../tig 2>error &&
|
||||||
|
grep "is outside the directory tree" error
|
||||||
|
) &&
|
||||||
|
(
|
||||||
|
GIT_CEILING_DIRECTORIES="$(pwd)/non" &&
|
||||||
|
export GIT_CEILING_DIRECTORIES &&
|
||||||
|
cd non/git &&
|
||||||
|
test_expect_code 128 git grep --no-index search ../non 2>error &&
|
||||||
|
grep "no such path in the working tree" error
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'inside git repository but with --no-index' '
|
test_expect_success 'inside git repository but with --no-index' '
|
||||||
rm -fr is &&
|
rm -fr is &&
|
||||||
mkdir -p is/git/sub &&
|
mkdir -p is/git/sub &&
|
||||||
|
Reference in New Issue
Block a user