##// END OF EJS Templates
gitweb: make annotate popup use theme colors
av6 -
r29626:4317aa56 stable
parent child Browse files
Show More
@@ -1,254 +1,254 b''
1 1 body { font-family: sans-serif; font-size: 12px; border:solid #d9d8d1; border-width:1px; margin:10px; background: white; color: black; }
2 2 a { color:#0000cc; }
3 3 a:hover, a:visited, a:active { color:#880000; }
4 4 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
5 5 div.page_header a:visited { color:#0000cc; }
6 6 div.page_header a:hover { color:#880000; }
7 7 div.page_nav { padding:8px; }
8 8 div.page_nav a:visited { color:#0000cc; }
9 9 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
10 10 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
11 11 div.page_footer_text { float:left; color:#555555; font-style:italic; }
12 12 div.page_body { padding:8px; }
13 13 div.title, a.title {
14 14 display:block; padding:6px 8px;
15 15 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
16 16 }
17 17 a.title:hover { background-color: #d9d8d1; }
18 18 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
19 19 div.log_body { padding:8px 8px 8px 150px; }
20 20 .age { white-space:nowrap; }
21 21 span.age { position:relative; float:left; width:142px; font-style:italic; }
22 22 div.log_link {
23 23 padding:0px 8px;
24 24 font-size:10px; font-family:sans-serif; font-style:normal;
25 25 position:relative; float:left; width:136px;
26 26 }
27 27 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
28 28 a.list { text-decoration:none; color:#000000; }
29 29 a.list:hover { text-decoration:underline; color:#880000; }
30 30 table { padding:8px 4px; }
31 31 th { padding:2px 5px; font-size:12px; text-align:left; }
32 32 .parity0 { background-color:#ffffff; }
33 33 tr.dark, .parity1, pre.sourcelines.stripes > :nth-child(4n+4) { background-color:#f6f6f0; }
34 34 tr.light:hover, .parity0:hover, tr.dark:hover, .parity1:hover,
35 35 pre.sourcelines.stripes > :nth-child(4n+2):hover,
36 36 pre.sourcelines.stripes > :nth-child(4n+4):hover,
37 37 pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
38 38 pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color:#edece6; }
39 39 td { padding:2px 5px; font-size:12px; vertical-align:top; }
40 40 td.closed { background-color: #99f; }
41 41 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
42 42 td.indexlinks { white-space: nowrap; }
43 43 td.indexlinks a {
44 44 padding: 2px 5px; line-height: 10px;
45 45 border: 1px solid;
46 46 color: #ffffff; background-color: #7777bb;
47 47 border-color: #aaaadd #333366 #333366 #aaaadd;
48 48 font-weight: bold; text-align: center; text-decoration: none;
49 49 font-size: 10px;
50 50 }
51 51 td.indexlinks a:hover { background-color: #6666aa; }
52 52 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
53 53 div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
54 54 div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
55 55 div.search { margin:4px 8px; position:absolute; top:56px; right:12px }
56 56 tr.thisrev a { color:#999999; text-decoration: none; }
57 57 tr.thisrev pre { color:#009900; }
58 58 div.annotate-info {
59 59 display: none;
60 60 position: absolute;
61 61 background-color: #FFFFFF;
62 border: 1px solid #000000;
62 border: 1px solid #d9d8d1;
63 63 text-align: left;
64 64 color: #000000;
65 65 padding: 5px;
66 66 }
67 67 div.annotate-info a { color: #0000FF; text-decoration: underline; }
68 68 td.annotate:hover div.annotate-info { display: inline; }
69 69 .linenr { color:#999999; text-decoration:none }
70 70 div.rss_logo { float: right; white-space: nowrap; }
71 71 div.rss_logo a {
72 72 padding:3px 6px; line-height:10px;
73 73 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
74 74 color:#ffffff; background-color:#ff6600;
75 75 font-weight:bold; font-family:sans-serif; font-size:10px;
76 76 text-align:center; text-decoration:none;
77 77 }
78 78 div.rss_logo a:hover { background-color:#ee5500; }
79 79 pre { margin: 0; }
80 80 span.logtags span {
81 81 padding: 0px 4px;
82 82 font-size: 10px;
83 83 font-weight: normal;
84 84 border: 1px solid;
85 85 background-color: #ffaaff;
86 86 border-color: #ffccff #ff00ee #ff00ee #ffccff;
87 87 }
88 88 span.logtags span.tagtag {
89 89 background-color: #ffffaa;
90 90 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
91 91 }
92 92 span.logtags span.branchtag {
93 93 background-color: #aaffaa;
94 94 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
95 95 }
96 96 span.logtags span.inbranchtag {
97 97 background-color: #d5dde6;
98 98 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
99 99 }
100 100 span.logtags span.bookmarktag {
101 101 background-color: #afdffa;
102 102 border-color: #ccecff #46ace6 #46ace6 #ccecff;
103 103 }
104 104 span.difflineplus { color:#008800; }
105 105 span.difflineminus { color:#cc0000; }
106 106 span.difflineat { color:#990099; }
107 107 div.diffblocks { counter-reset: lineno; }
108 108 div.diffblock { counter-increment: lineno; }
109 109 pre.sourcelines { position: relative; counter-reset: lineno; }
110 110 pre.sourcelines > span {
111 111 display: inline-block;
112 112 box-sizing: border-box;
113 113 width: 100%;
114 114 padding: 0 0 0 5em;
115 115 counter-increment: lineno;
116 116 vertical-align: top;
117 117 }
118 118 pre.sourcelines > span:before {
119 119 -moz-user-select: -moz-none;
120 120 -khtml-user-select: none;
121 121 -webkit-user-select: none;
122 122 -ms-user-select: none;
123 123 user-select: none;
124 124 display: inline-block;
125 125 margin-left: -5em;
126 126 width: 4em;
127 127 color: #999;
128 128 text-align: right;
129 129 content: counters(lineno,".");
130 130 float: left;
131 131 }
132 132 pre.sourcelines > a {
133 133 display: inline-block;
134 134 position: absolute;
135 135 left: 0px;
136 136 width: 4em;
137 137 height: 1em;
138 138 }
139 139 tr:target td,
140 140 pre.sourcelines > span:target,
141 141 pre.sourcelines.stripes > span:target {
142 142 background-color: #bfdfff;
143 143 }
144 144
145 145 /* Graph */
146 146 div#wrapper {
147 147 position: relative;
148 148 margin: 0;
149 149 padding: 0;
150 150 margin-top: 3px;
151 151 }
152 152
153 153 canvas {
154 154 position: absolute;
155 155 z-index: 5;
156 156 top: -0.9em;
157 157 margin: 0;
158 158 }
159 159
160 160 ul#nodebgs {
161 161 list-style: none inside none;
162 162 padding: 0;
163 163 margin: 0;
164 164 top: -0.7em;
165 165 }
166 166
167 167 ul#graphnodes li, ul#nodebgs li {
168 168 height: 39px;
169 169 }
170 170
171 171 ul#graphnodes {
172 172 position: absolute;
173 173 z-index: 10;
174 174 top: -0.8em;
175 175 list-style: none inside none;
176 176 padding: 0;
177 177 }
178 178
179 179 ul#graphnodes li .info {
180 180 display: block;
181 181 font-size: 100%;
182 182 position: relative;
183 183 top: -3px;
184 184 font-style: italic;
185 185 }
186 186
187 187 /* Comparison */
188 188 .legend {
189 189 padding: 1.5% 0 1.5% 0;
190 190 }
191 191
192 192 .legendinfo {
193 193 border: 1px solid #d9d8d1;
194 194 font-size: 80%;
195 195 text-align: center;
196 196 padding: 0.5%;
197 197 }
198 198
199 199 .equal {
200 200 background-color: #ffffff;
201 201 }
202 202
203 203 .delete {
204 204 background-color: #faa;
205 205 color: #333;
206 206 }
207 207
208 208 .insert {
209 209 background-color: #ffa;
210 210 }
211 211
212 212 .replace {
213 213 background-color: #e8e8e8;
214 214 }
215 215
216 216 .comparison {
217 217 overflow-x: auto;
218 218 }
219 219
220 220 .header th {
221 221 text-align: center;
222 222 }
223 223
224 224 .block {
225 225 border-top: 1px solid #d9d8d1;
226 226 }
227 227
228 228 .scroll-loading {
229 229 -webkit-animation: change_color 1s linear 0s infinite alternate;
230 230 -moz-animation: change_color 1s linear 0s infinite alternate;
231 231 -o-animation: change_color 1s linear 0s infinite alternate;
232 232 animation: change_color 1s linear 0s infinite alternate;
233 233 }
234 234
235 235 @-webkit-keyframes change_color {
236 236 from { background-color: #A0CEFF; } to { }
237 237 }
238 238 @-moz-keyframes change_color {
239 239 from { background-color: #A0CEFF; } to { }
240 240 }
241 241 @-o-keyframes change_color {
242 242 from { background-color: #A0CEFF; } to { }
243 243 }
244 244 @keyframes change_color {
245 245 from { background-color: #A0CEFF; } to { }
246 246 }
247 247
248 248 .scroll-loading-error {
249 249 background-color: #FFCCCC !important;
250 250 }
251 251
252 252 #doc {
253 253 margin: 0 8px;
254 254 }
@@ -1,744 +1,744 b''
1 1 #require serve
2 2
3 3 Some tests for hgweb. Tests static files, plain files and different 404's.
4 4
5 5 $ hg init test
6 6 $ cd test
7 7 $ mkdir da
8 8 $ echo foo > da/foo
9 9 $ echo foo > foo
10 10 $ hg ci -Ambase
11 11 adding da/foo
12 12 adding foo
13 13 $ hg bookmark -r0 '@'
14 14 $ hg bookmark -r0 'a b c'
15 15 $ hg bookmark -r0 'd/e/f'
16 16 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
17 17 $ cat hg.pid >> $DAEMON_PIDS
18 18
19 19 manifest
20 20
21 21 $ (get-with-headers.py localhost:$HGPORT 'file/tip/?style=raw')
22 22 200 Script output follows
23 23
24 24
25 25 drwxr-xr-x da
26 26 -rw-r--r-- 4 foo
27 27
28 28
29 29 $ (get-with-headers.py localhost:$HGPORT 'file/tip/da?style=raw')
30 30 200 Script output follows
31 31
32 32
33 33 -rw-r--r-- 4 foo
34 34
35 35
36 36
37 37 plain file
38 38
39 39 $ get-with-headers.py localhost:$HGPORT 'file/tip/foo?style=raw'
40 40 200 Script output follows
41 41
42 42 foo
43 43
44 44 should give a 404 - static file that does not exist
45 45
46 46 $ get-with-headers.py localhost:$HGPORT 'static/bogus'
47 47 404 Not Found
48 48
49 49 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
50 50 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
51 51 <head>
52 52 <link rel="icon" href="/static/hgicon.png" type="image/png" />
53 53 <meta name="robots" content="index, nofollow" />
54 54 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
55 55 <script type="text/javascript" src="/static/mercurial.js"></script>
56 56
57 57 <title>test: error</title>
58 58 </head>
59 59 <body>
60 60
61 61 <div class="container">
62 62 <div class="menu">
63 63 <div class="logo">
64 64 <a href="https://mercurial-scm.org/">
65 65 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
66 66 </div>
67 67 <ul>
68 68 <li><a href="/shortlog">log</a></li>
69 69 <li><a href="/graph">graph</a></li>
70 70 <li><a href="/tags">tags</a></li>
71 71 <li><a href="/bookmarks">bookmarks</a></li>
72 72 <li><a href="/branches">branches</a></li>
73 73 </ul>
74 74 <ul>
75 75 <li><a href="/help">help</a></li>
76 76 </ul>
77 77 </div>
78 78
79 79 <div class="main">
80 80
81 81 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
82 82 <h3>error</h3>
83 83
84 84 <form class="search" action="/log">
85 85
86 86 <p><input name="rev" id="search1" type="text" size="30"></p>
87 87 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
88 88 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
89 89 </form>
90 90
91 91 <div class="description">
92 92 <p>
93 93 An error occurred while processing your request:
94 94 </p>
95 95 <p>
96 96 Not Found
97 97 </p>
98 98 </div>
99 99 </div>
100 100 </div>
101 101
102 102 <script type="text/javascript">process_dates()</script>
103 103
104 104
105 105 </body>
106 106 </html>
107 107
108 108 [1]
109 109
110 110 should give a 404 - bad revision
111 111
112 112 $ get-with-headers.py localhost:$HGPORT 'file/spam/foo?style=raw'
113 113 404 Not Found
114 114
115 115
116 116 error: revision not found: spam
117 117 [1]
118 118
119 119 should give a 400 - bad command
120 120
121 121 $ get-with-headers.py localhost:$HGPORT 'file/tip/foo?cmd=spam&style=raw'
122 122 400* (glob)
123 123
124 124
125 125 error: no such method: spam
126 126 [1]
127 127
128 128 $ get-with-headers.py --headeronly localhost:$HGPORT '?cmd=spam'
129 129 400 no such method: spam
130 130 [1]
131 131
132 132 should give a 400 - bad command as a part of url path (issue4071)
133 133
134 134 $ get-with-headers.py --headeronly localhost:$HGPORT 'spam'
135 135 400 no such method: spam
136 136 [1]
137 137
138 138 $ get-with-headers.py --headeronly localhost:$HGPORT 'raw-spam'
139 139 400 no such method: spam
140 140 [1]
141 141
142 142 $ get-with-headers.py --headeronly localhost:$HGPORT 'spam/tip/foo'
143 143 400 no such method: spam
144 144 [1]
145 145
146 146 should give a 404 - file does not exist
147 147
148 148 $ get-with-headers.py localhost:$HGPORT 'file/tip/bork?style=raw'
149 149 404 Not Found
150 150
151 151
152 152 error: bork@2ef0ac749a14: not found in manifest
153 153 [1]
154 154 $ get-with-headers.py localhost:$HGPORT 'file/tip/bork'
155 155 404 Not Found
156 156
157 157 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
158 158 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
159 159 <head>
160 160 <link rel="icon" href="/static/hgicon.png" type="image/png" />
161 161 <meta name="robots" content="index, nofollow" />
162 162 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
163 163 <script type="text/javascript" src="/static/mercurial.js"></script>
164 164
165 165 <title>test: error</title>
166 166 </head>
167 167 <body>
168 168
169 169 <div class="container">
170 170 <div class="menu">
171 171 <div class="logo">
172 172 <a href="https://mercurial-scm.org/">
173 173 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
174 174 </div>
175 175 <ul>
176 176 <li><a href="/shortlog">log</a></li>
177 177 <li><a href="/graph">graph</a></li>
178 178 <li><a href="/tags">tags</a></li>
179 179 <li><a href="/bookmarks">bookmarks</a></li>
180 180 <li><a href="/branches">branches</a></li>
181 181 </ul>
182 182 <ul>
183 183 <li><a href="/help">help</a></li>
184 184 </ul>
185 185 </div>
186 186
187 187 <div class="main">
188 188
189 189 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
190 190 <h3>error</h3>
191 191
192 192 <form class="search" action="/log">
193 193
194 194 <p><input name="rev" id="search1" type="text" size="30"></p>
195 195 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
196 196 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
197 197 </form>
198 198
199 199 <div class="description">
200 200 <p>
201 201 An error occurred while processing your request:
202 202 </p>
203 203 <p>
204 204 bork@2ef0ac749a14: not found in manifest
205 205 </p>
206 206 </div>
207 207 </div>
208 208 </div>
209 209
210 210 <script type="text/javascript">process_dates()</script>
211 211
212 212
213 213 </body>
214 214 </html>
215 215
216 216 [1]
217 217 $ get-with-headers.py localhost:$HGPORT 'diff/tip/bork?style=raw'
218 218 404 Not Found
219 219
220 220
221 221 error: bork@2ef0ac749a14: not found in manifest
222 222 [1]
223 223
224 224 try bad style
225 225
226 226 $ (get-with-headers.py localhost:$HGPORT 'file/tip/?style=foobar')
227 227 200 Script output follows
228 228
229 229 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
230 230 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
231 231 <head>
232 232 <link rel="icon" href="/static/hgicon.png" type="image/png" />
233 233 <meta name="robots" content="index, nofollow" />
234 234 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
235 235 <script type="text/javascript" src="/static/mercurial.js"></script>
236 236
237 237 <title>test: 2ef0ac749a14 /</title>
238 238 </head>
239 239 <body>
240 240
241 241 <div class="container">
242 242 <div class="menu">
243 243 <div class="logo">
244 244 <a href="https://mercurial-scm.org/">
245 245 <img src="/static/hglogo.png" alt="mercurial" /></a>
246 246 </div>
247 247 <ul>
248 248 <li><a href="/shortlog/tip">log</a></li>
249 249 <li><a href="/graph/tip">graph</a></li>
250 250 <li><a href="/tags">tags</a></li>
251 251 <li><a href="/bookmarks">bookmarks</a></li>
252 252 <li><a href="/branches">branches</a></li>
253 253 </ul>
254 254 <ul>
255 255 <li><a href="/rev/tip">changeset</a></li>
256 256 <li class="active">browse</li>
257 257 </ul>
258 258 <ul>
259 259
260 260 </ul>
261 261 <ul>
262 262 <li><a href="/help">help</a></li>
263 263 </ul>
264 264 </div>
265 265
266 266 <div class="main">
267 267 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
268 268 <h3>
269 269 directory / @ 0:<a href="/rev/2ef0ac749a14">2ef0ac749a14</a>
270 270 <span class="tag">tip</span> <span class="tag">@</span> <span class="tag">a b c</span> <span class="tag">d/e/f</span>
271 271 </h3>
272 272
273 273 <form class="search" action="/log">
274 274
275 275 <p><input name="rev" id="search1" type="text" size="30" /></p>
276 276 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
277 277 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
278 278 </form>
279 279
280 280 <table class="bigtable">
281 281 <thead>
282 282 <tr>
283 283 <th class="name">name</th>
284 284 <th class="size">size</th>
285 285 <th class="permissions">permissions</th>
286 286 </tr>
287 287 </thead>
288 288 <tbody class="stripes2">
289 289 <tr class="fileline">
290 290 <td class="name"><a href="/file/tip/">[up]</a></td>
291 291 <td class="size"></td>
292 292 <td class="permissions">drwxr-xr-x</td>
293 293 </tr>
294 294
295 295 <tr class="fileline">
296 296 <td class="name">
297 297 <a href="/file/tip/da">
298 298 <img src="/static/coal-folder.png" alt="dir."/> da/
299 299 </a>
300 300 <a href="/file/tip/da/">
301 301
302 302 </a>
303 303 </td>
304 304 <td class="size"></td>
305 305 <td class="permissions">drwxr-xr-x</td>
306 306 </tr>
307 307
308 308 <tr class="fileline">
309 309 <td class="filename">
310 310 <a href="/file/tip/foo">
311 311 <img src="/static/coal-file.png" alt="file"/> foo
312 312 </a>
313 313 </td>
314 314 <td class="size">4</td>
315 315 <td class="permissions">-rw-r--r--</td>
316 316 </tr>
317 317 </tbody>
318 318 </table>
319 319 </div>
320 320 </div>
321 321 <script type="text/javascript">process_dates()</script>
322 322
323 323
324 324 </body>
325 325 </html>
326 326
327 327
328 328 stop and restart
329 329
330 330 $ killdaemons.py
331 331 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log
332 332 $ cat hg.pid >> $DAEMON_PIDS
333 333
334 334 Test the access/error files are opened in append mode
335 335
336 336 $ $PYTHON -c "print len(file('access.log').readlines()), 'log lines written'"
337 337 14 log lines written
338 338
339 339 static file
340 340
341 341 $ get-with-headers.py --twice localhost:$HGPORT 'static/style-gitweb.css' - date etag server
342 342 200 Script output follows
343 343 content-length: 6947
344 344 content-type: text/css
345 345
346 346 body { font-family: sans-serif; font-size: 12px; border:solid #d9d8d1; border-width:1px; margin:10px; background: white; color: black; }
347 347 a { color:#0000cc; }
348 348 a:hover, a:visited, a:active { color:#880000; }
349 349 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
350 350 div.page_header a:visited { color:#0000cc; }
351 351 div.page_header a:hover { color:#880000; }
352 352 div.page_nav { padding:8px; }
353 353 div.page_nav a:visited { color:#0000cc; }
354 354 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
355 355 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
356 356 div.page_footer_text { float:left; color:#555555; font-style:italic; }
357 357 div.page_body { padding:8px; }
358 358 div.title, a.title {
359 359 display:block; padding:6px 8px;
360 360 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
361 361 }
362 362 a.title:hover { background-color: #d9d8d1; }
363 363 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
364 364 div.log_body { padding:8px 8px 8px 150px; }
365 365 .age { white-space:nowrap; }
366 366 span.age { position:relative; float:left; width:142px; font-style:italic; }
367 367 div.log_link {
368 368 padding:0px 8px;
369 369 font-size:10px; font-family:sans-serif; font-style:normal;
370 370 position:relative; float:left; width:136px;
371 371 }
372 372 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
373 373 a.list { text-decoration:none; color:#000000; }
374 374 a.list:hover { text-decoration:underline; color:#880000; }
375 375 table { padding:8px 4px; }
376 376 th { padding:2px 5px; font-size:12px; text-align:left; }
377 377 .parity0 { background-color:#ffffff; }
378 378 tr.dark, .parity1, pre.sourcelines.stripes > :nth-child(4n+4) { background-color:#f6f6f0; }
379 379 tr.light:hover, .parity0:hover, tr.dark:hover, .parity1:hover,
380 380 pre.sourcelines.stripes > :nth-child(4n+2):hover,
381 381 pre.sourcelines.stripes > :nth-child(4n+4):hover,
382 382 pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
383 383 pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color:#edece6; }
384 384 td { padding:2px 5px; font-size:12px; vertical-align:top; }
385 385 td.closed { background-color: #99f; }
386 386 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
387 387 td.indexlinks { white-space: nowrap; }
388 388 td.indexlinks a {
389 389 padding: 2px 5px; line-height: 10px;
390 390 border: 1px solid;
391 391 color: #ffffff; background-color: #7777bb;
392 392 border-color: #aaaadd #333366 #333366 #aaaadd;
393 393 font-weight: bold; text-align: center; text-decoration: none;
394 394 font-size: 10px;
395 395 }
396 396 td.indexlinks a:hover { background-color: #6666aa; }
397 397 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
398 398 div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
399 399 div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
400 400 div.search { margin:4px 8px; position:absolute; top:56px; right:12px }
401 401 tr.thisrev a { color:#999999; text-decoration: none; }
402 402 tr.thisrev pre { color:#009900; }
403 403 div.annotate-info {
404 404 display: none;
405 405 position: absolute;
406 406 background-color: #FFFFFF;
407 border: 1px solid #000000;
407 border: 1px solid #d9d8d1;
408 408 text-align: left;
409 409 color: #000000;
410 410 padding: 5px;
411 411 }
412 412 div.annotate-info a { color: #0000FF; text-decoration: underline; }
413 413 td.annotate:hover div.annotate-info { display: inline; }
414 414 .linenr { color:#999999; text-decoration:none }
415 415 div.rss_logo { float: right; white-space: nowrap; }
416 416 div.rss_logo a {
417 417 padding:3px 6px; line-height:10px;
418 418 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
419 419 color:#ffffff; background-color:#ff6600;
420 420 font-weight:bold; font-family:sans-serif; font-size:10px;
421 421 text-align:center; text-decoration:none;
422 422 }
423 423 div.rss_logo a:hover { background-color:#ee5500; }
424 424 pre { margin: 0; }
425 425 span.logtags span {
426 426 padding: 0px 4px;
427 427 font-size: 10px;
428 428 font-weight: normal;
429 429 border: 1px solid;
430 430 background-color: #ffaaff;
431 431 border-color: #ffccff #ff00ee #ff00ee #ffccff;
432 432 }
433 433 span.logtags span.tagtag {
434 434 background-color: #ffffaa;
435 435 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
436 436 }
437 437 span.logtags span.branchtag {
438 438 background-color: #aaffaa;
439 439 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
440 440 }
441 441 span.logtags span.inbranchtag {
442 442 background-color: #d5dde6;
443 443 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
444 444 }
445 445 span.logtags span.bookmarktag {
446 446 background-color: #afdffa;
447 447 border-color: #ccecff #46ace6 #46ace6 #ccecff;
448 448 }
449 449 span.difflineplus { color:#008800; }
450 450 span.difflineminus { color:#cc0000; }
451 451 span.difflineat { color:#990099; }
452 452 div.diffblocks { counter-reset: lineno; }
453 453 div.diffblock { counter-increment: lineno; }
454 454 pre.sourcelines { position: relative; counter-reset: lineno; }
455 455 pre.sourcelines > span {
456 456 display: inline-block;
457 457 box-sizing: border-box;
458 458 width: 100%;
459 459 padding: 0 0 0 5em;
460 460 counter-increment: lineno;
461 461 vertical-align: top;
462 462 }
463 463 pre.sourcelines > span:before {
464 464 -moz-user-select: -moz-none;
465 465 -khtml-user-select: none;
466 466 -webkit-user-select: none;
467 467 -ms-user-select: none;
468 468 user-select: none;
469 469 display: inline-block;
470 470 margin-left: -5em;
471 471 width: 4em;
472 472 color: #999;
473 473 text-align: right;
474 474 content: counters(lineno,".");
475 475 float: left;
476 476 }
477 477 pre.sourcelines > a {
478 478 display: inline-block;
479 479 position: absolute;
480 480 left: 0px;
481 481 width: 4em;
482 482 height: 1em;
483 483 }
484 484 tr:target td,
485 485 pre.sourcelines > span:target,
486 486 pre.sourcelines.stripes > span:target {
487 487 background-color: #bfdfff;
488 488 }
489 489
490 490 /* Graph */
491 491 div#wrapper {
492 492 position: relative;
493 493 margin: 0;
494 494 padding: 0;
495 495 margin-top: 3px;
496 496 }
497 497
498 498 canvas {
499 499 position: absolute;
500 500 z-index: 5;
501 501 top: -0.9em;
502 502 margin: 0;
503 503 }
504 504
505 505 ul#nodebgs {
506 506 list-style: none inside none;
507 507 padding: 0;
508 508 margin: 0;
509 509 top: -0.7em;
510 510 }
511 511
512 512 ul#graphnodes li, ul#nodebgs li {
513 513 height: 39px;
514 514 }
515 515
516 516 ul#graphnodes {
517 517 position: absolute;
518 518 z-index: 10;
519 519 top: -0.8em;
520 520 list-style: none inside none;
521 521 padding: 0;
522 522 }
523 523
524 524 ul#graphnodes li .info {
525 525 display: block;
526 526 font-size: 100%;
527 527 position: relative;
528 528 top: -3px;
529 529 font-style: italic;
530 530 }
531 531
532 532 /* Comparison */
533 533 .legend {
534 534 padding: 1.5% 0 1.5% 0;
535 535 }
536 536
537 537 .legendinfo {
538 538 border: 1px solid #d9d8d1;
539 539 font-size: 80%;
540 540 text-align: center;
541 541 padding: 0.5%;
542 542 }
543 543
544 544 .equal {
545 545 background-color: #ffffff;
546 546 }
547 547
548 548 .delete {
549 549 background-color: #faa;
550 550 color: #333;
551 551 }
552 552
553 553 .insert {
554 554 background-color: #ffa;
555 555 }
556 556
557 557 .replace {
558 558 background-color: #e8e8e8;
559 559 }
560 560
561 561 .comparison {
562 562 overflow-x: auto;
563 563 }
564 564
565 565 .header th {
566 566 text-align: center;
567 567 }
568 568
569 569 .block {
570 570 border-top: 1px solid #d9d8d1;
571 571 }
572 572
573 573 .scroll-loading {
574 574 -webkit-animation: change_color 1s linear 0s infinite alternate;
575 575 -moz-animation: change_color 1s linear 0s infinite alternate;
576 576 -o-animation: change_color 1s linear 0s infinite alternate;
577 577 animation: change_color 1s linear 0s infinite alternate;
578 578 }
579 579
580 580 @-webkit-keyframes change_color {
581 581 from { background-color: #A0CEFF; } to { }
582 582 }
583 583 @-moz-keyframes change_color {
584 584 from { background-color: #A0CEFF; } to { }
585 585 }
586 586 @-o-keyframes change_color {
587 587 from { background-color: #A0CEFF; } to { }
588 588 }
589 589 @keyframes change_color {
590 590 from { background-color: #A0CEFF; } to { }
591 591 }
592 592
593 593 .scroll-loading-error {
594 594 background-color: #FFCCCC !important;
595 595 }
596 596
597 597 #doc {
598 598 margin: 0 8px;
599 599 }
600 600 304 Not Modified
601 601
602 602
603 603 phase changes are refreshed (issue4061)
604 604
605 605 $ echo bar >> foo
606 606 $ hg ci -msecret --secret
607 607 $ get-with-headers.py localhost:$HGPORT 'log?style=raw'
608 608 200 Script output follows
609 609
610 610
611 611 # HG changelog
612 612 # Node ID 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
613 613
614 614 changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
615 615 revision: 0
616 616 user: test
617 617 date: Thu, 01 Jan 1970 00:00:00 +0000
618 618 summary: base
619 619 branch: default
620 620 tag: tip
621 621 bookmark: @
622 622 bookmark: a b c
623 623 bookmark: d/e/f
624 624
625 625
626 626 $ hg phase --draft tip
627 627 $ get-with-headers.py localhost:$HGPORT 'log?style=raw'
628 628 200 Script output follows
629 629
630 630
631 631 # HG changelog
632 632 # Node ID a084749e708a9c4c0a5b652a2a446322ce290e04
633 633
634 634 changeset: a084749e708a9c4c0a5b652a2a446322ce290e04
635 635 revision: 1
636 636 user: test
637 637 date: Thu, 01 Jan 1970 00:00:00 +0000
638 638 summary: secret
639 639 branch: default
640 640 tag: tip
641 641
642 642 changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
643 643 revision: 0
644 644 user: test
645 645 date: Thu, 01 Jan 1970 00:00:00 +0000
646 646 summary: base
647 647 bookmark: @
648 648 bookmark: a b c
649 649 bookmark: d/e/f
650 650
651 651
652 652
653 653 access bookmarks
654 654
655 655 $ get-with-headers.py localhost:$HGPORT 'rev/@?style=paper' | egrep '^200|changeset 0:'
656 656 200 Script output follows
657 657 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
658 658
659 659 $ get-with-headers.py localhost:$HGPORT 'rev/%40?style=paper' | egrep '^200|changeset 0:'
660 660 200 Script output follows
661 661 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
662 662
663 663 $ get-with-headers.py localhost:$HGPORT 'rev/a%20b%20c?style=paper' | egrep '^200|changeset 0:'
664 664 200 Script output follows
665 665 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
666 666
667 667 $ get-with-headers.py localhost:$HGPORT 'rev/d%252Fe%252Ff?style=paper' | egrep '^200|changeset 0:'
668 668 200 Script output follows
669 669 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
670 670
671 671 no style can be loaded from directories other than the specified paths
672 672
673 673 $ mkdir -p x/templates/fallback
674 674 $ cat <<EOF > x/templates/fallback/map
675 675 > default = 'shortlog'
676 676 > shortlog = 'fall back to default\n'
677 677 > mimetype = 'text/plain'
678 678 > EOF
679 679 $ cat <<EOF > x/map
680 680 > default = 'shortlog'
681 681 > shortlog = 'access to outside of templates directory\n'
682 682 > mimetype = 'text/plain'
683 683 > EOF
684 684
685 685 $ killdaemons.py
686 686 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log \
687 687 > --config web.style=fallback --config web.templates=x/templates
688 688 $ cat hg.pid >> $DAEMON_PIDS
689 689
690 690 $ get-with-headers.py localhost:$HGPORT "?style=`pwd`/x"
691 691 200 Script output follows
692 692
693 693 fall back to default
694 694
695 695 $ get-with-headers.py localhost:$HGPORT '?style=..'
696 696 200 Script output follows
697 697
698 698 fall back to default
699 699
700 700 $ get-with-headers.py localhost:$HGPORT '?style=./..'
701 701 200 Script output follows
702 702
703 703 fall back to default
704 704
705 705 $ get-with-headers.py localhost:$HGPORT '?style=.../.../'
706 706 200 Script output follows
707 707
708 708 fall back to default
709 709
710 710 errors
711 711
712 712 $ cat errors.log
713 713
714 714 Uncaught exceptions result in a logged error and canned HTTP response
715 715
716 716 $ killdaemons.py
717 717 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
718 718 $ cat hg.pid >> $DAEMON_PIDS
719 719
720 720 $ get-with-headers.py localhost:$HGPORT 'raiseerror' transfer-encoding content-type
721 721 500 Internal Server Error
722 722 transfer-encoding: chunked
723 723
724 724 Internal Server Error (no-eol)
725 725 [1]
726 726
727 727 $ killdaemons.py
728 728 $ head -1 errors.log
729 729 .* Exception happened during processing request '/raiseerror': (re)
730 730
731 731 Uncaught exception after partial content sent
732 732
733 733 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
734 734 $ cat hg.pid >> $DAEMON_PIDS
735 735 $ get-with-headers.py localhost:$HGPORT 'raiseerror?partialresponse=1' transfer-encoding content-type
736 736 200 Script output follows
737 737 transfer-encoding: chunked
738 738 content-type: text/plain
739 739
740 740 partial content
741 741 Internal Server Error (no-eol)
742 742
743 743 $ killdaemons.py
744 744 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now