|
1 $ cat >> fakepager.py <<EOF |
|
2 > import sys |
|
3 > for line in sys.stdin: |
|
4 > sys.stdout.write('paged! %r\n' % line) |
|
5 > EOF |
|
6 |
|
7 Enable ui.formatted because pager won't fire without it, and set up |
|
8 pager and tell it to use our fake pager that lets us see when the |
|
9 pager was running. |
|
10 $ cat >> $HGRCPATH <<EOF |
|
11 > [ui] |
|
12 > formatted = yes |
|
13 > [extensions] |
|
14 > pager= |
|
15 > [pager] |
|
16 > pager = python $TESTTMP/fakepager.py |
|
17 > EOF |
|
18 |
|
19 $ hg init repo |
|
20 $ cd repo |
|
21 $ echo a >> a |
|
22 $ hg add a |
|
23 $ hg ci -m 'add a' |
|
24 $ for x in `python $TESTDIR/seq.py 1 10`; do |
|
25 > echo a $x >> a |
|
26 > hg ci -m "modify a $x" |
|
27 > done |
|
28 |
|
29 By default diff and log are paged, but summary is not: |
|
30 |
|
31 $ hg diff -c 2 --pager=yes |
|
32 paged! 'diff -r f4be7687d414 -r bce265549556 a\n' |
|
33 paged! '--- a/a\tThu Jan 01 00:00:00 1970 +0000\n' |
|
34 paged! '+++ b/a\tThu Jan 01 00:00:00 1970 +0000\n' |
|
35 paged! '@@ -1,2 +1,3 @@\n' |
|
36 paged! ' a\n' |
|
37 paged! ' a 1\n' |
|
38 paged! '+a 2\n' |
|
39 |
|
40 $ hg log --limit 2 |
|
41 paged! 'changeset: 10:46106edeeb38\n' |
|
42 paged! 'tag: tip\n' |
|
43 paged! 'user: test\n' |
|
44 paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' |
|
45 paged! 'summary: modify a 10\n' |
|
46 paged! '\n' |
|
47 paged! 'changeset: 9:6dd8ea7dd621\n' |
|
48 paged! 'user: test\n' |
|
49 paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' |
|
50 paged! 'summary: modify a 9\n' |
|
51 paged! '\n' |
|
52 |
|
53 BROKEN: should not be paged by default |
|
54 $ hg summary |
|
55 paged! 'parent: 10:46106edeeb38 tip\n' |
|
56 paged! ' modify a 10\n' |
|
57 paged! 'branch: default\n' |
|
58 paged! 'commit: (clean)\n' |
|
59 paged! 'update: (current)\n' |
|
60 paged! 'phases: 11 draft\n' |
|
61 |
|
62 We can enable the pager on summary: |
|
63 |
|
64 $ hg --config pager.attend-summary=yes summary |
|
65 paged! 'parent: 10:46106edeeb38 tip\n' |
|
66 paged! ' modify a 10\n' |
|
67 paged! 'branch: default\n' |
|
68 paged! 'commit: (clean)\n' |
|
69 paged! 'update: (current)\n' |
|
70 paged! 'phases: 11 draft\n' |
|
71 |
|
72 $ hg --config pager.attend-diff=no diff -c 2 |
|
73 diff -r f4be7687d414 -r bce265549556 a |
|
74 --- a/a Thu Jan 01 00:00:00 1970 +0000 |
|
75 +++ b/a Thu Jan 01 00:00:00 1970 +0000 |
|
76 @@ -1,2 +1,3 @@ |
|
77 a |
|
78 a 1 |
|
79 +a 2 |
|
80 |
|
81 If we completely change the attend list that's respected: |
|
82 BROKEN: diff should not be paged |
|
83 $ hg --config pager.attend=summary diff -c 2 |
|
84 paged! 'diff -r f4be7687d414 -r bce265549556 a\n' |
|
85 paged! '--- a/a\tThu Jan 01 00:00:00 1970 +0000\n' |
|
86 paged! '+++ b/a\tThu Jan 01 00:00:00 1970 +0000\n' |
|
87 paged! '@@ -1,2 +1,3 @@\n' |
|
88 paged! ' a\n' |
|
89 paged! ' a 1\n' |
|
90 paged! '+a 2\n' |
|
91 |
|
92 If 'log' is in attend, then 'history' should also be paged: |
|
93 $ hg history --limit 2 --config pager.attend=log |
|
94 paged! 'changeset: 10:46106edeeb38\n' |
|
95 paged! 'tag: tip\n' |
|
96 paged! 'user: test\n' |
|
97 paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' |
|
98 paged! 'summary: modify a 10\n' |
|
99 paged! '\n' |
|
100 paged! 'changeset: 9:6dd8ea7dd621\n' |
|
101 paged! 'user: test\n' |
|
102 paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' |
|
103 paged! 'summary: modify a 9\n' |
|
104 paged! '\n' |
|
105 |
|
106 Possible bug: history is explicitly ignored in pager config, but |
|
107 because log is in the attend list it still gets pager treatment. |
|
108 |
|
109 $ hg history --limit 2 --config pager.attend=log \ |
|
110 > --config pager.ignore=history |
|
111 paged! 'changeset: 10:46106edeeb38\n' |
|
112 paged! 'tag: tip\n' |
|
113 paged! 'user: test\n' |
|
114 paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' |
|
115 paged! 'summary: modify a 10\n' |
|
116 paged! '\n' |
|
117 paged! 'changeset: 9:6dd8ea7dd621\n' |
|
118 paged! 'user: test\n' |
|
119 paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' |
|
120 paged! 'summary: modify a 9\n' |
|
121 paged! '\n' |
|
122 |
|
123 Possible bug: history is explicitly marked as attend-history=no, but |
|
124 it doesn't fail to get paged because log is still in the attend list. |
|
125 |
|
126 $ hg history --limit 2 --config pager.attend-history=no |
|
127 paged! 'changeset: 10:46106edeeb38\n' |
|
128 paged! 'tag: tip\n' |
|
129 paged! 'user: test\n' |
|
130 paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' |
|
131 paged! 'summary: modify a 10\n' |
|
132 paged! '\n' |
|
133 paged! 'changeset: 9:6dd8ea7dd621\n' |
|
134 paged! 'user: test\n' |
|
135 paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' |
|
136 paged! 'summary: modify a 9\n' |
|
137 paged! '\n' |
|
138 |
|
139 Possible bug: disabling pager for log but enabling it for history |
|
140 doesn't result in history being paged. |
|
141 |
|
142 $ hg history --limit 2 --config pager.attend-log=no \ |
|
143 > --config pager.attend-history=yes |
|
144 changeset: 10:46106edeeb38 |
|
145 tag: tip |
|
146 user: test |
|
147 date: Thu Jan 01 00:00:00 1970 +0000 |
|
148 summary: modify a 10 |
|
149 |
|
150 changeset: 9:6dd8ea7dd621 |
|
151 user: test |
|
152 date: Thu Jan 01 00:00:00 1970 +0000 |
|
153 summary: modify a 9 |
|
154 |
|
155 Pager should not start if stdout is not a tty. |
|
156 |
|
157 $ hg log -l1 -q --config ui.formatted=False |
|
158 10:46106edeeb38 |
|
159 |
|
160 Pager with color enabled allows colors to come through by default, |
|
161 even though stdout is no longer a tty. |
|
162 $ cat >> $HGRCPATH <<EOF |
|
163 > [extensions] |
|
164 > color= |
|
165 > [color] |
|
166 > mode = ansi |
|
167 > EOF |
|
168 $ hg log --limit 3 |
|
169 paged! '\x1b[0;33mchangeset: 10:46106edeeb38\x1b[0m\n' |
|
170 paged! 'tag: tip\n' |
|
171 paged! 'user: test\n' |
|
172 paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' |
|
173 paged! 'summary: modify a 10\n' |
|
174 paged! '\n' |
|
175 paged! '\x1b[0;33mchangeset: 9:6dd8ea7dd621\x1b[0m\n' |
|
176 paged! 'user: test\n' |
|
177 paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' |
|
178 paged! 'summary: modify a 9\n' |
|
179 paged! '\n' |
|
180 paged! '\x1b[0;33mchangeset: 8:cff05a6312fe\x1b[0m\n' |
|
181 paged! 'user: test\n' |
|
182 paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' |
|
183 paged! 'summary: modify a 8\n' |
|
184 paged! '\n' |
|
185 |
|
186 Pager works with shell aliases. |
|
187 |
|
188 $ cat >> $HGRCPATH <<EOF |
|
189 > [alias] |
|
190 > echoa = !echo a |
|
191 > EOF |
|
192 |
|
193 $ hg echoa |
|
194 a |
|
195 $ hg --config pager.attend-echoa=yes echoa |
|
196 paged! 'a\n' |
|
197 |
|
198 Pager works with hg aliases including environment variables. |
|
199 |
|
200 $ cat >> $HGRCPATH <<'EOF' |
|
201 > [alias] |
|
202 > printa = log -T "$A\n" -r 0 |
|
203 > EOF |
|
204 |
|
205 $ A=1 hg --config pager.attend-printa=yes printa |
|
206 paged! '1\n' |
|
207 $ A=2 hg --config pager.attend-printa=yes printa |
|
208 paged! '2\n' |
|
209 |
|
210 Something that's explicitly attended is still not paginated if the |
|
211 pager is globally set to off using a flag: |
|
212 $ A=2 hg --config pager.attend-printa=yes printa --pager=no |
|
213 2 |
|
214 |
|
215 Pager should not override the exit code of other commands |
|
216 |
|
217 $ cat >> $TESTTMP/fortytwo.py <<'EOF' |
|
218 > from mercurial import cmdutil, commands |
|
219 > cmdtable = {} |
|
220 > command = cmdutil.command(cmdtable) |
|
221 > @command('fortytwo', [], 'fortytwo', norepo=True) |
|
222 > def fortytwo(ui, *opts): |
|
223 > ui.write('42\n') |
|
224 > return 42 |
|
225 > EOF |
|
226 |
|
227 $ cat >> $HGRCPATH <<'EOF' |
|
228 > [extensions] |
|
229 > fortytwo = $TESTTMP/fortytwo.py |
|
230 > EOF |
|
231 |
|
232 $ hg fortytwo --pager=on |
|
233 paged! '42\n' |
|
234 [42] |