##// END OF EJS Templates
hgweb: add z-index for search field tooltip...
av6 -
r38500:a8872a82 default
parent child Browse files
Show More
@@ -1,388 +1,389 b''
1 body { font-family: sans-serif; font-size: 12px; border:solid #d9d8d1; border-width:1px; margin:10px; background: white; color: black; }
1 body { font-family: sans-serif; font-size: 12px; border:solid #d9d8d1; border-width:1px; margin:10px; background: white; color: black; }
2 a { color:#0000cc; }
2 a { color:#0000cc; }
3 a:hover, a:visited, a:active { color:#880000; }
3 a:hover, a:visited, a:active { color:#880000; }
4 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
4 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
5 div.page_header a:visited { color:#0000cc; }
5 div.page_header a:visited { color:#0000cc; }
6 div.page_header a:hover { color:#880000; }
6 div.page_header a:hover { color:#880000; }
7 div.page_nav {
7 div.page_nav {
8 padding:8px;
8 padding:8px;
9 display: flex;
9 display: flex;
10 justify-content: space-between;
10 justify-content: space-between;
11 align-items: center;
11 align-items: center;
12 }
12 }
13 div.page_nav a:visited { color:#0000cc; }
13 div.page_nav a:visited { color:#0000cc; }
14 div.extra_nav {
14 div.extra_nav {
15 padding: 8px;
15 padding: 8px;
16 }
16 }
17 div.extra_nav a:visited {
17 div.extra_nav a:visited {
18 color: #0000cc;
18 color: #0000cc;
19 }
19 }
20 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
20 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
21 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
21 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
22 div.page_footer_text { float:left; color:#555555; font-style:italic; }
22 div.page_footer_text { float:left; color:#555555; font-style:italic; }
23 div.page_body { padding:8px; }
23 div.page_body { padding:8px; }
24 div.title, a.title {
24 div.title, a.title {
25 display:block; padding:6px 8px;
25 display:block; padding:6px 8px;
26 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
26 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
27 }
27 }
28 a.title:hover { background-color: #d9d8d1; }
28 a.title:hover { background-color: #d9d8d1; }
29 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
29 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
30 div.log_body { padding:8px 8px 8px 150px; }
30 div.log_body { padding:8px 8px 8px 150px; }
31 .age { white-space:nowrap; }
31 .age { white-space:nowrap; }
32 a.title span.age { position:relative; float:left; width:142px; font-style:italic; }
32 a.title span.age { position:relative; float:left; width:142px; font-style:italic; }
33 div.log_link {
33 div.log_link {
34 padding:0px 8px;
34 padding:0px 8px;
35 font-size:10px; font-family:sans-serif; font-style:normal;
35 font-size:10px; font-family:sans-serif; font-style:normal;
36 position:relative; float:left; width:136px;
36 position:relative; float:left; width:136px;
37 }
37 }
38 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
38 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
39 a.list { text-decoration:none; color:#000000; }
39 a.list { text-decoration:none; color:#000000; }
40 a.list:hover { text-decoration:underline; color:#880000; }
40 a.list:hover { text-decoration:underline; color:#880000; }
41 table { padding:8px 4px; }
41 table { padding:8px 4px; }
42 th { padding:2px 5px; font-size:12px; text-align:left; }
42 th { padding:2px 5px; font-size:12px; text-align:left; }
43 .parity0 { background-color:#ffffff; }
43 .parity0 { background-color:#ffffff; }
44 tr.dark, .parity1, pre.sourcelines.stripes > :nth-child(4n+4) { background-color:#f6f6f0; }
44 tr.dark, .parity1, pre.sourcelines.stripes > :nth-child(4n+4) { background-color:#f6f6f0; }
45 tr.light:hover, .parity0:hover, tr.dark:hover, .parity1:hover,
45 tr.light:hover, .parity0:hover, tr.dark:hover, .parity1:hover,
46 pre.sourcelines.stripes > :nth-child(4n+2):hover,
46 pre.sourcelines.stripes > :nth-child(4n+2):hover,
47 pre.sourcelines.stripes > :nth-child(4n+4):hover,
47 pre.sourcelines.stripes > :nth-child(4n+4):hover,
48 pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
48 pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
49 pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color:#edece6; }
49 pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color:#edece6; }
50 td { padding:2px 5px; font-size:12px; vertical-align:top; }
50 td { padding:2px 5px; font-size:12px; vertical-align:top; }
51 td.closed { background-color: #99f; }
51 td.closed { background-color: #99f; }
52 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
52 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
53 td.indexlinks { white-space: nowrap; }
53 td.indexlinks { white-space: nowrap; }
54 td.indexlinks a {
54 td.indexlinks a {
55 padding: 2px 5px; line-height: 10px;
55 padding: 2px 5px; line-height: 10px;
56 border: 1px solid;
56 border: 1px solid;
57 color: #ffffff; background-color: #7777bb;
57 color: #ffffff; background-color: #7777bb;
58 border-color: #aaaadd #333366 #333366 #aaaadd;
58 border-color: #aaaadd #333366 #333366 #aaaadd;
59 font-weight: bold; text-align: center; text-decoration: none;
59 font-weight: bold; text-align: center; text-decoration: none;
60 font-size: 10px;
60 font-size: 10px;
61 }
61 }
62 td.indexlinks a:hover { background-color: #6666aa; }
62 td.indexlinks a:hover { background-color: #6666aa; }
63 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
63 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
64
64
65 .search {
65 .search {
66 margin-right: 8px;
66 margin-right: 8px;
67 }
67 }
68
68
69 div#hint {
69 div#hint {
70 position: absolute;
70 position: absolute;
71 display: none;
71 display: none;
72 width: 250px;
72 width: 250px;
73 padding: 5px;
73 padding: 5px;
74 background: #ffc;
74 background: #ffc;
75 border: 1px solid yellow;
75 border: 1px solid yellow;
76 border-radius: 5px;
76 border-radius: 5px;
77 z-index: 15;
77 }
78 }
78
79
79 #searchform:hover div#hint { display: block; }
80 #searchform:hover div#hint { display: block; }
80
81
81 tr.thisrev a { color:#999999; text-decoration: none; }
82 tr.thisrev a { color:#999999; text-decoration: none; }
82 tr.thisrev pre { color:#009900; }
83 tr.thisrev pre { color:#009900; }
83 td.annotate {
84 td.annotate {
84 white-space: nowrap;
85 white-space: nowrap;
85 }
86 }
86 div.annotate-info {
87 div.annotate-info {
87 z-index: 5;
88 z-index: 5;
88 display: none;
89 display: none;
89 position: absolute;
90 position: absolute;
90 background-color: #FFFFFF;
91 background-color: #FFFFFF;
91 border: 1px solid #d9d8d1;
92 border: 1px solid #d9d8d1;
92 text-align: left;
93 text-align: left;
93 color: #000000;
94 color: #000000;
94 padding: 5px;
95 padding: 5px;
95 }
96 }
96 div.annotate-info a { color: #0000FF; text-decoration: underline; }
97 div.annotate-info a { color: #0000FF; text-decoration: underline; }
97 td.annotate:hover div.annotate-info { display: inline; }
98 td.annotate:hover div.annotate-info { display: inline; }
98
99
99 #diffopts-form {
100 #diffopts-form {
100 padding-left: 8px;
101 padding-left: 8px;
101 display: none;
102 display: none;
102 }
103 }
103
104
104 .linenr { color:#999999; text-decoration:none }
105 .linenr { color:#999999; text-decoration:none }
105 div.rss_logo { float: right; white-space: nowrap; }
106 div.rss_logo { float: right; white-space: nowrap; }
106 div.rss_logo a {
107 div.rss_logo a {
107 padding:3px 6px; line-height:10px;
108 padding:3px 6px; line-height:10px;
108 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
109 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
109 color:#ffffff; background-color:#ff6600;
110 color:#ffffff; background-color:#ff6600;
110 font-weight:bold; font-family:sans-serif; font-size:10px;
111 font-weight:bold; font-family:sans-serif; font-size:10px;
111 text-align:center; text-decoration:none;
112 text-align:center; text-decoration:none;
112 }
113 }
113 div.rss_logo a:hover { background-color:#ee5500; }
114 div.rss_logo a:hover { background-color:#ee5500; }
114 pre { margin: 0; }
115 pre { margin: 0; }
115 span.logtags span {
116 span.logtags span {
116 padding: 0px 4px;
117 padding: 0px 4px;
117 font-size: 10px;
118 font-size: 10px;
118 font-weight: normal;
119 font-weight: normal;
119 border: 1px solid;
120 border: 1px solid;
120 background-color: #ffaaff;
121 background-color: #ffaaff;
121 border-color: #ffccff #ff00ee #ff00ee #ffccff;
122 border-color: #ffccff #ff00ee #ff00ee #ffccff;
122 }
123 }
123 span.logtags span.phasetag {
124 span.logtags span.phasetag {
124 background-color: #dfafff;
125 background-color: #dfafff;
125 border-color: #e2b8ff #ce48ff #ce48ff #e2b8ff;
126 border-color: #e2b8ff #ce48ff #ce48ff #e2b8ff;
126 }
127 }
127 span.logtags span.obsoletetag {
128 span.logtags span.obsoletetag {
128 background-color: #dddddd;
129 background-color: #dddddd;
129 border-color: #e4e4e4 #a3a3a3 #a3a3a3 #e4e4e4;
130 border-color: #e4e4e4 #a3a3a3 #a3a3a3 #e4e4e4;
130 }
131 }
131 span.logtags span.instabilitytag {
132 span.logtags span.instabilitytag {
132 background-color: #ffb1c0;
133 background-color: #ffb1c0;
133 border-color: #ffbbc8 #ff4476 #ff4476 #ffbbc8;
134 border-color: #ffbbc8 #ff4476 #ff4476 #ffbbc8;
134 }
135 }
135 span.logtags span.tagtag {
136 span.logtags span.tagtag {
136 background-color: #ffffaa;
137 background-color: #ffffaa;
137 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
138 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
138 }
139 }
139 span.logtags span.branchtag {
140 span.logtags span.branchtag {
140 background-color: #aaffaa;
141 background-color: #aaffaa;
141 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
142 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
142 }
143 }
143 span.logtags span.inbranchtag {
144 span.logtags span.inbranchtag {
144 background-color: #d5dde6;
145 background-color: #d5dde6;
145 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
146 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
146 }
147 }
147 span.logtags span.bookmarktag {
148 span.logtags span.bookmarktag {
148 background-color: #afdffa;
149 background-color: #afdffa;
149 border-color: #ccecff #46ace6 #46ace6 #ccecff;
150 border-color: #ccecff #46ace6 #46ace6 #ccecff;
150 }
151 }
151 span.difflineplus { color:#008800; }
152 span.difflineplus { color:#008800; }
152 span.difflineminus { color:#cc0000; }
153 span.difflineminus { color:#cc0000; }
153 span.difflineat { color:#990099; }
154 span.difflineat { color:#990099; }
154 div.diffblocks { counter-reset: lineno; }
155 div.diffblocks { counter-reset: lineno; }
155 div.diffblock { counter-increment: lineno; }
156 div.diffblock { counter-increment: lineno; }
156 pre.sourcelines { position: relative; counter-reset: lineno; }
157 pre.sourcelines { position: relative; counter-reset: lineno; }
157 pre.sourcelines > span {
158 pre.sourcelines > span {
158 display: inline-block;
159 display: inline-block;
159 box-sizing: border-box;
160 box-sizing: border-box;
160 width: 100%;
161 width: 100%;
161 padding: 0 0 0 5em;
162 padding: 0 0 0 5em;
162 counter-increment: lineno;
163 counter-increment: lineno;
163 vertical-align: top;
164 vertical-align: top;
164 }
165 }
165 pre.sourcelines > span:before {
166 pre.sourcelines > span:before {
166 -moz-user-select: -moz-none;
167 -moz-user-select: -moz-none;
167 -khtml-user-select: none;
168 -khtml-user-select: none;
168 -webkit-user-select: none;
169 -webkit-user-select: none;
169 -ms-user-select: none;
170 -ms-user-select: none;
170 user-select: none;
171 user-select: none;
171 display: inline-block;
172 display: inline-block;
172 margin-left: -6em;
173 margin-left: -6em;
173 width: 4em;
174 width: 4em;
174 color: #999;
175 color: #999;
175 text-align: right;
176 text-align: right;
176 content: counters(lineno,".");
177 content: counters(lineno,".");
177 float: left;
178 float: left;
178 }
179 }
179 pre.sourcelines > a {
180 pre.sourcelines > a {
180 display: inline-block;
181 display: inline-block;
181 position: absolute;
182 position: absolute;
182 left: 0px;
183 left: 0px;
183 width: 4em;
184 width: 4em;
184 height: 1em;
185 height: 1em;
185 }
186 }
186 tr:target td,
187 tr:target td,
187 pre.sourcelines > span:target,
188 pre.sourcelines > span:target,
188 pre.sourcelines.stripes > span:target {
189 pre.sourcelines.stripes > span:target {
189 background-color: #bfdfff;
190 background-color: #bfdfff;
190 }
191 }
191
192
192 .description {
193 .description {
193 font-family: monospace;
194 font-family: monospace;
194 white-space: pre;
195 white-space: pre;
195 }
196 }
196
197
197 /* Followlines */
198 /* Followlines */
198 tbody.sourcelines > tr.followlines-selected,
199 tbody.sourcelines > tr.followlines-selected,
199 pre.sourcelines > span.followlines-selected {
200 pre.sourcelines > span.followlines-selected {
200 background-color: #99C7E9 !important;
201 background-color: #99C7E9 !important;
201 }
202 }
202
203
203 div#followlines {
204 div#followlines {
204 background-color: #FFF;
205 background-color: #FFF;
205 border: 1px solid #d9d8d1;
206 border: 1px solid #d9d8d1;
206 padding: 5px;
207 padding: 5px;
207 position: fixed;
208 position: fixed;
208 }
209 }
209
210
210 div.followlines-cancel {
211 div.followlines-cancel {
211 text-align: right;
212 text-align: right;
212 }
213 }
213
214
214 div.followlines-cancel > button {
215 div.followlines-cancel > button {
215 line-height: 80%;
216 line-height: 80%;
216 padding: 0;
217 padding: 0;
217 border: 0;
218 border: 0;
218 border-radius: 2px;
219 border-radius: 2px;
219 background-color: inherit;
220 background-color: inherit;
220 font-weight: bold;
221 font-weight: bold;
221 }
222 }
222
223
223 div.followlines-cancel > button:hover {
224 div.followlines-cancel > button:hover {
224 color: #FFFFFF;
225 color: #FFFFFF;
225 background-color: #CF1F1F;
226 background-color: #CF1F1F;
226 }
227 }
227
228
228 div.followlines-link {
229 div.followlines-link {
229 margin: 2px;
230 margin: 2px;
230 margin-top: 4px;
231 margin-top: 4px;
231 font-family: sans-serif;
232 font-family: sans-serif;
232 }
233 }
233
234
234 .btn-followlines {
235 .btn-followlines {
235 position: absolute;
236 position: absolute;
236 display: none;
237 display: none;
237 cursor: pointer;
238 cursor: pointer;
238 box-sizing: content-box;
239 box-sizing: content-box;
239 font-size: 11px;
240 font-size: 11px;
240 width: 13px;
241 width: 13px;
241 height: 13px;
242 height: 13px;
242 border-radius: 3px;
243 border-radius: 3px;
243 margin: 0px;
244 margin: 0px;
244 margin-top: -2px;
245 margin-top: -2px;
245 padding: 0px;
246 padding: 0px;
246 background-color: #E5FDE5;
247 background-color: #E5FDE5;
247 border: 1px solid #9BC19B;
248 border: 1px solid #9BC19B;
248 font-family: monospace;
249 font-family: monospace;
249 text-align: center;
250 text-align: center;
250 line-height: 5px;
251 line-height: 5px;
251 }
252 }
252
253
253 span.followlines-select .btn-followlines {
254 span.followlines-select .btn-followlines {
254 margin-left: -1.6em;
255 margin-left: -1.6em;
255 }
256 }
256
257
257 .btn-followlines:hover {
258 .btn-followlines:hover {
258 transform: scale(1.1, 1.1);
259 transform: scale(1.1, 1.1);
259 }
260 }
260
261
261 .btn-followlines .followlines-plus {
262 .btn-followlines .followlines-plus {
262 color: green;
263 color: green;
263 }
264 }
264
265
265 .btn-followlines .followlines-minus {
266 .btn-followlines .followlines-minus {
266 color: red;
267 color: red;
267 }
268 }
268
269
269 .btn-followlines-end {
270 .btn-followlines-end {
270 background-color: #ffdcdc;
271 background-color: #ffdcdc;
271 }
272 }
272
273
273 .sourcelines tr:hover .btn-followlines,
274 .sourcelines tr:hover .btn-followlines,
274 .sourcelines span.followlines-select:hover > .btn-followlines {
275 .sourcelines span.followlines-select:hover > .btn-followlines {
275 display: inline;
276 display: inline;
276 }
277 }
277
278
278 .btn-followlines-hidden,
279 .btn-followlines-hidden,
279 .sourcelines tr:hover .btn-followlines-hidden {
280 .sourcelines tr:hover .btn-followlines-hidden {
280 display: none;
281 display: none;
281 }
282 }
282
283
283 /* Graph */
284 /* Graph */
284 div#wrapper {
285 div#wrapper {
285 position: relative;
286 position: relative;
286 margin: 0;
287 margin: 0;
287 padding: 0;
288 padding: 0;
288 margin-top: 3px;
289 margin-top: 3px;
289 }
290 }
290
291
291 canvas {
292 canvas {
292 position: absolute;
293 position: absolute;
293 z-index: 5;
294 z-index: 5;
294 top: -0.9em;
295 top: -0.9em;
295 margin: 0;
296 margin: 0;
296 }
297 }
297
298
298 ul#graphnodes {
299 ul#graphnodes {
299 list-style: none inside none;
300 list-style: none inside none;
300 padding: 0;
301 padding: 0;
301 margin: 0;
302 margin: 0;
302 }
303 }
303
304
304 ul#graphnodes li {
305 ul#graphnodes li {
305 position: relative;
306 position: relative;
306 height: 37px;
307 height: 37px;
307 overflow: visible;
308 overflow: visible;
308 padding-top: 2px;
309 padding-top: 2px;
309 }
310 }
310
311
311 ul#graphnodes li .fg {
312 ul#graphnodes li .fg {
312 position: absolute;
313 position: absolute;
313 z-index: 10;
314 z-index: 10;
314 }
315 }
315
316
316 ul#graphnodes li .info {
317 ul#graphnodes li .info {
317 font-size: 100%;
318 font-size: 100%;
318 font-style: italic;
319 font-style: italic;
319 }
320 }
320
321
321 /* Comparison */
322 /* Comparison */
322 .legend {
323 .legend {
323 padding: 1.5% 0 1.5% 0;
324 padding: 1.5% 0 1.5% 0;
324 }
325 }
325
326
326 .legendinfo {
327 .legendinfo {
327 border: 1px solid #d9d8d1;
328 border: 1px solid #d9d8d1;
328 font-size: 80%;
329 font-size: 80%;
329 text-align: center;
330 text-align: center;
330 padding: 0.5%;
331 padding: 0.5%;
331 }
332 }
332
333
333 .equal {
334 .equal {
334 background-color: #ffffff;
335 background-color: #ffffff;
335 }
336 }
336
337
337 .delete {
338 .delete {
338 background-color: #faa;
339 background-color: #faa;
339 color: #333;
340 color: #333;
340 }
341 }
341
342
342 .insert {
343 .insert {
343 background-color: #ffa;
344 background-color: #ffa;
344 }
345 }
345
346
346 .replace {
347 .replace {
347 background-color: #e8e8e8;
348 background-color: #e8e8e8;
348 }
349 }
349
350
350 .comparison {
351 .comparison {
351 overflow-x: auto;
352 overflow-x: auto;
352 }
353 }
353
354
354 .header th {
355 .header th {
355 text-align: center;
356 text-align: center;
356 }
357 }
357
358
358 .block {
359 .block {
359 border-top: 1px solid #d9d8d1;
360 border-top: 1px solid #d9d8d1;
360 }
361 }
361
362
362 .scroll-loading {
363 .scroll-loading {
363 -webkit-animation: change_color 1s linear 0s infinite alternate;
364 -webkit-animation: change_color 1s linear 0s infinite alternate;
364 -moz-animation: change_color 1s linear 0s infinite alternate;
365 -moz-animation: change_color 1s linear 0s infinite alternate;
365 -o-animation: change_color 1s linear 0s infinite alternate;
366 -o-animation: change_color 1s linear 0s infinite alternate;
366 animation: change_color 1s linear 0s infinite alternate;
367 animation: change_color 1s linear 0s infinite alternate;
367 }
368 }
368
369
369 @-webkit-keyframes change_color {
370 @-webkit-keyframes change_color {
370 from { background-color: #A0CEFF; } to { }
371 from { background-color: #A0CEFF; } to { }
371 }
372 }
372 @-moz-keyframes change_color {
373 @-moz-keyframes change_color {
373 from { background-color: #A0CEFF; } to { }
374 from { background-color: #A0CEFF; } to { }
374 }
375 }
375 @-o-keyframes change_color {
376 @-o-keyframes change_color {
376 from { background-color: #A0CEFF; } to { }
377 from { background-color: #A0CEFF; } to { }
377 }
378 }
378 @keyframes change_color {
379 @keyframes change_color {
379 from { background-color: #A0CEFF; } to { }
380 from { background-color: #A0CEFF; } to { }
380 }
381 }
381
382
382 .scroll-loading-error {
383 .scroll-loading-error {
383 background-color: #FFCCCC !important;
384 background-color: #FFCCCC !important;
384 }
385 }
385
386
386 #doc {
387 #doc {
387 margin: 0 8px;
388 margin: 0 8px;
388 }
389 }
@@ -1,547 +1,548 b''
1 body {
1 body {
2 margin: 0;
2 margin: 0;
3 padding: 0;
3 padding: 0;
4 background: white;
4 background: white;
5 color: black;
5 color: black;
6 font-family: sans-serif;
6 font-family: sans-serif;
7 }
7 }
8
8
9 .container {
9 .container {
10 padding-left: 115px;
10 padding-left: 115px;
11 }
11 }
12
12
13 .main {
13 .main {
14 position: relative;
14 position: relative;
15 background: white;
15 background: white;
16 padding: 2em 2em 2em 0;
16 padding: 2em 2em 2em 0;
17 }
17 }
18
18
19 #.main {
19 #.main {
20 width: 98%;
20 width: 98%;
21 }
21 }
22
22
23 .overflow {
23 .overflow {
24 width: 100%;
24 width: 100%;
25 overflow: auto;
25 overflow: auto;
26 }
26 }
27
27
28 .menu {
28 .menu {
29 width: 90px;
29 width: 90px;
30 margin: 0;
30 margin: 0;
31 font-size: 80%;
31 font-size: 80%;
32 text-align: left;
32 text-align: left;
33 position: absolute;
33 position: absolute;
34 top: 20px;
34 top: 20px;
35 left: 20px;
35 left: 20px;
36 right: auto;
36 right: auto;
37 }
37 }
38
38
39 .menu ul {
39 .menu ul {
40 list-style: none;
40 list-style: none;
41 padding: 0;
41 padding: 0;
42 margin: 10px 0 0 0;
42 margin: 10px 0 0 0;
43 border-left: 2px solid #999;
43 border-left: 2px solid #999;
44 }
44 }
45
45
46 .menu li {
46 .menu li {
47 margin-bottom: 3px;
47 margin-bottom: 3px;
48 padding: 2px 4px;
48 padding: 2px 4px;
49 background: white;
49 background: white;
50 color: black;
50 color: black;
51 font-weight: normal;
51 font-weight: normal;
52 }
52 }
53
53
54 .menu li.active {
54 .menu li.active {
55 font-weight: bold;
55 font-weight: bold;
56 }
56 }
57
57
58 .menu img {
58 .menu img {
59 width: 75px;
59 width: 75px;
60 height: 90px;
60 height: 90px;
61 border: 0;
61 border: 0;
62 }
62 }
63
63
64 div.atom-logo {
64 div.atom-logo {
65 margin-top: 10px;
65 margin-top: 10px;
66 }
66 }
67
67
68 .atom-logo img{
68 .atom-logo img{
69 width: 14px;
69 width: 14px;
70 height: 14px;
70 height: 14px;
71 border: 0;
71 border: 0;
72 }
72 }
73
73
74 .menu a { color: black; display: block; }
74 .menu a { color: black; display: block; }
75
75
76 .search {
76 .search {
77 position: absolute;
77 position: absolute;
78 top: .7em;
78 top: .7em;
79 right: 2em;
79 right: 2em;
80 }
80 }
81
81
82 form.search div#hint {
82 form.search div#hint {
83 display: none;
83 display: none;
84 position: absolute;
84 position: absolute;
85 top: 40px;
85 top: 40px;
86 right: 0px;
86 right: 0px;
87 width: 190px;
87 width: 190px;
88 padding: 5px;
88 padding: 5px;
89 background: #ffc;
89 background: #ffc;
90 font-size: 70%;
90 font-size: 70%;
91 border: 1px solid yellow;
91 border: 1px solid yellow;
92 border-radius: 5px;
92 border-radius: 5px;
93 z-index: 15;
93 }
94 }
94
95
95 form.search:hover div#hint { display: block; }
96 form.search:hover div#hint { display: block; }
96
97
97 a { text-decoration:none; }
98 a { text-decoration:none; }
98 .age { white-space:nowrap; }
99 .age { white-space:nowrap; }
99 .date { white-space:nowrap; }
100 .date { white-space:nowrap; }
100 .indexlinks { white-space:nowrap; }
101 .indexlinks { white-space:nowrap; }
101 .parity0,
102 .parity0,
102 .stripes4 > :nth-child(4n+1),
103 .stripes4 > :nth-child(4n+1),
103 .stripes2 > :nth-child(2n+1) { background-color: #f0f0f0; }
104 .stripes2 > :nth-child(2n+1) { background-color: #f0f0f0; }
104 .parity1,
105 .parity1,
105 .stripes4 > :nth-child(4n+3),
106 .stripes4 > :nth-child(4n+3),
106 .stripes2 > :nth-child(2n+2) { background-color: white; }
107 .stripes2 > :nth-child(2n+2) { background-color: white; }
107 .plusline { color: green; }
108 .plusline { color: green; }
108 .minusline { color: #dc143c; } /* crimson */
109 .minusline { color: #dc143c; } /* crimson */
109 .atline { color: purple; }
110 .atline { color: purple; }
110
111
111 .diffstat-table {
112 .diffstat-table {
112 margin-top: 1em;
113 margin-top: 1em;
113 }
114 }
114 .diffstat-file {
115 .diffstat-file {
115 white-space: nowrap;
116 white-space: nowrap;
116 font-size: 90%;
117 font-size: 90%;
117 }
118 }
118 .diffstat-total {
119 .diffstat-total {
119 white-space: nowrap;
120 white-space: nowrap;
120 font-size: 90%;
121 font-size: 90%;
121 }
122 }
122 .diffstat-graph {
123 .diffstat-graph {
123 width: 100%;
124 width: 100%;
124 }
125 }
125 .diffstat-add {
126 .diffstat-add {
126 background-color: green;
127 background-color: green;
127 float: left;
128 float: left;
128 }
129 }
129 .diffstat-remove {
130 .diffstat-remove {
130 background-color: red;
131 background-color: red;
131 float: left;
132 float: left;
132 }
133 }
133
134
134 .navigate {
135 .navigate {
135 text-align: right;
136 text-align: right;
136 font-size: 60%;
137 font-size: 60%;
137 margin: 1em 0;
138 margin: 1em 0;
138 }
139 }
139
140
140 .phase {
141 .phase {
141 color: #999;
142 color: #999;
142 font-size: 70%;
143 font-size: 70%;
143 border-bottom: 1px dotted #999;
144 border-bottom: 1px dotted #999;
144 font-weight: normal;
145 font-weight: normal;
145 margin-left: .5em;
146 margin-left: .5em;
146 vertical-align: baseline;
147 vertical-align: baseline;
147 }
148 }
148
149
149 .obsolete {
150 .obsolete {
150 color: #999;
151 color: #999;
151 font-size: 70%;
152 font-size: 70%;
152 border-bottom: 1px dashed #999;
153 border-bottom: 1px dashed #999;
153 font-weight: normal;
154 font-weight: normal;
154 margin-left: .5em;
155 margin-left: .5em;
155 vertical-align: baseline;
156 vertical-align: baseline;
156 }
157 }
157
158
158 .instability {
159 .instability {
159 color: #000;
160 color: #000;
160 font-size: 70%;
161 font-size: 70%;
161 border-bottom: 1px solid #000;
162 border-bottom: 1px solid #000;
162 font-weight: normal;
163 font-weight: normal;
163 margin-left: .5em;
164 margin-left: .5em;
164 vertical-align: baseline;
165 vertical-align: baseline;
165 }
166 }
166
167
167 .tag {
168 .tag {
168 color: #999;
169 color: #999;
169 font-size: 70%;
170 font-size: 70%;
170 font-weight: normal;
171 font-weight: normal;
171 margin-left: .5em;
172 margin-left: .5em;
172 vertical-align: baseline;
173 vertical-align: baseline;
173 }
174 }
174
175
175 .branchhead {
176 .branchhead {
176 color: #000;
177 color: #000;
177 font-size: 80%;
178 font-size: 80%;
178 font-weight: normal;
179 font-weight: normal;
179 margin-left: .5em;
180 margin-left: .5em;
180 vertical-align: baseline;
181 vertical-align: baseline;
181 }
182 }
182
183
183 ul#graphnodes .branchhead {
184 ul#graphnodes .branchhead {
184 font-size: 75%;
185 font-size: 75%;
185 }
186 }
186
187
187 .branchname {
188 .branchname {
188 color: #000;
189 color: #000;
189 font-size: 60%;
190 font-size: 60%;
190 font-weight: normal;
191 font-weight: normal;
191 margin-left: .5em;
192 margin-left: .5em;
192 vertical-align: baseline;
193 vertical-align: baseline;
193 }
194 }
194
195
195 /* Common */
196 /* Common */
196 pre { margin: 0; }
197 pre { margin: 0; }
197
198
198 h2 { font-size: 120%; border-bottom: 1px solid #999; }
199 h2 { font-size: 120%; border-bottom: 1px solid #999; }
199 h2 a { color: #000; }
200 h2 a { color: #000; }
200 h3 {
201 h3 {
201 margin-top: +.7em;
202 margin-top: +.7em;
202 font-size: 100%;
203 font-size: 100%;
203 }
204 }
204
205
205 /* log and tags tables */
206 /* log and tags tables */
206 .bigtable {
207 .bigtable {
207 border-bottom: 1px solid #999;
208 border-bottom: 1px solid #999;
208 border-collapse: collapse;
209 border-collapse: collapse;
209 font-size: 90%;
210 font-size: 90%;
210 width: 100%;
211 width: 100%;
211 font-weight: normal;
212 font-weight: normal;
212 text-align: left;
213 text-align: left;
213 }
214 }
214
215
215 .bigtable td {
216 .bigtable td {
216 padding: 1px 4px;
217 padding: 1px 4px;
217 vertical-align: top;
218 vertical-align: top;
218 }
219 }
219
220
220 .bigtable th {
221 .bigtable th {
221 padding: 1px 4px;
222 padding: 1px 4px;
222 border-bottom: 1px solid #999;
223 border-bottom: 1px solid #999;
223 }
224 }
224 .bigtable tr { border: none; }
225 .bigtable tr { border: none; }
225 .bigtable .age { width: 7em; }
226 .bigtable .age { width: 7em; }
226 .bigtable .author { width: 15em; }
227 .bigtable .author { width: 15em; }
227 .bigtable .description { }
228 .bigtable .description { }
228 .bigtable .description .base { font-size: 70%; float: right; line-height: 1.66; }
229 .bigtable .description .base { font-size: 70%; float: right; line-height: 1.66; }
229 .bigtable .node { width: 5em; font-family: monospace;}
230 .bigtable .node { width: 5em; font-family: monospace;}
230 .bigtable .permissions { width: 8em; text-align: left;}
231 .bigtable .permissions { width: 8em; text-align: left;}
231 .bigtable .size { width: 5em; text-align: right; }
232 .bigtable .size { width: 5em; text-align: right; }
232 .bigtable .annotate { text-align: right; }
233 .bigtable .annotate { text-align: right; }
233 .bigtable td.annotate { font-size: smaller; }
234 .bigtable td.annotate { font-size: smaller; }
234 .bigtable td.source { font-size: inherit; }
235 .bigtable td.source { font-size: inherit; }
235 tr.thisrev a { color:#999999; text-decoration: none; }
236 tr.thisrev a { color:#999999; text-decoration: none; }
236 tr.thisrev td.source { color:#009900; }
237 tr.thisrev td.source { color:#009900; }
237 td.annotate {
238 td.annotate {
238 white-space: nowrap;
239 white-space: nowrap;
239 }
240 }
240 div.annotate-info {
241 div.annotate-info {
241 z-index: 5;
242 z-index: 5;
242 display: none;
243 display: none;
243 position: absolute;
244 position: absolute;
244 background-color: #FFFFFF;
245 background-color: #FFFFFF;
245 border: 1px solid #999;
246 border: 1px solid #999;
246 text-align: left;
247 text-align: left;
247 color: #000000;
248 color: #000000;
248 padding: 5px;
249 padding: 5px;
249 }
250 }
250 div.annotate-info a { color: #0000FF; }
251 div.annotate-info a { color: #0000FF; }
251 td.annotate:hover div.annotate-info { display: inline; }
252 td.annotate:hover div.annotate-info { display: inline; }
252
253
253 #diffopts-form {
254 #diffopts-form {
254 font-size: smaller;
255 font-size: smaller;
255 color: #424242;
256 color: #424242;
256 padding-bottom: 10px;
257 padding-bottom: 10px;
257 display: none;
258 display: none;
258 }
259 }
259
260
260 .source, .sourcefirst {
261 .source, .sourcefirst {
261 font-family: monospace;
262 font-family: monospace;
262 white-space: pre;
263 white-space: pre;
263 padding: 1px 4px;
264 padding: 1px 4px;
264 font-size: 90%;
265 font-size: 90%;
265 }
266 }
266 .sourcefirst { border-bottom: 1px solid #999; font-weight: bold; }
267 .sourcefirst { border-bottom: 1px solid #999; font-weight: bold; }
267 .source a { color: #999; font-size: smaller; font-family: monospace;}
268 .source a { color: #999; font-size: smaller; font-family: monospace;}
268 .bottomline { border-bottom: 1px solid #999; }
269 .bottomline { border-bottom: 1px solid #999; }
269
270
270 .sourcelines {
271 .sourcelines {
271 font-size: 90%;
272 font-size: 90%;
272 position: relative;
273 position: relative;
273 counter-reset: lineno;
274 counter-reset: lineno;
274 }
275 }
275
276
276 .wrap > span {
277 .wrap > span {
277 white-space: pre-wrap;
278 white-space: pre-wrap;
278 }
279 }
279
280
280 .linewraptoggle {
281 .linewraptoggle {
281 float: right;
282 float: right;
282 }
283 }
283
284
284 .diffblocks { counter-reset: lineno; }
285 .diffblocks { counter-reset: lineno; }
285 .diffblocks > div { counter-increment: lineno; }
286 .diffblocks > div { counter-increment: lineno; }
286
287
287 .sourcelines > span {
288 .sourcelines > span {
288 display: inline-block;
289 display: inline-block;
289 box-sizing: border-box;
290 box-sizing: border-box;
290 width: 100%;
291 width: 100%;
291 padding: 1px 0px 1px 5em;
292 padding: 1px 0px 1px 5em;
292 counter-increment: lineno;
293 counter-increment: lineno;
293 }
294 }
294
295
295 .sourcelines > span:before {
296 .sourcelines > span:before {
296 -moz-user-select: -moz-none;
297 -moz-user-select: -moz-none;
297 -khtml-user-select: none;
298 -khtml-user-select: none;
298 -webkit-user-select: none;
299 -webkit-user-select: none;
299 -ms-user-select: none;
300 -ms-user-select: none;
300 user-select: none;
301 user-select: none;
301 display: inline-block;
302 display: inline-block;
302 margin-left: -6em;
303 margin-left: -6em;
303 width: 4em;
304 width: 4em;
304 font-size: smaller;
305 font-size: smaller;
305 color: #999;
306 color: #999;
306 text-align: right;
307 text-align: right;
307 content: counters(lineno, ".");
308 content: counters(lineno, ".");
308 float: left;
309 float: left;
309 }
310 }
310
311
311 .sourcelines > span:after {
312 .sourcelines > span:after {
312 content: '';
313 content: '';
313 display: inline-block;
314 display: inline-block;
314 }
315 }
315
316
316 .sourcelines > span:target, tr:target td {
317 .sourcelines > span:target, tr:target td {
317 background-color: #bfdfff;
318 background-color: #bfdfff;
318 }
319 }
319
320
320 /* Followlines */
321 /* Followlines */
321 tbody.sourcelines > tr.followlines-selected,
322 tbody.sourcelines > tr.followlines-selected,
322 pre.sourcelines > span.followlines-selected {
323 pre.sourcelines > span.followlines-selected {
323 background-color: #99C7E9;
324 background-color: #99C7E9;
324 }
325 }
325
326
326 div#followlines {
327 div#followlines {
327 background-color: #FFF;
328 background-color: #FFF;
328 border: 1px solid #999;
329 border: 1px solid #999;
329 padding: 5px;
330 padding: 5px;
330 position: fixed;
331 position: fixed;
331 }
332 }
332
333
333 div.followlines-cancel {
334 div.followlines-cancel {
334 text-align: right;
335 text-align: right;
335 }
336 }
336
337
337 div.followlines-cancel > button {
338 div.followlines-cancel > button {
338 line-height: 80%;
339 line-height: 80%;
339 padding: 0;
340 padding: 0;
340 border: 0;
341 border: 0;
341 border-radius: 2px;
342 border-radius: 2px;
342 background-color: inherit;
343 background-color: inherit;
343 font-weight: bold;
344 font-weight: bold;
344 }
345 }
345
346
346 div.followlines-cancel > button:hover {
347 div.followlines-cancel > button:hover {
347 color: #FFFFFF;
348 color: #FFFFFF;
348 background-color: #CF1F1F;
349 background-color: #CF1F1F;
349 }
350 }
350
351
351 div.followlines-link {
352 div.followlines-link {
352 margin: 2px;
353 margin: 2px;
353 margin-top: 4px;
354 margin-top: 4px;
354 font-family: sans-serif;
355 font-family: sans-serif;
355 }
356 }
356
357
357 .btn-followlines {
358 .btn-followlines {
358 position: absolute;
359 position: absolute;
359 display: none;
360 display: none;
360 cursor: pointer;
361 cursor: pointer;
361 box-sizing: content-box;
362 box-sizing: content-box;
362 font-size: 12px;
363 font-size: 12px;
363 width: 13px;
364 width: 13px;
364 height: 13px;
365 height: 13px;
365 border-radius: 3px;
366 border-radius: 3px;
366 margin: 0px;
367 margin: 0px;
367 margin-top: -2px;
368 margin-top: -2px;
368 padding: 0px;
369 padding: 0px;
369 background-color: #E5FDE5;
370 background-color: #E5FDE5;
370 border: 1px solid #9BC19B;
371 border: 1px solid #9BC19B;
371 font-family: monospace;
372 font-family: monospace;
372 text-align: center;
373 text-align: center;
373 line-height: 5px;
374 line-height: 5px;
374 }
375 }
375
376
376 span.followlines-select .btn-followlines {
377 span.followlines-select .btn-followlines {
377 margin-left: -1.5em;
378 margin-left: -1.5em;
378 }
379 }
379
380
380 .btn-followlines:hover {
381 .btn-followlines:hover {
381 transform: scale(1.2, 1.2);
382 transform: scale(1.2, 1.2);
382 }
383 }
383
384
384 .btn-followlines .followlines-plus {
385 .btn-followlines .followlines-plus {
385 color: green;
386 color: green;
386 }
387 }
387
388
388 .btn-followlines .followlines-minus {
389 .btn-followlines .followlines-minus {
389 color: red;
390 color: red;
390 }
391 }
391
392
392 .btn-followlines-end {
393 .btn-followlines-end {
393 background-color: #ffdcdc;
394 background-color: #ffdcdc;
394 }
395 }
395
396
396 .sourcelines tr:hover .btn-followlines,
397 .sourcelines tr:hover .btn-followlines,
397 .sourcelines span.followlines-select:hover > .btn-followlines {
398 .sourcelines span.followlines-select:hover > .btn-followlines {
398 display: inline;
399 display: inline;
399 }
400 }
400
401
401 .btn-followlines-hidden,
402 .btn-followlines-hidden,
402 .sourcelines tr:hover .btn-followlines-hidden {
403 .sourcelines tr:hover .btn-followlines-hidden {
403 display: none;
404 display: none;
404 }
405 }
405
406
406 .sourcelines > a {
407 .sourcelines > a {
407 display: inline-block;
408 display: inline-block;
408 position: absolute;
409 position: absolute;
409 left: 0px;
410 left: 0px;
410 width: 4em;
411 width: 4em;
411 height: 1em;
412 height: 1em;
412 }
413 }
413
414
414 .fileline { font-family: monospace; }
415 .fileline { font-family: monospace; }
415 .fileline img { border: 0; }
416 .fileline img { border: 0; }
416
417
417 .tagEntry .closed { color: #99f; }
418 .tagEntry .closed { color: #99f; }
418
419
419 /* Changeset entry */
420 /* Changeset entry */
420 #changesetEntry {
421 #changesetEntry {
421 border-collapse: collapse;
422 border-collapse: collapse;
422 font-size: 90%;
423 font-size: 90%;
423 width: 100%;
424 width: 100%;
424 margin-bottom: 1em;
425 margin-bottom: 1em;
425 }
426 }
426
427
427 #changesetEntry th {
428 #changesetEntry th {
428 padding: 1px 4px;
429 padding: 1px 4px;
429 width: 4em;
430 width: 4em;
430 text-align: right;
431 text-align: right;
431 font-weight: normal;
432 font-weight: normal;
432 color: #999;
433 color: #999;
433 vertical-align: top;
434 vertical-align: top;
434 }
435 }
435
436
436 div.description {
437 div.description {
437 border-left: 2px solid #999;
438 border-left: 2px solid #999;
438 margin: 1em 0 1em 0;
439 margin: 1em 0 1em 0;
439 padding: .3em;
440 padding: .3em;
440 white-space: pre;
441 white-space: pre;
441 font-family: monospace;
442 font-family: monospace;
442 }
443 }
443
444
444 /* Graph */
445 /* Graph */
445 div#wrapper {
446 div#wrapper {
446 position: relative;
447 position: relative;
447 border-top: 1px solid black;
448 border-top: 1px solid black;
448 border-bottom: 1px solid black;
449 border-bottom: 1px solid black;
449 margin: 0;
450 margin: 0;
450 padding: 0;
451 padding: 0;
451 }
452 }
452
453
453 canvas {
454 canvas {
454 position: absolute;
455 position: absolute;
455 z-index: 5;
456 z-index: 5;
456 top: -0.7em;
457 top: -0.7em;
457 margin: 0;
458 margin: 0;
458 }
459 }
459
460
460 ul#graphnodes {
461 ul#graphnodes {
461 list-style: none inside none;
462 list-style: none inside none;
462 padding: 0;
463 padding: 0;
463 margin: 0;
464 margin: 0;
464 }
465 }
465
466
466 ul#graphnodes li {
467 ul#graphnodes li {
467 height: 39px;
468 height: 39px;
468 overflow: visible;
469 overflow: visible;
469 }
470 }
470
471
471 ul#graphnodes li .fg {
472 ul#graphnodes li .fg {
472 position: absolute;
473 position: absolute;
473 z-index: 10;
474 z-index: 10;
474 }
475 }
475
476
476 ul#graphnodes li .info {
477 ul#graphnodes li .info {
477 font-size: 70%;
478 font-size: 70%;
478 }
479 }
479
480
480 /* Comparison */
481 /* Comparison */
481 .legend {
482 .legend {
482 padding: 1.5% 0 1.5% 0;
483 padding: 1.5% 0 1.5% 0;
483 }
484 }
484
485
485 .legendinfo {
486 .legendinfo {
486 border: 1px solid #999;
487 border: 1px solid #999;
487 font-size: 80%;
488 font-size: 80%;
488 text-align: center;
489 text-align: center;
489 padding: 0.5%;
490 padding: 0.5%;
490 }
491 }
491
492
492 .equal {
493 .equal {
493 background-color: #ffffff;
494 background-color: #ffffff;
494 }
495 }
495
496
496 .delete {
497 .delete {
497 background-color: #faa;
498 background-color: #faa;
498 color: #333;
499 color: #333;
499 }
500 }
500
501
501 .insert {
502 .insert {
502 background-color: #ffa;
503 background-color: #ffa;
503 }
504 }
504
505
505 .replace {
506 .replace {
506 background-color: #e8e8e8;
507 background-color: #e8e8e8;
507 }
508 }
508
509
509 .header {
510 .header {
510 text-align: center;
511 text-align: center;
511 }
512 }
512
513
513 .block {
514 .block {
514 border-top: 1px solid #999;
515 border-top: 1px solid #999;
515 }
516 }
516
517
517 .breadcrumb {
518 .breadcrumb {
518 color: gray;
519 color: gray;
519 }
520 }
520
521
521 .breadcrumb a {
522 .breadcrumb a {
522 color: blue;
523 color: blue;
523 }
524 }
524
525
525 .scroll-loading {
526 .scroll-loading {
526 -webkit-animation: change_color 1s linear 0s infinite alternate;
527 -webkit-animation: change_color 1s linear 0s infinite alternate;
527 -moz-animation: change_color 1s linear 0s infinite alternate;
528 -moz-animation: change_color 1s linear 0s infinite alternate;
528 -o-animation: change_color 1s linear 0s infinite alternate;
529 -o-animation: change_color 1s linear 0s infinite alternate;
529 animation: change_color 1s linear 0s infinite alternate;
530 animation: change_color 1s linear 0s infinite alternate;
530 }
531 }
531
532
532 @-webkit-keyframes change_color {
533 @-webkit-keyframes change_color {
533 from { background-color: #A0CEFF; } to { }
534 from { background-color: #A0CEFF; } to { }
534 }
535 }
535 @-moz-keyframes change_color {
536 @-moz-keyframes change_color {
536 from { background-color: #A0CEFF; } to { }
537 from { background-color: #A0CEFF; } to { }
537 }
538 }
538 @-o-keyframes change_color {
539 @-o-keyframes change_color {
539 from { background-color: #A0CEFF; } to { }
540 from { background-color: #A0CEFF; } to { }
540 }
541 }
541 @keyframes change_color {
542 @keyframes change_color {
542 from { background-color: #A0CEFF; } to { }
543 from { background-color: #A0CEFF; } to { }
543 }
544 }
544
545
545 .scroll-loading-error {
546 .scroll-loading-error {
546 background-color: #FFCCCC !important;
547 background-color: #FFCCCC !important;
547 }
548 }
@@ -1,962 +1,963 b''
1 #require serve
1 #require serve
2
2
3 Some tests for hgweb. Tests static files, plain files and different 404's.
3 Some tests for hgweb. Tests static files, plain files and different 404's.
4
4
5 $ hg init test
5 $ hg init test
6 $ cd test
6 $ cd test
7 $ mkdir da
7 $ mkdir da
8 $ echo foo > da/foo
8 $ echo foo > da/foo
9 $ echo foo > foo
9 $ echo foo > foo
10 $ hg ci -Ambase
10 $ hg ci -Ambase
11 adding da/foo
11 adding da/foo
12 adding foo
12 adding foo
13 $ hg bookmark -r0 '@'
13 $ hg bookmark -r0 '@'
14 $ hg bookmark -r0 'a b c'
14 $ hg bookmark -r0 'a b c'
15 $ hg bookmark -r0 'd/e/f'
15 $ hg bookmark -r0 'd/e/f'
16 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
16 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
17 $ cat hg.pid >> $DAEMON_PIDS
17 $ cat hg.pid >> $DAEMON_PIDS
18
18
19 manifest
19 manifest
20
20
21 $ (get-with-headers.py localhost:$HGPORT 'file/tip/?style=raw')
21 $ (get-with-headers.py localhost:$HGPORT 'file/tip/?style=raw')
22 200 Script output follows
22 200 Script output follows
23
23
24
24
25 drwxr-xr-x da
25 drwxr-xr-x da
26 -rw-r--r-- 4 foo
26 -rw-r--r-- 4 foo
27
27
28
28
29 $ (get-with-headers.py localhost:$HGPORT 'file/tip/da?style=raw')
29 $ (get-with-headers.py localhost:$HGPORT 'file/tip/da?style=raw')
30 200 Script output follows
30 200 Script output follows
31
31
32
32
33 -rw-r--r-- 4 foo
33 -rw-r--r-- 4 foo
34
34
35
35
36
36
37 plain file
37 plain file
38
38
39 $ get-with-headers.py localhost:$HGPORT 'file/tip/foo?style=raw'
39 $ get-with-headers.py localhost:$HGPORT 'file/tip/foo?style=raw'
40 200 Script output follows
40 200 Script output follows
41
41
42 foo
42 foo
43
43
44 should give a 404 - static file that does not exist
44 should give a 404 - static file that does not exist
45
45
46 $ get-with-headers.py localhost:$HGPORT 'static/bogus'
46 $ get-with-headers.py localhost:$HGPORT 'static/bogus'
47 404 Not Found
47 404 Not Found
48
48
49 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
49 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
50 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
50 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
51 <head>
51 <head>
52 <link rel="icon" href="/static/hgicon.png" type="image/png" />
52 <link rel="icon" href="/static/hgicon.png" type="image/png" />
53 <meta name="robots" content="index, nofollow" />
53 <meta name="robots" content="index, nofollow" />
54 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
54 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
55 <script type="text/javascript" src="/static/mercurial.js"></script>
55 <script type="text/javascript" src="/static/mercurial.js"></script>
56
56
57 <title>test: error</title>
57 <title>test: error</title>
58 </head>
58 </head>
59 <body>
59 <body>
60
60
61 <div class="container">
61 <div class="container">
62 <div class="menu">
62 <div class="menu">
63 <div class="logo">
63 <div class="logo">
64 <a href="https://mercurial-scm.org/">
64 <a href="https://mercurial-scm.org/">
65 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
65 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
66 </div>
66 </div>
67 <ul>
67 <ul>
68 <li><a href="/shortlog">log</a></li>
68 <li><a href="/shortlog">log</a></li>
69 <li><a href="/graph">graph</a></li>
69 <li><a href="/graph">graph</a></li>
70 <li><a href="/tags">tags</a></li>
70 <li><a href="/tags">tags</a></li>
71 <li><a href="/bookmarks">bookmarks</a></li>
71 <li><a href="/bookmarks">bookmarks</a></li>
72 <li><a href="/branches">branches</a></li>
72 <li><a href="/branches">branches</a></li>
73 </ul>
73 </ul>
74 <ul>
74 <ul>
75 <li><a href="/help">help</a></li>
75 <li><a href="/help">help</a></li>
76 </ul>
76 </ul>
77 </div>
77 </div>
78
78
79 <div class="main">
79 <div class="main">
80
80
81 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
81 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
82 <h3>error</h3>
82 <h3>error</h3>
83
83
84
84
85 <form class="search" action="/log">
85 <form class="search" action="/log">
86
86
87 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
87 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
88 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
88 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
89 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
89 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
90 </form>
90 </form>
91
91
92 <div class="description">
92 <div class="description">
93 <p>
93 <p>
94 An error occurred while processing your request:
94 An error occurred while processing your request:
95 </p>
95 </p>
96 <p>
96 <p>
97 Not Found
97 Not Found
98 </p>
98 </p>
99 </div>
99 </div>
100 </div>
100 </div>
101 </div>
101 </div>
102
102
103
103
104
104
105 </body>
105 </body>
106 </html>
106 </html>
107
107
108 [1]
108 [1]
109
109
110 should give a 404 - bad revision
110 should give a 404 - bad revision
111
111
112 $ get-with-headers.py localhost:$HGPORT 'file/spam/foo?style=raw'
112 $ get-with-headers.py localhost:$HGPORT 'file/spam/foo?style=raw'
113 404 Not Found
113 404 Not Found
114
114
115
115
116 error: revision not found: spam
116 error: revision not found: spam
117 [1]
117 [1]
118
118
119 should give a 400 - bad command
119 should give a 400 - bad command
120
120
121 $ get-with-headers.py localhost:$HGPORT 'file/tip/foo?cmd=spam&style=raw'
121 $ get-with-headers.py localhost:$HGPORT 'file/tip/foo?cmd=spam&style=raw'
122 400* (glob)
122 400* (glob)
123
123
124
124
125 error: no such method: spam
125 error: no such method: spam
126 [1]
126 [1]
127
127
128 $ get-with-headers.py --headeronly localhost:$HGPORT '?cmd=spam'
128 $ get-with-headers.py --headeronly localhost:$HGPORT '?cmd=spam'
129 400 no such method: spam
129 400 no such method: spam
130 [1]
130 [1]
131
131
132 should give a 400 - bad command as a part of url path (issue4071)
132 should give a 400 - bad command as a part of url path (issue4071)
133
133
134 $ get-with-headers.py --headeronly localhost:$HGPORT 'spam'
134 $ get-with-headers.py --headeronly localhost:$HGPORT 'spam'
135 400 no such method: spam
135 400 no such method: spam
136 [1]
136 [1]
137
137
138 $ get-with-headers.py --headeronly localhost:$HGPORT 'raw-spam'
138 $ get-with-headers.py --headeronly localhost:$HGPORT 'raw-spam'
139 400 no such method: spam
139 400 no such method: spam
140 [1]
140 [1]
141
141
142 $ get-with-headers.py --headeronly localhost:$HGPORT 'spam/tip/foo'
142 $ get-with-headers.py --headeronly localhost:$HGPORT 'spam/tip/foo'
143 400 no such method: spam
143 400 no such method: spam
144 [1]
144 [1]
145
145
146 should give a 404 - file does not exist
146 should give a 404 - file does not exist
147
147
148 $ get-with-headers.py localhost:$HGPORT 'file/tip/bork?style=raw'
148 $ get-with-headers.py localhost:$HGPORT 'file/tip/bork?style=raw'
149 404 Not Found
149 404 Not Found
150
150
151
151
152 error: bork@2ef0ac749a14: not found in manifest
152 error: bork@2ef0ac749a14: not found in manifest
153 [1]
153 [1]
154 $ get-with-headers.py localhost:$HGPORT 'file/tip/bork'
154 $ get-with-headers.py localhost:$HGPORT 'file/tip/bork'
155 404 Not Found
155 404 Not Found
156
156
157 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
157 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
158 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
158 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
159 <head>
159 <head>
160 <link rel="icon" href="/static/hgicon.png" type="image/png" />
160 <link rel="icon" href="/static/hgicon.png" type="image/png" />
161 <meta name="robots" content="index, nofollow" />
161 <meta name="robots" content="index, nofollow" />
162 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
162 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
163 <script type="text/javascript" src="/static/mercurial.js"></script>
163 <script type="text/javascript" src="/static/mercurial.js"></script>
164
164
165 <title>test: error</title>
165 <title>test: error</title>
166 </head>
166 </head>
167 <body>
167 <body>
168
168
169 <div class="container">
169 <div class="container">
170 <div class="menu">
170 <div class="menu">
171 <div class="logo">
171 <div class="logo">
172 <a href="https://mercurial-scm.org/">
172 <a href="https://mercurial-scm.org/">
173 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
173 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
174 </div>
174 </div>
175 <ul>
175 <ul>
176 <li><a href="/shortlog">log</a></li>
176 <li><a href="/shortlog">log</a></li>
177 <li><a href="/graph">graph</a></li>
177 <li><a href="/graph">graph</a></li>
178 <li><a href="/tags">tags</a></li>
178 <li><a href="/tags">tags</a></li>
179 <li><a href="/bookmarks">bookmarks</a></li>
179 <li><a href="/bookmarks">bookmarks</a></li>
180 <li><a href="/branches">branches</a></li>
180 <li><a href="/branches">branches</a></li>
181 </ul>
181 </ul>
182 <ul>
182 <ul>
183 <li><a href="/help">help</a></li>
183 <li><a href="/help">help</a></li>
184 </ul>
184 </ul>
185 </div>
185 </div>
186
186
187 <div class="main">
187 <div class="main">
188
188
189 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
189 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
190 <h3>error</h3>
190 <h3>error</h3>
191
191
192
192
193 <form class="search" action="/log">
193 <form class="search" action="/log">
194
194
195 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
195 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
196 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
196 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
197 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
197 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
198 </form>
198 </form>
199
199
200 <div class="description">
200 <div class="description">
201 <p>
201 <p>
202 An error occurred while processing your request:
202 An error occurred while processing your request:
203 </p>
203 </p>
204 <p>
204 <p>
205 bork@2ef0ac749a14: not found in manifest
205 bork@2ef0ac749a14: not found in manifest
206 </p>
206 </p>
207 </div>
207 </div>
208 </div>
208 </div>
209 </div>
209 </div>
210
210
211
211
212
212
213 </body>
213 </body>
214 </html>
214 </html>
215
215
216 [1]
216 [1]
217 $ get-with-headers.py localhost:$HGPORT 'diff/tip/bork?style=raw'
217 $ get-with-headers.py localhost:$HGPORT 'diff/tip/bork?style=raw'
218 404 Not Found
218 404 Not Found
219
219
220
220
221 error: bork@2ef0ac749a14: not found in manifest
221 error: bork@2ef0ac749a14: not found in manifest
222 [1]
222 [1]
223
223
224 try bad style
224 try bad style
225
225
226 $ (get-with-headers.py localhost:$HGPORT 'file/tip/?style=foobar')
226 $ (get-with-headers.py localhost:$HGPORT 'file/tip/?style=foobar')
227 200 Script output follows
227 200 Script output follows
228
228
229 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
229 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
230 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
230 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
231 <head>
231 <head>
232 <link rel="icon" href="/static/hgicon.png" type="image/png" />
232 <link rel="icon" href="/static/hgicon.png" type="image/png" />
233 <meta name="robots" content="index, nofollow" />
233 <meta name="robots" content="index, nofollow" />
234 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
234 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
235 <script type="text/javascript" src="/static/mercurial.js"></script>
235 <script type="text/javascript" src="/static/mercurial.js"></script>
236
236
237 <title>test: 2ef0ac749a14 /</title>
237 <title>test: 2ef0ac749a14 /</title>
238 </head>
238 </head>
239 <body>
239 <body>
240
240
241 <div class="container">
241 <div class="container">
242 <div class="menu">
242 <div class="menu">
243 <div class="logo">
243 <div class="logo">
244 <a href="https://mercurial-scm.org/">
244 <a href="https://mercurial-scm.org/">
245 <img src="/static/hglogo.png" alt="mercurial" /></a>
245 <img src="/static/hglogo.png" alt="mercurial" /></a>
246 </div>
246 </div>
247 <ul>
247 <ul>
248 <li><a href="/shortlog/tip">log</a></li>
248 <li><a href="/shortlog/tip">log</a></li>
249 <li><a href="/graph/tip">graph</a></li>
249 <li><a href="/graph/tip">graph</a></li>
250 <li><a href="/tags">tags</a></li>
250 <li><a href="/tags">tags</a></li>
251 <li><a href="/bookmarks">bookmarks</a></li>
251 <li><a href="/bookmarks">bookmarks</a></li>
252 <li><a href="/branches">branches</a></li>
252 <li><a href="/branches">branches</a></li>
253 </ul>
253 </ul>
254 <ul>
254 <ul>
255 <li><a href="/rev/tip">changeset</a></li>
255 <li><a href="/rev/tip">changeset</a></li>
256 <li class="active">browse</li>
256 <li class="active">browse</li>
257 </ul>
257 </ul>
258 <ul>
258 <ul>
259
259
260 </ul>
260 </ul>
261 <ul>
261 <ul>
262 <li><a href="/help">help</a></li>
262 <li><a href="/help">help</a></li>
263 </ul>
263 </ul>
264 </div>
264 </div>
265
265
266 <div class="main">
266 <div class="main">
267 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
267 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
268 <h3>
268 <h3>
269 directory / @ 0:<a href="/rev/2ef0ac749a14">2ef0ac749a14</a>
269 directory / @ 0:<a href="/rev/2ef0ac749a14">2ef0ac749a14</a>
270 <span class="phase">draft</span> <span class="branchhead">default</span> <span class="tag">tip</span> <span class="tag">@</span> <span class="tag">a b c</span> <span class="tag">d/e/f</span>
270 <span class="phase">draft</span> <span class="branchhead">default</span> <span class="tag">tip</span> <span class="tag">@</span> <span class="tag">a b c</span> <span class="tag">d/e/f</span>
271 </h3>
271 </h3>
272
272
273
273
274 <form class="search" action="/log">
274 <form class="search" action="/log">
275
275
276 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
276 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
277 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
277 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
278 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
278 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
279 </form>
279 </form>
280
280
281 <table class="bigtable">
281 <table class="bigtable">
282 <thead>
282 <thead>
283 <tr>
283 <tr>
284 <th class="name">name</th>
284 <th class="name">name</th>
285 <th class="size">size</th>
285 <th class="size">size</th>
286 <th class="permissions">permissions</th>
286 <th class="permissions">permissions</th>
287 </tr>
287 </tr>
288 </thead>
288 </thead>
289 <tbody class="stripes2">
289 <tbody class="stripes2">
290
290
291
291
292 <tr class="fileline">
292 <tr class="fileline">
293 <td class="name">
293 <td class="name">
294 <a href="/file/tip/da">
294 <a href="/file/tip/da">
295 <img src="/static/coal-folder.png" alt="dir."/> da/
295 <img src="/static/coal-folder.png" alt="dir."/> da/
296 </a>
296 </a>
297 <a href="/file/tip/da/">
297 <a href="/file/tip/da/">
298
298
299 </a>
299 </a>
300 </td>
300 </td>
301 <td class="size"></td>
301 <td class="size"></td>
302 <td class="permissions">drwxr-xr-x</td>
302 <td class="permissions">drwxr-xr-x</td>
303 </tr>
303 </tr>
304
304
305 <tr class="fileline">
305 <tr class="fileline">
306 <td class="filename">
306 <td class="filename">
307 <a href="/file/tip/foo">
307 <a href="/file/tip/foo">
308 <img src="/static/coal-file.png" alt="file"/> foo
308 <img src="/static/coal-file.png" alt="file"/> foo
309 </a>
309 </a>
310 </td>
310 </td>
311 <td class="size">4</td>
311 <td class="size">4</td>
312 <td class="permissions">-rw-r--r--</td>
312 <td class="permissions">-rw-r--r--</td>
313 </tr>
313 </tr>
314 </tbody>
314 </tbody>
315 </table>
315 </table>
316 </div>
316 </div>
317 </div>
317 </div>
318
318
319
319
320 </body>
320 </body>
321 </html>
321 </html>
322
322
323
323
324 stop and restart
324 stop and restart
325
325
326 $ killdaemons.py
326 $ killdaemons.py
327 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log
327 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log
328 $ cat hg.pid >> $DAEMON_PIDS
328 $ cat hg.pid >> $DAEMON_PIDS
329
329
330 Test the access/error files are opened in append mode
330 Test the access/error files are opened in append mode
331
331
332 $ $PYTHON -c "print len(open('access.log', 'rb').readlines()), 'log lines written'"
332 $ $PYTHON -c "print len(open('access.log', 'rb').readlines()), 'log lines written'"
333 14 log lines written
333 14 log lines written
334
334
335 static file
335 static file
336
336
337 $ get-with-headers.py --twice localhost:$HGPORT 'static/style-gitweb.css' - date etag server
337 $ get-with-headers.py --twice localhost:$HGPORT 'static/style-gitweb.css' - date etag server
338 200 Script output follows
338 200 Script output follows
339 content-length: 9059
339 content-length: 9074
340 content-type: text/css
340 content-type: text/css
341
341
342 body { font-family: sans-serif; font-size: 12px; border:solid #d9d8d1; border-width:1px; margin:10px; background: white; color: black; }
342 body { font-family: sans-serif; font-size: 12px; border:solid #d9d8d1; border-width:1px; margin:10px; background: white; color: black; }
343 a { color:#0000cc; }
343 a { color:#0000cc; }
344 a:hover, a:visited, a:active { color:#880000; }
344 a:hover, a:visited, a:active { color:#880000; }
345 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
345 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
346 div.page_header a:visited { color:#0000cc; }
346 div.page_header a:visited { color:#0000cc; }
347 div.page_header a:hover { color:#880000; }
347 div.page_header a:hover { color:#880000; }
348 div.page_nav {
348 div.page_nav {
349 padding:8px;
349 padding:8px;
350 display: flex;
350 display: flex;
351 justify-content: space-between;
351 justify-content: space-between;
352 align-items: center;
352 align-items: center;
353 }
353 }
354 div.page_nav a:visited { color:#0000cc; }
354 div.page_nav a:visited { color:#0000cc; }
355 div.extra_nav {
355 div.extra_nav {
356 padding: 8px;
356 padding: 8px;
357 }
357 }
358 div.extra_nav a:visited {
358 div.extra_nav a:visited {
359 color: #0000cc;
359 color: #0000cc;
360 }
360 }
361 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
361 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
362 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
362 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
363 div.page_footer_text { float:left; color:#555555; font-style:italic; }
363 div.page_footer_text { float:left; color:#555555; font-style:italic; }
364 div.page_body { padding:8px; }
364 div.page_body { padding:8px; }
365 div.title, a.title {
365 div.title, a.title {
366 display:block; padding:6px 8px;
366 display:block; padding:6px 8px;
367 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
367 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
368 }
368 }
369 a.title:hover { background-color: #d9d8d1; }
369 a.title:hover { background-color: #d9d8d1; }
370 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
370 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
371 div.log_body { padding:8px 8px 8px 150px; }
371 div.log_body { padding:8px 8px 8px 150px; }
372 .age { white-space:nowrap; }
372 .age { white-space:nowrap; }
373 a.title span.age { position:relative; float:left; width:142px; font-style:italic; }
373 a.title span.age { position:relative; float:left; width:142px; font-style:italic; }
374 div.log_link {
374 div.log_link {
375 padding:0px 8px;
375 padding:0px 8px;
376 font-size:10px; font-family:sans-serif; font-style:normal;
376 font-size:10px; font-family:sans-serif; font-style:normal;
377 position:relative; float:left; width:136px;
377 position:relative; float:left; width:136px;
378 }
378 }
379 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
379 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
380 a.list { text-decoration:none; color:#000000; }
380 a.list { text-decoration:none; color:#000000; }
381 a.list:hover { text-decoration:underline; color:#880000; }
381 a.list:hover { text-decoration:underline; color:#880000; }
382 table { padding:8px 4px; }
382 table { padding:8px 4px; }
383 th { padding:2px 5px; font-size:12px; text-align:left; }
383 th { padding:2px 5px; font-size:12px; text-align:left; }
384 .parity0 { background-color:#ffffff; }
384 .parity0 { background-color:#ffffff; }
385 tr.dark, .parity1, pre.sourcelines.stripes > :nth-child(4n+4) { background-color:#f6f6f0; }
385 tr.dark, .parity1, pre.sourcelines.stripes > :nth-child(4n+4) { background-color:#f6f6f0; }
386 tr.light:hover, .parity0:hover, tr.dark:hover, .parity1:hover,
386 tr.light:hover, .parity0:hover, tr.dark:hover, .parity1:hover,
387 pre.sourcelines.stripes > :nth-child(4n+2):hover,
387 pre.sourcelines.stripes > :nth-child(4n+2):hover,
388 pre.sourcelines.stripes > :nth-child(4n+4):hover,
388 pre.sourcelines.stripes > :nth-child(4n+4):hover,
389 pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
389 pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
390 pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color:#edece6; }
390 pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color:#edece6; }
391 td { padding:2px 5px; font-size:12px; vertical-align:top; }
391 td { padding:2px 5px; font-size:12px; vertical-align:top; }
392 td.closed { background-color: #99f; }
392 td.closed { background-color: #99f; }
393 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
393 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
394 td.indexlinks { white-space: nowrap; }
394 td.indexlinks { white-space: nowrap; }
395 td.indexlinks a {
395 td.indexlinks a {
396 padding: 2px 5px; line-height: 10px;
396 padding: 2px 5px; line-height: 10px;
397 border: 1px solid;
397 border: 1px solid;
398 color: #ffffff; background-color: #7777bb;
398 color: #ffffff; background-color: #7777bb;
399 border-color: #aaaadd #333366 #333366 #aaaadd;
399 border-color: #aaaadd #333366 #333366 #aaaadd;
400 font-weight: bold; text-align: center; text-decoration: none;
400 font-weight: bold; text-align: center; text-decoration: none;
401 font-size: 10px;
401 font-size: 10px;
402 }
402 }
403 td.indexlinks a:hover { background-color: #6666aa; }
403 td.indexlinks a:hover { background-color: #6666aa; }
404 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
404 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
405
405
406 .search {
406 .search {
407 margin-right: 8px;
407 margin-right: 8px;
408 }
408 }
409
409
410 div#hint {
410 div#hint {
411 position: absolute;
411 position: absolute;
412 display: none;
412 display: none;
413 width: 250px;
413 width: 250px;
414 padding: 5px;
414 padding: 5px;
415 background: #ffc;
415 background: #ffc;
416 border: 1px solid yellow;
416 border: 1px solid yellow;
417 border-radius: 5px;
417 border-radius: 5px;
418 z-index: 15;
418 }
419 }
419
420
420 #searchform:hover div#hint { display: block; }
421 #searchform:hover div#hint { display: block; }
421
422
422 tr.thisrev a { color:#999999; text-decoration: none; }
423 tr.thisrev a { color:#999999; text-decoration: none; }
423 tr.thisrev pre { color:#009900; }
424 tr.thisrev pre { color:#009900; }
424 td.annotate {
425 td.annotate {
425 white-space: nowrap;
426 white-space: nowrap;
426 }
427 }
427 div.annotate-info {
428 div.annotate-info {
428 z-index: 5;
429 z-index: 5;
429 display: none;
430 display: none;
430 position: absolute;
431 position: absolute;
431 background-color: #FFFFFF;
432 background-color: #FFFFFF;
432 border: 1px solid #d9d8d1;
433 border: 1px solid #d9d8d1;
433 text-align: left;
434 text-align: left;
434 color: #000000;
435 color: #000000;
435 padding: 5px;
436 padding: 5px;
436 }
437 }
437 div.annotate-info a { color: #0000FF; text-decoration: underline; }
438 div.annotate-info a { color: #0000FF; text-decoration: underline; }
438 td.annotate:hover div.annotate-info { display: inline; }
439 td.annotate:hover div.annotate-info { display: inline; }
439
440
440 #diffopts-form {
441 #diffopts-form {
441 padding-left: 8px;
442 padding-left: 8px;
442 display: none;
443 display: none;
443 }
444 }
444
445
445 .linenr { color:#999999; text-decoration:none }
446 .linenr { color:#999999; text-decoration:none }
446 div.rss_logo { float: right; white-space: nowrap; }
447 div.rss_logo { float: right; white-space: nowrap; }
447 div.rss_logo a {
448 div.rss_logo a {
448 padding:3px 6px; line-height:10px;
449 padding:3px 6px; line-height:10px;
449 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
450 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
450 color:#ffffff; background-color:#ff6600;
451 color:#ffffff; background-color:#ff6600;
451 font-weight:bold; font-family:sans-serif; font-size:10px;
452 font-weight:bold; font-family:sans-serif; font-size:10px;
452 text-align:center; text-decoration:none;
453 text-align:center; text-decoration:none;
453 }
454 }
454 div.rss_logo a:hover { background-color:#ee5500; }
455 div.rss_logo a:hover { background-color:#ee5500; }
455 pre { margin: 0; }
456 pre { margin: 0; }
456 span.logtags span {
457 span.logtags span {
457 padding: 0px 4px;
458 padding: 0px 4px;
458 font-size: 10px;
459 font-size: 10px;
459 font-weight: normal;
460 font-weight: normal;
460 border: 1px solid;
461 border: 1px solid;
461 background-color: #ffaaff;
462 background-color: #ffaaff;
462 border-color: #ffccff #ff00ee #ff00ee #ffccff;
463 border-color: #ffccff #ff00ee #ff00ee #ffccff;
463 }
464 }
464 span.logtags span.phasetag {
465 span.logtags span.phasetag {
465 background-color: #dfafff;
466 background-color: #dfafff;
466 border-color: #e2b8ff #ce48ff #ce48ff #e2b8ff;
467 border-color: #e2b8ff #ce48ff #ce48ff #e2b8ff;
467 }
468 }
468 span.logtags span.obsoletetag {
469 span.logtags span.obsoletetag {
469 background-color: #dddddd;
470 background-color: #dddddd;
470 border-color: #e4e4e4 #a3a3a3 #a3a3a3 #e4e4e4;
471 border-color: #e4e4e4 #a3a3a3 #a3a3a3 #e4e4e4;
471 }
472 }
472 span.logtags span.instabilitytag {
473 span.logtags span.instabilitytag {
473 background-color: #ffb1c0;
474 background-color: #ffb1c0;
474 border-color: #ffbbc8 #ff4476 #ff4476 #ffbbc8;
475 border-color: #ffbbc8 #ff4476 #ff4476 #ffbbc8;
475 }
476 }
476 span.logtags span.tagtag {
477 span.logtags span.tagtag {
477 background-color: #ffffaa;
478 background-color: #ffffaa;
478 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
479 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
479 }
480 }
480 span.logtags span.branchtag {
481 span.logtags span.branchtag {
481 background-color: #aaffaa;
482 background-color: #aaffaa;
482 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
483 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
483 }
484 }
484 span.logtags span.inbranchtag {
485 span.logtags span.inbranchtag {
485 background-color: #d5dde6;
486 background-color: #d5dde6;
486 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
487 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
487 }
488 }
488 span.logtags span.bookmarktag {
489 span.logtags span.bookmarktag {
489 background-color: #afdffa;
490 background-color: #afdffa;
490 border-color: #ccecff #46ace6 #46ace6 #ccecff;
491 border-color: #ccecff #46ace6 #46ace6 #ccecff;
491 }
492 }
492 span.difflineplus { color:#008800; }
493 span.difflineplus { color:#008800; }
493 span.difflineminus { color:#cc0000; }
494 span.difflineminus { color:#cc0000; }
494 span.difflineat { color:#990099; }
495 span.difflineat { color:#990099; }
495 div.diffblocks { counter-reset: lineno; }
496 div.diffblocks { counter-reset: lineno; }
496 div.diffblock { counter-increment: lineno; }
497 div.diffblock { counter-increment: lineno; }
497 pre.sourcelines { position: relative; counter-reset: lineno; }
498 pre.sourcelines { position: relative; counter-reset: lineno; }
498 pre.sourcelines > span {
499 pre.sourcelines > span {
499 display: inline-block;
500 display: inline-block;
500 box-sizing: border-box;
501 box-sizing: border-box;
501 width: 100%;
502 width: 100%;
502 padding: 0 0 0 5em;
503 padding: 0 0 0 5em;
503 counter-increment: lineno;
504 counter-increment: lineno;
504 vertical-align: top;
505 vertical-align: top;
505 }
506 }
506 pre.sourcelines > span:before {
507 pre.sourcelines > span:before {
507 -moz-user-select: -moz-none;
508 -moz-user-select: -moz-none;
508 -khtml-user-select: none;
509 -khtml-user-select: none;
509 -webkit-user-select: none;
510 -webkit-user-select: none;
510 -ms-user-select: none;
511 -ms-user-select: none;
511 user-select: none;
512 user-select: none;
512 display: inline-block;
513 display: inline-block;
513 margin-left: -6em;
514 margin-left: -6em;
514 width: 4em;
515 width: 4em;
515 color: #999;
516 color: #999;
516 text-align: right;
517 text-align: right;
517 content: counters(lineno,".");
518 content: counters(lineno,".");
518 float: left;
519 float: left;
519 }
520 }
520 pre.sourcelines > a {
521 pre.sourcelines > a {
521 display: inline-block;
522 display: inline-block;
522 position: absolute;
523 position: absolute;
523 left: 0px;
524 left: 0px;
524 width: 4em;
525 width: 4em;
525 height: 1em;
526 height: 1em;
526 }
527 }
527 tr:target td,
528 tr:target td,
528 pre.sourcelines > span:target,
529 pre.sourcelines > span:target,
529 pre.sourcelines.stripes > span:target {
530 pre.sourcelines.stripes > span:target {
530 background-color: #bfdfff;
531 background-color: #bfdfff;
531 }
532 }
532
533
533 .description {
534 .description {
534 font-family: monospace;
535 font-family: monospace;
535 white-space: pre;
536 white-space: pre;
536 }
537 }
537
538
538 /* Followlines */
539 /* Followlines */
539 tbody.sourcelines > tr.followlines-selected,
540 tbody.sourcelines > tr.followlines-selected,
540 pre.sourcelines > span.followlines-selected {
541 pre.sourcelines > span.followlines-selected {
541 background-color: #99C7E9 !important;
542 background-color: #99C7E9 !important;
542 }
543 }
543
544
544 div#followlines {
545 div#followlines {
545 background-color: #FFF;
546 background-color: #FFF;
546 border: 1px solid #d9d8d1;
547 border: 1px solid #d9d8d1;
547 padding: 5px;
548 padding: 5px;
548 position: fixed;
549 position: fixed;
549 }
550 }
550
551
551 div.followlines-cancel {
552 div.followlines-cancel {
552 text-align: right;
553 text-align: right;
553 }
554 }
554
555
555 div.followlines-cancel > button {
556 div.followlines-cancel > button {
556 line-height: 80%;
557 line-height: 80%;
557 padding: 0;
558 padding: 0;
558 border: 0;
559 border: 0;
559 border-radius: 2px;
560 border-radius: 2px;
560 background-color: inherit;
561 background-color: inherit;
561 font-weight: bold;
562 font-weight: bold;
562 }
563 }
563
564
564 div.followlines-cancel > button:hover {
565 div.followlines-cancel > button:hover {
565 color: #FFFFFF;
566 color: #FFFFFF;
566 background-color: #CF1F1F;
567 background-color: #CF1F1F;
567 }
568 }
568
569
569 div.followlines-link {
570 div.followlines-link {
570 margin: 2px;
571 margin: 2px;
571 margin-top: 4px;
572 margin-top: 4px;
572 font-family: sans-serif;
573 font-family: sans-serif;
573 }
574 }
574
575
575 .btn-followlines {
576 .btn-followlines {
576 position: absolute;
577 position: absolute;
577 display: none;
578 display: none;
578 cursor: pointer;
579 cursor: pointer;
579 box-sizing: content-box;
580 box-sizing: content-box;
580 font-size: 11px;
581 font-size: 11px;
581 width: 13px;
582 width: 13px;
582 height: 13px;
583 height: 13px;
583 border-radius: 3px;
584 border-radius: 3px;
584 margin: 0px;
585 margin: 0px;
585 margin-top: -2px;
586 margin-top: -2px;
586 padding: 0px;
587 padding: 0px;
587 background-color: #E5FDE5;
588 background-color: #E5FDE5;
588 border: 1px solid #9BC19B;
589 border: 1px solid #9BC19B;
589 font-family: monospace;
590 font-family: monospace;
590 text-align: center;
591 text-align: center;
591 line-height: 5px;
592 line-height: 5px;
592 }
593 }
593
594
594 span.followlines-select .btn-followlines {
595 span.followlines-select .btn-followlines {
595 margin-left: -1.6em;
596 margin-left: -1.6em;
596 }
597 }
597
598
598 .btn-followlines:hover {
599 .btn-followlines:hover {
599 transform: scale(1.1, 1.1);
600 transform: scale(1.1, 1.1);
600 }
601 }
601
602
602 .btn-followlines .followlines-plus {
603 .btn-followlines .followlines-plus {
603 color: green;
604 color: green;
604 }
605 }
605
606
606 .btn-followlines .followlines-minus {
607 .btn-followlines .followlines-minus {
607 color: red;
608 color: red;
608 }
609 }
609
610
610 .btn-followlines-end {
611 .btn-followlines-end {
611 background-color: #ffdcdc;
612 background-color: #ffdcdc;
612 }
613 }
613
614
614 .sourcelines tr:hover .btn-followlines,
615 .sourcelines tr:hover .btn-followlines,
615 .sourcelines span.followlines-select:hover > .btn-followlines {
616 .sourcelines span.followlines-select:hover > .btn-followlines {
616 display: inline;
617 display: inline;
617 }
618 }
618
619
619 .btn-followlines-hidden,
620 .btn-followlines-hidden,
620 .sourcelines tr:hover .btn-followlines-hidden {
621 .sourcelines tr:hover .btn-followlines-hidden {
621 display: none;
622 display: none;
622 }
623 }
623
624
624 /* Graph */
625 /* Graph */
625 div#wrapper {
626 div#wrapper {
626 position: relative;
627 position: relative;
627 margin: 0;
628 margin: 0;
628 padding: 0;
629 padding: 0;
629 margin-top: 3px;
630 margin-top: 3px;
630 }
631 }
631
632
632 canvas {
633 canvas {
633 position: absolute;
634 position: absolute;
634 z-index: 5;
635 z-index: 5;
635 top: -0.9em;
636 top: -0.9em;
636 margin: 0;
637 margin: 0;
637 }
638 }
638
639
639 ul#graphnodes {
640 ul#graphnodes {
640 list-style: none inside none;
641 list-style: none inside none;
641 padding: 0;
642 padding: 0;
642 margin: 0;
643 margin: 0;
643 }
644 }
644
645
645 ul#graphnodes li {
646 ul#graphnodes li {
646 position: relative;
647 position: relative;
647 height: 37px;
648 height: 37px;
648 overflow: visible;
649 overflow: visible;
649 padding-top: 2px;
650 padding-top: 2px;
650 }
651 }
651
652
652 ul#graphnodes li .fg {
653 ul#graphnodes li .fg {
653 position: absolute;
654 position: absolute;
654 z-index: 10;
655 z-index: 10;
655 }
656 }
656
657
657 ul#graphnodes li .info {
658 ul#graphnodes li .info {
658 font-size: 100%;
659 font-size: 100%;
659 font-style: italic;
660 font-style: italic;
660 }
661 }
661
662
662 /* Comparison */
663 /* Comparison */
663 .legend {
664 .legend {
664 padding: 1.5% 0 1.5% 0;
665 padding: 1.5% 0 1.5% 0;
665 }
666 }
666
667
667 .legendinfo {
668 .legendinfo {
668 border: 1px solid #d9d8d1;
669 border: 1px solid #d9d8d1;
669 font-size: 80%;
670 font-size: 80%;
670 text-align: center;
671 text-align: center;
671 padding: 0.5%;
672 padding: 0.5%;
672 }
673 }
673
674
674 .equal {
675 .equal {
675 background-color: #ffffff;
676 background-color: #ffffff;
676 }
677 }
677
678
678 .delete {
679 .delete {
679 background-color: #faa;
680 background-color: #faa;
680 color: #333;
681 color: #333;
681 }
682 }
682
683
683 .insert {
684 .insert {
684 background-color: #ffa;
685 background-color: #ffa;
685 }
686 }
686
687
687 .replace {
688 .replace {
688 background-color: #e8e8e8;
689 background-color: #e8e8e8;
689 }
690 }
690
691
691 .comparison {
692 .comparison {
692 overflow-x: auto;
693 overflow-x: auto;
693 }
694 }
694
695
695 .header th {
696 .header th {
696 text-align: center;
697 text-align: center;
697 }
698 }
698
699
699 .block {
700 .block {
700 border-top: 1px solid #d9d8d1;
701 border-top: 1px solid #d9d8d1;
701 }
702 }
702
703
703 .scroll-loading {
704 .scroll-loading {
704 -webkit-animation: change_color 1s linear 0s infinite alternate;
705 -webkit-animation: change_color 1s linear 0s infinite alternate;
705 -moz-animation: change_color 1s linear 0s infinite alternate;
706 -moz-animation: change_color 1s linear 0s infinite alternate;
706 -o-animation: change_color 1s linear 0s infinite alternate;
707 -o-animation: change_color 1s linear 0s infinite alternate;
707 animation: change_color 1s linear 0s infinite alternate;
708 animation: change_color 1s linear 0s infinite alternate;
708 }
709 }
709
710
710 @-webkit-keyframes change_color {
711 @-webkit-keyframes change_color {
711 from { background-color: #A0CEFF; } to { }
712 from { background-color: #A0CEFF; } to { }
712 }
713 }
713 @-moz-keyframes change_color {
714 @-moz-keyframes change_color {
714 from { background-color: #A0CEFF; } to { }
715 from { background-color: #A0CEFF; } to { }
715 }
716 }
716 @-o-keyframes change_color {
717 @-o-keyframes change_color {
717 from { background-color: #A0CEFF; } to { }
718 from { background-color: #A0CEFF; } to { }
718 }
719 }
719 @keyframes change_color {
720 @keyframes change_color {
720 from { background-color: #A0CEFF; } to { }
721 from { background-color: #A0CEFF; } to { }
721 }
722 }
722
723
723 .scroll-loading-error {
724 .scroll-loading-error {
724 background-color: #FFCCCC !important;
725 background-color: #FFCCCC !important;
725 }
726 }
726
727
727 #doc {
728 #doc {
728 margin: 0 8px;
729 margin: 0 8px;
729 }
730 }
730 304 Not Modified
731 304 Not Modified
731
732
732
733
733 phase changes are refreshed (issue4061)
734 phase changes are refreshed (issue4061)
734
735
735 $ echo bar >> foo
736 $ echo bar >> foo
736 $ hg ci -msecret --secret
737 $ hg ci -msecret --secret
737 $ get-with-headers.py localhost:$HGPORT 'log?style=raw'
738 $ get-with-headers.py localhost:$HGPORT 'log?style=raw'
738 200 Script output follows
739 200 Script output follows
739
740
740
741
741 # HG changelog
742 # HG changelog
742 # Node ID 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
743 # Node ID 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
743
744
744 changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
745 changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
745 revision: 0
746 revision: 0
746 user: test
747 user: test
747 date: Thu, 01 Jan 1970 00:00:00 +0000
748 date: Thu, 01 Jan 1970 00:00:00 +0000
748 summary: base
749 summary: base
749 branch: default
750 branch: default
750 tag: tip
751 tag: tip
751 bookmark: @
752 bookmark: @
752 bookmark: a b c
753 bookmark: a b c
753 bookmark: d/e/f
754 bookmark: d/e/f
754
755
755
756
756 $ hg phase --draft tip
757 $ hg phase --draft tip
757 $ get-with-headers.py localhost:$HGPORT 'log?style=raw'
758 $ get-with-headers.py localhost:$HGPORT 'log?style=raw'
758 200 Script output follows
759 200 Script output follows
759
760
760
761
761 # HG changelog
762 # HG changelog
762 # Node ID a084749e708a9c4c0a5b652a2a446322ce290e04
763 # Node ID a084749e708a9c4c0a5b652a2a446322ce290e04
763
764
764 changeset: a084749e708a9c4c0a5b652a2a446322ce290e04
765 changeset: a084749e708a9c4c0a5b652a2a446322ce290e04
765 revision: 1
766 revision: 1
766 user: test
767 user: test
767 date: Thu, 01 Jan 1970 00:00:00 +0000
768 date: Thu, 01 Jan 1970 00:00:00 +0000
768 summary: secret
769 summary: secret
769 branch: default
770 branch: default
770 tag: tip
771 tag: tip
771
772
772 changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
773 changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
773 revision: 0
774 revision: 0
774 user: test
775 user: test
775 date: Thu, 01 Jan 1970 00:00:00 +0000
776 date: Thu, 01 Jan 1970 00:00:00 +0000
776 summary: base
777 summary: base
777 bookmark: @
778 bookmark: @
778 bookmark: a b c
779 bookmark: a b c
779 bookmark: d/e/f
780 bookmark: d/e/f
780
781
781
782
782
783
783 access bookmarks
784 access bookmarks
784
785
785 $ get-with-headers.py localhost:$HGPORT 'rev/@?style=paper' | egrep '^200|changeset 0:'
786 $ get-with-headers.py localhost:$HGPORT 'rev/@?style=paper' | egrep '^200|changeset 0:'
786 200 Script output follows
787 200 Script output follows
787 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
788 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
788
789
789 $ get-with-headers.py localhost:$HGPORT 'rev/%40?style=paper' | egrep '^200|changeset 0:'
790 $ get-with-headers.py localhost:$HGPORT 'rev/%40?style=paper' | egrep '^200|changeset 0:'
790 200 Script output follows
791 200 Script output follows
791 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
792 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
792
793
793 $ get-with-headers.py localhost:$HGPORT 'rev/a%20b%20c?style=paper' | egrep '^200|changeset 0:'
794 $ get-with-headers.py localhost:$HGPORT 'rev/a%20b%20c?style=paper' | egrep '^200|changeset 0:'
794 200 Script output follows
795 200 Script output follows
795 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
796 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
796
797
797 $ get-with-headers.py localhost:$HGPORT 'rev/d%252Fe%252Ff?style=paper' | egrep '^200|changeset 0:'
798 $ get-with-headers.py localhost:$HGPORT 'rev/d%252Fe%252Ff?style=paper' | egrep '^200|changeset 0:'
798 200 Script output follows
799 200 Script output follows
799 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
800 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
800
801
801 no '[up]' entry in file view when in root directory
802 no '[up]' entry in file view when in root directory
802
803
803 $ get-with-headers.py localhost:$HGPORT 'file/tip?style=paper' | grep -F '[up]'
804 $ get-with-headers.py localhost:$HGPORT 'file/tip?style=paper' | grep -F '[up]'
804 [1]
805 [1]
805 $ get-with-headers.py localhost:$HGPORT 'file/tip/da?style=paper' | grep -F '[up]'
806 $ get-with-headers.py localhost:$HGPORT 'file/tip/da?style=paper' | grep -F '[up]'
806 <a href="/file/tip/?style=paper">[up]</a>
807 <a href="/file/tip/?style=paper">[up]</a>
807 $ get-with-headers.py localhost:$HGPORT 'file/tip?style=coal' | grep -F '[up]'
808 $ get-with-headers.py localhost:$HGPORT 'file/tip?style=coal' | grep -F '[up]'
808 [1]
809 [1]
809 $ get-with-headers.py localhost:$HGPORT 'file/tip/da?style=coal' | grep -F '[up]'
810 $ get-with-headers.py localhost:$HGPORT 'file/tip/da?style=coal' | grep -F '[up]'
810 <a href="/file/tip/?style=coal">[up]</a>
811 <a href="/file/tip/?style=coal">[up]</a>
811 $ get-with-headers.py localhost:$HGPORT 'file/tip?style=gitweb' | grep -F '[up]'
812 $ get-with-headers.py localhost:$HGPORT 'file/tip?style=gitweb' | grep -F '[up]'
812 [1]
813 [1]
813 $ get-with-headers.py localhost:$HGPORT 'file/tip/da?style=gitweb' | grep -F '[up]'
814 $ get-with-headers.py localhost:$HGPORT 'file/tip/da?style=gitweb' | grep -F '[up]'
814 <a href="/file/tip/?style=gitweb">[up]</a>
815 <a href="/file/tip/?style=gitweb">[up]</a>
815 $ get-with-headers.py localhost:$HGPORT 'file/tip?style=monoblue' | grep -F '[up]'
816 $ get-with-headers.py localhost:$HGPORT 'file/tip?style=monoblue' | grep -F '[up]'
816 [1]
817 [1]
817 $ get-with-headers.py localhost:$HGPORT 'file/tip/da?style=monoblue' | grep -F '[up]'
818 $ get-with-headers.py localhost:$HGPORT 'file/tip/da?style=monoblue' | grep -F '[up]'
818 <a href="/file/tip/?style=monoblue">[up]</a>
819 <a href="/file/tip/?style=monoblue">[up]</a>
819 $ get-with-headers.py localhost:$HGPORT 'file/tip?style=spartan' | grep -F '[up]'
820 $ get-with-headers.py localhost:$HGPORT 'file/tip?style=spartan' | grep -F '[up]'
820 [1]
821 [1]
821 $ get-with-headers.py localhost:$HGPORT 'file/tip/da?style=spartan' | grep -F '[up]'
822 $ get-with-headers.py localhost:$HGPORT 'file/tip/da?style=spartan' | grep -F '[up]'
822 <a href="/file/tip/?style=spartan">[up]</a>
823 <a href="/file/tip/?style=spartan">[up]</a>
823
824
824 no style can be loaded from directories other than the specified paths
825 no style can be loaded from directories other than the specified paths
825
826
826 $ mkdir -p x/templates/fallback
827 $ mkdir -p x/templates/fallback
827 $ cat <<EOF > x/templates/fallback/map
828 $ cat <<EOF > x/templates/fallback/map
828 > default = 'shortlog'
829 > default = 'shortlog'
829 > shortlog = 'fall back to default\n'
830 > shortlog = 'fall back to default\n'
830 > mimetype = 'text/plain'
831 > mimetype = 'text/plain'
831 > EOF
832 > EOF
832 $ cat <<EOF > x/map
833 $ cat <<EOF > x/map
833 > default = 'shortlog'
834 > default = 'shortlog'
834 > shortlog = 'access to outside of templates directory\n'
835 > shortlog = 'access to outside of templates directory\n'
835 > mimetype = 'text/plain'
836 > mimetype = 'text/plain'
836 > EOF
837 > EOF
837
838
838 $ killdaemons.py
839 $ killdaemons.py
839 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log \
840 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log \
840 > --config web.style=fallback --config web.templates=x/templates
841 > --config web.style=fallback --config web.templates=x/templates
841 $ cat hg.pid >> $DAEMON_PIDS
842 $ cat hg.pid >> $DAEMON_PIDS
842
843
843 $ get-with-headers.py localhost:$HGPORT "?style=`pwd`/x"
844 $ get-with-headers.py localhost:$HGPORT "?style=`pwd`/x"
844 200 Script output follows
845 200 Script output follows
845
846
846 fall back to default
847 fall back to default
847
848
848 $ get-with-headers.py localhost:$HGPORT '?style=..'
849 $ get-with-headers.py localhost:$HGPORT '?style=..'
849 200 Script output follows
850 200 Script output follows
850
851
851 fall back to default
852 fall back to default
852
853
853 $ get-with-headers.py localhost:$HGPORT '?style=./..'
854 $ get-with-headers.py localhost:$HGPORT '?style=./..'
854 200 Script output follows
855 200 Script output follows
855
856
856 fall back to default
857 fall back to default
857
858
858 $ get-with-headers.py localhost:$HGPORT '?style=.../.../'
859 $ get-with-headers.py localhost:$HGPORT '?style=.../.../'
859 200 Script output follows
860 200 Script output follows
860
861
861 fall back to default
862 fall back to default
862
863
863 $ killdaemons.py
864 $ killdaemons.py
864
865
865 Test signal-safe-lock in web and non-web processes
866 Test signal-safe-lock in web and non-web processes
866
867
867 $ cat <<'EOF' > disablesig.py
868 $ cat <<'EOF' > disablesig.py
868 > import signal
869 > import signal
869 > from mercurial import error, extensions
870 > from mercurial import error, extensions
870 > def disabledsig(orig, signalnum, handler):
871 > def disabledsig(orig, signalnum, handler):
871 > if signalnum == signal.SIGTERM:
872 > if signalnum == signal.SIGTERM:
872 > raise error.Abort(b'SIGTERM cannot be replaced')
873 > raise error.Abort(b'SIGTERM cannot be replaced')
873 > try:
874 > try:
874 > return orig(signalnum, handler)
875 > return orig(signalnum, handler)
875 > except ValueError:
876 > except ValueError:
876 > raise error.Abort(b'signal.signal() called in thread?')
877 > raise error.Abort(b'signal.signal() called in thread?')
877 > def uisetup(ui):
878 > def uisetup(ui):
878 > extensions.wrapfunction(signal, b'signal', disabledsig)
879 > extensions.wrapfunction(signal, b'signal', disabledsig)
879 > EOF
880 > EOF
880
881
881 by default, signal interrupt should be disabled while making a lock file
882 by default, signal interrupt should be disabled while making a lock file
882
883
883 $ hg debuglock -s --config extensions.disablesig=disablesig.py
884 $ hg debuglock -s --config extensions.disablesig=disablesig.py
884 abort: SIGTERM cannot be replaced
885 abort: SIGTERM cannot be replaced
885 [255]
886 [255]
886
887
887 but in hgweb, it isn't disabled since some WSGI servers complains about
888 but in hgweb, it isn't disabled since some WSGI servers complains about
888 unsupported signal.signal() calls (see issue5889)
889 unsupported signal.signal() calls (see issue5889)
889
890
890 $ hg serve --config extensions.disablesig=disablesig.py \
891 $ hg serve --config extensions.disablesig=disablesig.py \
891 > --config web.allow-push='*' --config web.push_ssl=False \
892 > --config web.allow-push='*' --config web.push_ssl=False \
892 > -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
893 > -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
893 $ cat hg.pid >> $DAEMON_PIDS
894 $ cat hg.pid >> $DAEMON_PIDS
894
895
895 $ hg clone -q http://localhost:$HGPORT/ repo
896 $ hg clone -q http://localhost:$HGPORT/ repo
896 $ hg bookmark -R repo foo
897 $ hg bookmark -R repo foo
897
898
898 push would fail if signal.signal() were called
899 push would fail if signal.signal() were called
899
900
900 $ hg push -R repo -B foo
901 $ hg push -R repo -B foo
901 pushing to http://localhost:$HGPORT/
902 pushing to http://localhost:$HGPORT/
902 searching for changes
903 searching for changes
903 no changes found
904 no changes found
904 exporting bookmark foo
905 exporting bookmark foo
905 [1]
906 [1]
906
907
907 $ rm -R repo
908 $ rm -R repo
908 $ killdaemons.py
909 $ killdaemons.py
909
910
910 errors
911 errors
911
912
912 $ cat errors.log
913 $ cat errors.log
913
914
914 Uncaught exceptions result in a logged error and canned HTTP response
915 Uncaught exceptions result in a logged error and canned HTTP response
915
916
916 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
917 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
917 $ cat hg.pid >> $DAEMON_PIDS
918 $ cat hg.pid >> $DAEMON_PIDS
918
919
919 $ get-with-headers.py localhost:$HGPORT 'raiseerror' transfer-encoding content-type
920 $ get-with-headers.py localhost:$HGPORT 'raiseerror' transfer-encoding content-type
920 500 Internal Server Error
921 500 Internal Server Error
921 transfer-encoding: chunked
922 transfer-encoding: chunked
922
923
923 Internal Server Error (no-eol)
924 Internal Server Error (no-eol)
924 [1]
925 [1]
925
926
926 $ killdaemons.py
927 $ killdaemons.py
927 $ head -1 errors.log
928 $ head -1 errors.log
928 .* Exception happened during processing request '/raiseerror': (re)
929 .* Exception happened during processing request '/raiseerror': (re)
929
930
930 Uncaught exception after partial content sent
931 Uncaught exception after partial content sent
931
932
932 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
933 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
933 $ cat hg.pid >> $DAEMON_PIDS
934 $ cat hg.pid >> $DAEMON_PIDS
934 $ get-with-headers.py localhost:$HGPORT 'raiseerror?partialresponse=1' transfer-encoding content-type
935 $ get-with-headers.py localhost:$HGPORT 'raiseerror?partialresponse=1' transfer-encoding content-type
935 200 Script output follows
936 200 Script output follows
936 transfer-encoding: chunked
937 transfer-encoding: chunked
937 content-type: text/plain
938 content-type: text/plain
938
939
939 partial content
940 partial content
940 Internal Server Error (no-eol)
941 Internal Server Error (no-eol)
941
942
942 $ killdaemons.py
943 $ killdaemons.py
943
944
944 HTTP 304 works with hgwebdir (issue5844)
945 HTTP 304 works with hgwebdir (issue5844)
945
946
946 $ cat > hgweb.conf << EOF
947 $ cat > hgweb.conf << EOF
947 > [paths]
948 > [paths]
948 > /repo = $TESTTMP/test
949 > /repo = $TESTTMP/test
949 > EOF
950 > EOF
950
951
951 $ hg serve --web-conf hgweb.conf -p $HGPORT -d --pid-file hg.pid -E error.log
952 $ hg serve --web-conf hgweb.conf -p $HGPORT -d --pid-file hg.pid -E error.log
952 $ cat hg.pid >> $DAEMON_PIDS
953 $ cat hg.pid >> $DAEMON_PIDS
953
954
954 $ get-with-headers.py --twice --headeronly localhost:$HGPORT 'repo/static/style.css' - date etag server
955 $ get-with-headers.py --twice --headeronly localhost:$HGPORT 'repo/static/style.css' - date etag server
955 200 Script output follows
956 200 Script output follows
956 content-length: 2677
957 content-length: 2677
957 content-type: text/css
958 content-type: text/css
958 304 Not Modified
959 304 Not Modified
959
960
960 $ killdaemons.py
961 $ killdaemons.py
961
962
962 $ cd ..
963 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now