grep: optionally recurse into submodules
[git] / t / t7814-grep-recurse-submodules.sh
1 #!/bin/sh
2
3 test_description='Test grep recurse-submodules feature
4
5 This test verifies the recurse-submodules feature correctly greps across
6 submodules.
7 '
8
9 . ./test-lib.sh
10
11 test_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
25 test_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
36 test_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
45 test_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
67 test_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
78 test_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
87 test_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
95 test_incompatible_with_recurse_submodules --untracked
96 test_incompatible_with_recurse_submodules --no-index
97 test_incompatible_with_recurse_submodules HEAD
98
99 test_done