1019125e52b247f312d442274d7d43139648afda
1#!/bin/sh
2
3test_description='Test grep recurse-submodules feature
4
5This test verifies the recurse-submodules feature correctly greps across
6submodules.
7'
8
9. ./test-lib.sh
10
11test_expect_success 'setup directory structure and submodule' '
12 echo "foobar" >a &&
13 mkdir b &&
14 echo "bar" >b/b &&
15 git add a b &&
16 git commit -m "add a and b" &&
17 git init submodule &&
18 echo "foobar" >submodule/a &&
19 git -C submodule add a &&
20 git -C submodule commit -m "add a" &&
21 git submodule add ./submodule &&
22 git commit -m "added submodule"
23'
24
25test_expect_success 'grep correctly finds patterns in a submodule' '
26 cat >expect <<-\EOF &&
27 a:foobar
28 b/b:bar
29 submodule/a:foobar
30 EOF
31
32 git grep -e "bar" --recurse-submodules >actual &&
33 test_cmp expect actual
34'
35
36test_expect_success 'grep and basic pathspecs' '
37 cat >expect <<-\EOF &&
38 submodule/a:foobar
39 EOF
40
41 git grep -e. --recurse-submodules -- submodule >actual &&
42 test_cmp expect actual
43'
44
45test_expect_success 'grep and nested submodules' '
46 git init submodule/sub &&
47 echo "foobar" >submodule/sub/a &&
48 git -C submodule/sub add a &&
49 git -C submodule/sub commit -m "add a" &&
50 git -C submodule submodule add ./sub &&
51 git -C submodule add sub &&
52 git -C submodule commit -m "added sub" &&
53 git add submodule &&
54 git commit -m "updated submodule" &&
55
56 cat >expect <<-\EOF &&
57 a:foobar
58 b/b:bar
59 submodule/a:foobar
60 submodule/sub/a:foobar
61 EOF
62
63 git grep -e "bar" --recurse-submodules >actual &&
64 test_cmp expect actual
65'
66
67test_expect_success 'grep and multiple patterns' '
68 cat >expect <<-\EOF &&
69 a:foobar
70 submodule/a:foobar
71 submodule/sub/a:foobar
72 EOF
73
74 git grep -e "bar" --and -e "foo" --recurse-submodules >actual &&
75 test_cmp expect actual
76'
77
78test_expect_success 'grep and multiple patterns' '
79 cat >expect <<-\EOF &&
80 b/b:bar
81 EOF
82
83 git grep -e "bar" --and --not -e "foo" --recurse-submodules >actual &&
84 test_cmp expect actual
85'
86
87test_incompatible_with_recurse_submodules ()
88{
89 test_expect_success "--recurse-submodules and $1 are incompatible" "
90 test_must_fail git grep -e. --recurse-submodules $1 2>actual &&
91 test_i18ngrep 'not supported with --recurse-submodules' actual
92 "
93}
94
95test_incompatible_with_recurse_submodules --untracked
96test_incompatible_with_recurse_submodules --no-index
97test_incompatible_with_recurse_submodules HEAD
98
99test_done