]> git.ipfire.org Git - thirdparty/git.git/blame - t/t7811-grep-open.sh
perl: bump the required Perl version to 5.8 from 5.6.[21]
[thirdparty/git.git] / t / t7811-grep-open.sh
CommitLineData
678e484b
JS
1#!/bin/sh
2
3test_description='git grep --open-files-in-pager
4'
5
6. ./test-lib.sh
7. "$TEST_DIRECTORY"/lib-pager.sh
8unset PAGER GIT_PAGER
9
10test_expect_success 'setup' '
11 test_commit initial grep.h "
12enum grep_pat_token {
13 GREP_PATTERN,
14 GREP_PATTERN_HEAD,
15 GREP_PATTERN_BODY,
16 GREP_AND,
17 GREP_OPEN_PAREN,
18 GREP_CLOSE_PAREN,
19 GREP_NOT,
20 GREP_OR,
21};" &&
22
23 test_commit add-user revision.c "
24 }
25 if (seen_dashdash)
26 read_pathspec_from_stdin(revs, &sb, prune);
27 strbuf_release(&sb);
28}
29
30static void add_grep(struct rev_info *revs, const char *ptn, enum grep_pat_token what)
31{
32 append_grep_pattern(&revs->grep_filter, ptn, \"command line\", 0, what);
33" &&
34
35 mkdir subdir &&
36 test_commit subdir subdir/grep.c "enum grep_pat_token" &&
37
38 test_commit uninteresting unrelated "hello, world" &&
39
40 echo GREP_PATTERN >untracked
41'
42
43test_expect_success SIMPLEPAGER 'git grep -O' '
44 cat >$less <<-\EOF &&
45 #!/bin/sh
46 printf "%s\n" "$@" >pager-args
47 EOF
48 chmod +x $less &&
49 cat >expect.less <<-\EOF &&
50 +/*GREP_PATTERN
51 grep.h
52 EOF
53 echo grep.h >expect.notless &&
54 >empty &&
55
56 PATH=.:$PATH git grep -O GREP_PATTERN >out &&
57 {
58 test_cmp expect.less pager-args ||
59 test_cmp expect.notless pager-args
60 } &&
61 test_cmp empty out
62'
63
64test_expect_success 'git grep -O --cached' '
65 test_must_fail git grep --cached -O GREP_PATTERN >out 2>msg &&
66 grep open-files-in-pager msg
67'
68
69test_expect_success 'git grep -O --no-index' '
70 rm -f expect.less pager-args out &&
71 cat >expect <<-\EOF &&
72 grep.h
73 untracked
74 EOF
75 >empty &&
76
77 (
78 GIT_PAGER='\''printf "%s\n" >pager-args'\'' &&
79 export GIT_PAGER &&
80 git grep --no-index -O GREP_PATTERN >out
81 ) &&
82 test_cmp expect pager-args &&
83 test_cmp empty out
84'
85
86test_expect_success 'setup: fake "less"' '
6a1b3fc7 87 cat >less <<-\EOF &&
678e484b
JS
88 #!/bin/sh
89 printf "%s\n" "$@" >actual
90 EOF
6a1b3fc7 91 chmod +x less
678e484b
JS
92'
93
94test_expect_success 'git grep -O jumps to line in less' '
95 cat >expect <<-\EOF &&
96 +/*GREP_PATTERN
97 grep.h
98 EOF
99 >empty &&
100
101 GIT_PAGER=./less git grep -O GREP_PATTERN >out &&
102 test_cmp expect actual &&
0af88c15
JS
103 test_cmp empty out &&
104
105 git grep -O./less GREP_PATTERN >out2 &&
106 test_cmp expect actual &&
107 test_cmp empty out2
678e484b
JS
108'
109
110test_expect_success 'modified file' '
111 rm -f actual &&
678e484b
JS
112 cat >expect <<-\EOF &&
113 +/*enum grep_pat_token
114 grep.h
115 revision.c
116 subdir/grep.c
117 unrelated
118 EOF
119 >empty &&
120
121 echo "enum grep_pat_token" >unrelated &&
122 test_when_finished "git checkout HEAD unrelated" &&
123 GIT_PAGER=./less git grep -F -O "enum grep_pat_token" >out &&
124 test_cmp expect actual &&
125 test_cmp empty out
126'
127
e7b082a4
NR
128test_config() {
129 git config "$1" "$2" &&
130 test_when_finished "git config --unset $1"
131}
132
133test_expect_success 'copes with color settings' '
134 rm -f actual &&
135 echo grep.h >expect &&
136 test_config color.grep always &&
137 test_config color.grep.filename yellow &&
138 test_config color.grep.separator green &&
139 git grep -O'\''printf "%s\n" >actual'\'' GREP_AND &&
140 test_cmp expect actual
141'
142
678e484b
JS
143test_expect_success 'run from subdir' '
144 rm -f actual &&
145 echo grep.c >expect &&
146 >empty &&
147
148 (
149 cd subdir &&
150 export GIT_PAGER &&
151 GIT_PAGER='\''printf "%s\n" >../args'\'' &&
152 git grep -O "enum grep_pat_token" >../out &&
0af88c15 153 git grep -O"pwd >../dir; :" "enum grep_pat_token" >../out2
678e484b
JS
154 ) &&
155 case $(cat dir) in
156 *subdir)
157 : good
158 ;;
159 *)
160 false
161 ;;
162 esac &&
163 test_cmp expect args &&
164 test_cmp empty out &&
165 test_cmp empty out2
166'
167
168test_done