grep: fix worktree case in submodules
Running git-grep with --recurse-submodules results in a cached grep for the submodules even when --cached is not used. This makes all modifications in submodules' tracked files be always ignored when grepping. Solve that making git-grep respect the cached option when invoking grep_cache() inside grep_submodule(). Also, add tests to ensure that the desired behavior is performed. Reported-by: Daniel Zaoui <jackdanielz@eyomi.org> Signed-off-by: Matheus Tavares <matheus.bernardino@usp.br> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
1feeaaf26b
commit
6a289d45c0
@ -392,4 +392,25 @@ test_expect_success 'grep --recurse-submodules with submodules without .gitmodul
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
reset_and_clean () {
|
||||
git reset --hard &&
|
||||
git clean -fd &&
|
||||
git submodule foreach --recursive 'git reset --hard' &&
|
||||
git submodule foreach --recursive 'git clean -fd'
|
||||
}
|
||||
|
||||
test_expect_success 'grep --recurse-submodules without --cached considers worktree modifications' '
|
||||
reset_and_clean &&
|
||||
echo "A modified line in submodule" >>submodule/a &&
|
||||
echo "submodule/a:A modified line in submodule" >expect &&
|
||||
git grep --recurse-submodules "A modified line in submodule" >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'grep --recurse-submodules with --cached ignores worktree modifications' '
|
||||
reset_and_clean &&
|
||||
echo "A modified line in submodule" >>submodule/a &&
|
||||
test_must_fail git grep --recurse-submodules --cached "A modified line in submodule" >actual 2>&1 &&
|
||||
test_must_be_empty actual
|
||||
'
|
||||
test_done
|
||||
|
Reference in New Issue
Block a user