Code

grep -O: allow optional argument specifying the pager (or editor)
[git.git] / t / t7811-grep-open.sh
1 #!/bin/sh
3 test_description='git grep --open-files-in-pager
4 '
6 . ./test-lib.sh
7 . "$TEST_DIRECTORY"/lib-pager.sh
8 unset PAGER GIT_PAGER
10 test_expect_success 'setup' '
11         test_commit initial grep.h "
12 enum 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 };" &&
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 }
30 static 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 " &&
35         mkdir subdir &&
36         test_commit subdir subdir/grep.c "enum grep_pat_token" &&
38         test_commit uninteresting unrelated "hello, world" &&
40         echo GREP_PATTERN >untracked
41 '
43 test_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 &&
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 '
64 test_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 '
69 test_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 &&
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 '
86 test_expect_success 'setup: fake "less"' '
87         cat >less <<-\EOF
88         #!/bin/sh
89         printf "%s\n" "$@" >actual
90         EOF
91 '
93 test_expect_success 'git grep -O jumps to line in less' '
94         cat >expect <<-\EOF &&
95         +/*GREP_PATTERN
96         grep.h
97         EOF
98         >empty &&
100         GIT_PAGER=./less git grep -O GREP_PATTERN >out &&
101         test_cmp expect actual &&
102         test_cmp empty out &&
104         git grep -O./less GREP_PATTERN >out2 &&
105         test_cmp expect actual &&
106         test_cmp empty out2
109 test_expect_success 'modified file' '
110         rm -f actual &&
111         cat >less <<-\EOF &&
112         #!/bin/sh
113         printf "%s\n" "$@" >actual
114         EOF
115         chmod +x $less &&
116         cat >expect <<-\EOF &&
117         +/*enum grep_pat_token
118         grep.h
119         revision.c
120         subdir/grep.c
121         unrelated
122         EOF
123         >empty &&
125         echo "enum grep_pat_token" >unrelated &&
126         test_when_finished "git checkout HEAD unrelated" &&
127         GIT_PAGER=./less git grep -F -O "enum grep_pat_token" >out &&
128         test_cmp expect actual &&
129         test_cmp empty out
132 test_expect_success 'run from subdir' '
133         rm -f actual &&
134         echo grep.c >expect &&
135         >empty &&
137         (
138                 cd subdir &&
139                 export GIT_PAGER &&
140                 GIT_PAGER='\''printf "%s\n" >../args'\'' &&
141                 git grep -O "enum grep_pat_token" >../out &&
142                 git grep -O"pwd >../dir; :" "enum grep_pat_token" >../out2
143         ) &&
144         case $(cat dir) in
145         *subdir)
146                 : good
147                 ;;
148         *)
149                 false
150                 ;;
151         esac &&
152         test_cmp expect args &&
153         test_cmp empty out &&
154         test_cmp empty out2
157 test_done