]>
Commit | Line | Data |
---|---|---|
60b6e220 JN |
1 | #!/bin/sh |
2 | ||
3 | test_description='Test automatic use of a pager.' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
fdf1bc48 JN |
7 | cleanup_fail() { |
8 | echo >&2 cleanup failed | |
9 | (exit 1) | |
10 | } | |
11 | ||
2d3ca216 | 12 | test_expect_success 'set up terminal for tests' ' |
fdf1bc48 JN |
13 | rm -f stdout_is_tty || |
14 | cleanup_fail && | |
15 | ||
60b6e220 JN |
16 | if test -t 1 |
17 | then | |
fdf1bc48 | 18 | >stdout_is_tty |
2d3ca216 JN |
19 | elif |
20 | test_have_prereq PERL && | |
21 | "$PERL_PATH" "$TEST_DIRECTORY"/t7006/test-terminal.perl \ | |
22 | sh -c "test -t 1" | |
23 | then | |
fdf1bc48 | 24 | >test_terminal_works |
60b6e220 JN |
25 | fi |
26 | ' | |
27 | ||
28 | if test -e stdout_is_tty | |
29 | then | |
2d3ca216 JN |
30 | test_terminal() { "$@"; } |
31 | test_set_prereq TTY | |
32 | elif test -e test_terminal_works | |
33 | then | |
34 | test_terminal() { | |
35 | "$PERL_PATH" "$TEST_DIRECTORY"/t7006/test-terminal.perl "$@" | |
36 | } | |
60b6e220 JN |
37 | test_set_prereq TTY |
38 | else | |
2d3ca216 | 39 | say no usable terminal, so skipping some tests |
60b6e220 JN |
40 | fi |
41 | ||
60b6e220 | 42 | test_expect_success 'setup' ' |
c289c315 | 43 | unset GIT_PAGER GIT_PAGER_IN_USE; |
fdf1bc48 JN |
44 | test_might_fail git config --unset core.pager && |
45 | ||
46 | PAGER="cat >paginated.out" && | |
47 | export PAGER && | |
48 | ||
60b6e220 JN |
49 | test_commit initial |
50 | ' | |
51 | ||
60b6e220 | 52 | test_expect_success TTY 'some commands use a pager' ' |
fdf1bc48 JN |
53 | rm -f paginated.out || |
54 | cleanup_fail && | |
55 | ||
2d3ca216 | 56 | test_terminal git log && |
60b6e220 JN |
57 | test -e paginated.out |
58 | ' | |
59 | ||
60b6e220 | 60 | test_expect_success TTY 'some commands do not use a pager' ' |
fdf1bc48 JN |
61 | rm -f paginated.out || |
62 | cleanup_fail && | |
63 | ||
2d3ca216 | 64 | test_terminal git rev-list HEAD && |
60b6e220 JN |
65 | ! test -e paginated.out |
66 | ' | |
67 | ||
60b6e220 | 68 | test_expect_success 'no pager when stdout is a pipe' ' |
fdf1bc48 JN |
69 | rm -f paginated.out || |
70 | cleanup_fail && | |
71 | ||
60b6e220 JN |
72 | git log | cat && |
73 | ! test -e paginated.out | |
74 | ' | |
75 | ||
60b6e220 | 76 | test_expect_success 'no pager when stdout is a regular file' ' |
fdf1bc48 JN |
77 | rm -f paginated.out || |
78 | cleanup_fail && | |
79 | ||
80 | git log >file && | |
60b6e220 JN |
81 | ! test -e paginated.out |
82 | ' | |
83 | ||
60b6e220 | 84 | test_expect_success TTY 'git --paginate rev-list uses a pager' ' |
fdf1bc48 JN |
85 | rm -f paginated.out || |
86 | cleanup_fail && | |
87 | ||
2d3ca216 | 88 | test_terminal git --paginate rev-list HEAD && |
60b6e220 JN |
89 | test -e paginated.out |
90 | ' | |
91 | ||
60b6e220 | 92 | test_expect_success 'no pager even with --paginate when stdout is a pipe' ' |
fdf1bc48 JN |
93 | rm -f file paginated.out || |
94 | cleanup_fail && | |
95 | ||
60b6e220 JN |
96 | git --paginate log | cat && |
97 | ! test -e paginated.out | |
98 | ' | |
99 | ||
60b6e220 | 100 | test_expect_success TTY 'no pager with --no-pager' ' |
fdf1bc48 JN |
101 | rm -f paginated.out || |
102 | cleanup_fail && | |
103 | ||
2d3ca216 | 104 | test_terminal git --no-pager log && |
60b6e220 JN |
105 | ! test -e paginated.out |
106 | ' | |
107 | ||
108 | # A colored commit log will begin with an appropriate ANSI escape | |
109 | # for the first color; the text "commit" comes later. | |
110 | colorful() { | |
fdf1bc48 | 111 | read firstline <$1 |
e0ae1e6f | 112 | ! expr "$firstline" : "[a-zA-Z]" >/dev/null |
60b6e220 JN |
113 | } |
114 | ||
60b6e220 | 115 | test_expect_success 'tests can detect color' ' |
fdf1bc48 JN |
116 | rm -f colorful.log colorless.log || |
117 | cleanup_fail && | |
118 | ||
119 | git log --no-color >colorless.log && | |
120 | git log --color >colorful.log && | |
60b6e220 JN |
121 | ! colorful colorless.log && |
122 | colorful colorful.log | |
123 | ' | |
124 | ||
60b6e220 | 125 | test_expect_success 'no color when stdout is a regular file' ' |
fdf1bc48 JN |
126 | rm -f colorless.log && |
127 | git config color.ui auto || | |
128 | cleanup_fail && | |
129 | ||
130 | git log >colorless.log && | |
60b6e220 JN |
131 | ! colorful colorless.log |
132 | ' | |
133 | ||
60b6e220 | 134 | test_expect_success TTY 'color when writing to a pager' ' |
fdf1bc48 JN |
135 | rm -f paginated.out && |
136 | git config color.ui auto || | |
137 | cleanup_fail && | |
138 | ||
139 | ( | |
140 | TERM=vt100 && | |
141 | export TERM && | |
142 | test_terminal git log | |
143 | ) && | |
60b6e220 JN |
144 | colorful paginated.out |
145 | ' | |
146 | ||
60b6e220 | 147 | test_expect_success 'color when writing to a file intended for a pager' ' |
fdf1bc48 JN |
148 | rm -f colorful.log && |
149 | git config color.ui auto || | |
150 | cleanup_fail && | |
151 | ||
152 | ( | |
153 | TERM=vt100 && | |
154 | GIT_PAGER_IN_USE=true && | |
155 | export TERM GIT_PAGER_IN_USE && | |
156 | git log >colorful.log | |
157 | ) && | |
60b6e220 JN |
158 | colorful colorful.log |
159 | ' | |
160 | ||
60b6e220 | 161 | test_expect_success 'determine default pager' ' |
c289c315 | 162 | unset PAGER GIT_PAGER; |
fdf1bc48 JN |
163 | test_might_fail git config --unset core.pager || |
164 | cleanup_fail && | |
165 | ||
60b6e220 JN |
166 | less=$(git var GIT_PAGER) && |
167 | test -n "$less" | |
168 | ' | |
169 | ||
e0ae1e6f | 170 | if expr "$less" : '[a-z][a-z]*$' >/dev/null && test_have_prereq TTY |
60b6e220 JN |
171 | then |
172 | test_set_prereq SIMPLEPAGER | |
173 | fi | |
174 | ||
60b6e220 | 175 | test_expect_success SIMPLEPAGER 'default pager is used by default' ' |
c289c315 | 176 | unset PAGER GIT_PAGER; |
fdf1bc48 JN |
177 | test_might_fail git config --unset core.pager && |
178 | rm -f default_pager_used || | |
179 | cleanup_fail && | |
180 | ||
181 | cat >$less <<-\EOF && | |
182 | #!/bin/sh | |
183 | wc >default_pager_used | |
60b6e220 JN |
184 | EOF |
185 | chmod +x $less && | |
fdf1bc48 JN |
186 | ( |
187 | PATH=.:$PATH && | |
188 | export PATH && | |
189 | test_terminal git log | |
190 | ) && | |
60b6e220 JN |
191 | test -e default_pager_used |
192 | ' | |
193 | ||
60b6e220 | 194 | test_expect_success TTY 'PAGER overrides default pager' ' |
c289c315 | 195 | unset GIT_PAGER; |
fdf1bc48 JN |
196 | test_might_fail git config --unset core.pager && |
197 | rm -f PAGER_used || | |
198 | cleanup_fail && | |
199 | ||
200 | PAGER="wc >PAGER_used" && | |
60b6e220 | 201 | export PAGER && |
2d3ca216 | 202 | test_terminal git log && |
60b6e220 JN |
203 | test -e PAGER_used |
204 | ' | |
205 | ||
60b6e220 | 206 | test_expect_success TTY 'core.pager overrides PAGER' ' |
c289c315 | 207 | unset GIT_PAGER; |
fdf1bc48 JN |
208 | rm -f core.pager_used || |
209 | cleanup_fail && | |
210 | ||
8c33b4cf | 211 | PAGER=wc && |
60b6e220 | 212 | export PAGER && |
fdf1bc48 | 213 | git config core.pager "wc >core.pager_used" && |
2d3ca216 | 214 | test_terminal git log && |
60b6e220 JN |
215 | test -e core.pager_used |
216 | ' | |
217 | ||
60b6e220 | 218 | test_expect_success TTY 'GIT_PAGER overrides core.pager' ' |
fdf1bc48 JN |
219 | rm -f GIT_PAGER_used || |
220 | cleanup_fail && | |
221 | ||
8c33b4cf | 222 | git config core.pager wc && |
fdf1bc48 | 223 | GIT_PAGER="wc >GIT_PAGER_used" && |
60b6e220 | 224 | export GIT_PAGER && |
2d3ca216 | 225 | test_terminal git log && |
60b6e220 JN |
226 | test -e GIT_PAGER_used |
227 | ' | |
228 | ||
229 | test_done |