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