##// END OF EJS Templates
gitweb: preserve whitespace in description...
Gregory Szorc -
r33557:875b054e default
parent child Browse files
Show More
@@ -1,14 +1,12 b''
1 <div>
1 <div>
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>
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 </div>
3 </div>
4 <div class="title_text">
4 <div class="title_text">
5 <div class="log_link">
5 <div class="log_link">
6 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a><br/>
6 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a><br/>
7 </div>
7 </div>
8 <i>{author|obfuscate} [{date|rfc822date}] rev {rev}</i><br/>
8 <i>{author|obfuscate} [{date|rfc822date}] rev {rev}</i><br/>
9 </div>
9 </div>
10 <div class="log_body description">
10 <div class="log_body description">{desc|strip|escape|websub|nonempty}
11 {desc|strip|escape|websub|addbreaks|nonempty}
11
12 <br/>
13 <br/>
14 </div>
12 </div>
@@ -1,59 +1,57 b''
1 {header}
1 {header}
2 <title>{repo|escape}: changeset {rev}:{node|short}</title>
2 <title>{repo|escape}: changeset {rev}:{node|short}</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
12 <a href="/">Mercurial</a> {pathdef%breadcrumb} / changeset
12 <a href="/">Mercurial</a> {pathdef%breadcrumb} / changeset
13 </div>
13 </div>
14
14
15 <div class="page_nav">
15 <div class="page_nav">
16 <div>
16 <div>
17 <a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
17 <a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
18 <a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a> |
18 <a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a> |
19 <a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a> |
19 <a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a> |
20 <a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a> |
20 <a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a> |
21 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
21 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
22 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
22 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
23 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
23 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
24 <a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a> |
24 <a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a> |
25 changeset |
25 changeset |
26 <a href="{url|urlescape}raw-rev/{symrev}">raw</a> {archives%archiveentry} |
26 <a href="{url|urlescape}raw-rev/{symrev}">raw</a> {archives%archiveentry} |
27 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
27 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
28 </div>
28 </div>
29 {searchform}
29 {searchform}
30 </div>
30 </div>
31
31
32 <div>
32 <div>
33 <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>
33 <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>
34 </div>
34 </div>
35 <div class="title_text">
35 <div class="title_text">
36 <table cellspacing="0">
36 <table cellspacing="0">
37 <tr><td>author</td><td>{author|obfuscate}</td></tr>
37 <tr><td>author</td><td>{author|obfuscate}</td></tr>
38 <tr><td></td><td class="date age">{date|rfc822date}</td></tr>
38 <tr><td></td><td class="date age">{date|rfc822date}</td></tr>
39 {branch%changesetbranch}
39 {branch%changesetbranch}
40 <tr>
40 <tr>
41 <td>changeset {rev}</td>
41 <td>changeset {rev}</td>
42 <td style="font-family:monospace"><a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
42 <td style="font-family:monospace"><a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
43 </tr>
43 </tr>
44 {ifeq(count(parent), '2', parent%changesetparentdiff, parent%changesetparent)}
44 {ifeq(count(parent), '2', parent%changesetparentdiff, parent%changesetparent)}
45 {child%changesetchild}
45 {child%changesetchild}
46 </table></div>
46 </table></div>
47
47
48 <div class="page_body description">
48 <div class="page_body description">{desc|strip|escape|websub|nonempty}</div>
49 {desc|strip|escape|websub|addbreaks|nonempty}
50 </div>
51 <div class="list_head"></div>
49 <div class="list_head"></div>
52 <div class="title_text">
50 <div class="title_text">
53 <table cellspacing="0">
51 <table cellspacing="0">
54 {files}
52 {files}
55 </table></div>
53 </table></div>
56
54
57 <div class="page_body diffblocks">{diff}</div>
55 <div class="page_body diffblocks">{diff}</div>
58
56
59 {footer}
57 {footer}
@@ -1,80 +1,78 b''
1 {header}
1 {header}
2 <title>{repo|escape}: {file|escape}@{node|short} (annotated)</title>
2 <title>{repo|escape}: {file|escape}@{node|short} (annotated)</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
12 <a href="/">Mercurial</a> {pathdef%breadcrumb} / annotate
12 <a href="/">Mercurial</a> {pathdef%breadcrumb} / annotate
13 </div>
13 </div>
14
14
15 <div class="page_nav">
15 <div class="page_nav">
16 <div>
16 <div>
17 <a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
17 <a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
18 <a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
18 <a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
19 <a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
19 <a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
20 <a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
20 <a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
21 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
21 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
22 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
22 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
23 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
23 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
24 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a> |
24 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a> |
25 <a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a> |
25 <a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a> |
26 <a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
26 <a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
27 <a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
27 <a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
28 <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
28 <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
29 annotate |
29 annotate |
30 <a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
30 <a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
31 <a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
31 <a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
32 <a href="{url|urlescape}raw-file/{symrev}/{file|urlescape}">raw</a> |
32 <a href="{url|urlescape}raw-file/{symrev}/{file|urlescape}">raw</a> |
33 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
33 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
34 </div>
34 </div>
35 {searchform}
35 {searchform}
36 </div>
36 </div>
37
37
38 <div class="title">{file|escape}</div>
38 <div class="title">{file|escape}</div>
39
39
40 <div class="title_text">
40 <div class="title_text">
41 <table cellspacing="0">
41 <table cellspacing="0">
42 <tr>
42 <tr>
43 <td>author</td>
43 <td>author</td>
44 <td>{author|obfuscate}</td>
44 <td>{author|obfuscate}</td>
45 </tr>
45 </tr>
46 <tr>
46 <tr>
47 <td></td>
47 <td></td>
48 <td class="date age">{date|rfc822date}</td>
48 <td class="date age">{date|rfc822date}</td>
49 </tr>
49 </tr>
50 {branch%filerevbranch}
50 {branch%filerevbranch}
51 <tr>
51 <tr>
52 <td>changeset {rev}</td>
52 <td>changeset {rev}</td>
53 <td style="font-family:monospace"><a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
53 <td style="font-family:monospace"><a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
54 </tr>
54 </tr>
55 {parent%fileannotateparent}
55 {parent%fileannotateparent}
56 {child%fileannotatechild}
56 {child%fileannotatechild}
57 <tr>
57 <tr>
58 <td>permissions</td>
58 <td>permissions</td>
59 <td style="font-family:monospace">{permissions|permissions}</td>
59 <td style="font-family:monospace">{permissions|permissions}</td>
60 </tr>
60 </tr>
61 </table>
61 </table>
62 </div>
62 </div>
63
63
64 <div class="page_path description">
64 <div class="page_path description">{desc|strip|escape|websub|nonempty}</div>
65 {desc|strip|escape|websub|addbreaks|nonempty}
66 </div>
67 <div class="page_body">
65 <div class="page_body">
68 <table>
66 <table>
69 <tbody class="sourcelines"
67 <tbody class="sourcelines"
70 data-logurl="{url|urlescape}log/{symrev}/{file|urlescape}"
68 data-logurl="{url|urlescape}log/{symrev}/{file|urlescape}"
71 data-selectabletag="TR"
69 data-selectabletag="TR"
72 data-ishead="{ishead}">
70 data-ishead="{ishead}">
73 {annotate%annotateline}
71 {annotate%annotateline}
74 </tbody>
72 </tbody>
75 </table>
73 </table>
76 </div>
74 </div>
77
75
78 <script type="text/javascript" src="{staticurl|urlescape}followlines.js"></script>
76 <script type="text/javascript" src="{staticurl|urlescape}followlines.js"></script>
79
77
80 {footer}
78 {footer}
@@ -1,79 +1,77 b''
1 {header}
1 {header}
2 <title>{repo|escape}: {file|escape}@{node|short}</title>
2 <title>{repo|escape}: {file|escape}@{node|short}</title>
3 <link rel="alternate" type="application/atom+xml"
3 <link rel="alternate" type="application/atom+xml"
4 href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
4 href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
5 <link rel="alternate" type="application/rss+xml"
5 <link rel="alternate" type="application/rss+xml"
6 href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
6 href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
7 </head>
7 </head>
8 <body>
8 <body>
9
9
10 <div class="page_header">
10 <div class="page_header">
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
11 <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
12 <a href="/">Mercurial</a> {pathdef%breadcrumb} / file revision
12 <a href="/">Mercurial</a> {pathdef%breadcrumb} / file revision
13 </div>
13 </div>
14
14
15 <div class="page_nav">
15 <div class="page_nav">
16 <div>
16 <div>
17 <a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
17 <a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
18 <a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
18 <a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
19 <a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
19 <a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
20 <a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
20 <a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
21 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
21 <a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
22 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
22 <a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
23 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
23 <a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
24 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a> |
24 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a> |
25 <a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a> |
25 <a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a> |
26 file |
26 file |
27 <a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
27 <a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
28 <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
28 <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
29 <a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
29 <a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
30 <a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
30 <a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
31 <a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
31 <a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
32 <a href="{url|urlescape}raw-file/{symrev}/{file|urlescape}">raw</a> |
32 <a href="{url|urlescape}raw-file/{symrev}/{file|urlescape}">raw</a> |
33 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
33 <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
34 </div>
34 </div>
35 {searchform}
35 {searchform}
36 </div>
36 </div>
37
37
38 <div class="title">{file|escape}</div>
38 <div class="title">{file|escape}</div>
39
39
40 <div class="title_text">
40 <div class="title_text">
41 <table cellspacing="0">
41 <table cellspacing="0">
42 <tr>
42 <tr>
43 <td>author</td>
43 <td>author</td>
44 <td>{author|obfuscate}</td>
44 <td>{author|obfuscate}</td>
45 </tr>
45 </tr>
46 <tr>
46 <tr>
47 <td></td>
47 <td></td>
48 <td class="date age">{date|rfc822date}</td>
48 <td class="date age">{date|rfc822date}</td>
49 </tr>
49 </tr>
50 {branch%filerevbranch}
50 {branch%filerevbranch}
51 <tr>
51 <tr>
52 <td>changeset {rev}</td>
52 <td>changeset {rev}</td>
53 <td style="font-family:monospace"><a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
53 <td style="font-family:monospace"><a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
54 </tr>
54 </tr>
55 {parent%filerevparent}
55 {parent%filerevparent}
56 {child%filerevchild}
56 {child%filerevchild}
57 <tr>
57 <tr>
58 <td>permissions</td>
58 <td>permissions</td>
59 <td style="font-family:monospace">{permissions|permissions}</td>
59 <td style="font-family:monospace">{permissions|permissions}</td>
60 </tr>
60 </tr>
61 </table>
61 </table>
62 </div>
62 </div>
63
63
64 <div class="page_path description">
64 <div class="page_path description">{desc|strip|escape|websub|nonempty}</div>
65 {desc|strip|escape|websub|addbreaks|nonempty}
66 </div>
67
65
68 <div class="page_body">
66 <div class="page_body">
69 <pre class="sourcelines stripes"
67 <pre class="sourcelines stripes"
70 data-logurl="{url|urlescape}log/{symrev}/{file|urlescape}"
68 data-logurl="{url|urlescape}log/{symrev}/{file|urlescape}"
71 data-selectabletag="SPAN"
69 data-selectabletag="SPAN"
72 data-ishead="{ishead}">
70 data-ishead="{ishead}">
73 {text%fileline}
71 {text%fileline}
74 </pre>
72 </pre>
75 </div>
73 </div>
76
74
77 <script type="text/javascript" src="{staticurl|urlescape}followlines.js"></script>
75 <script type="text/javascript" src="{staticurl|urlescape}followlines.js"></script>
78
76
79 {footer}
77 {footer}
@@ -1,383 +1,384 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 span.age { position:relative; float:left; width:142px; font-style:italic; }
32 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 div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
64 div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
65 div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
65 div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
66
66
67 .search {
67 .search {
68 margin-right: 8px;
68 margin-right: 8px;
69 }
69 }
70
70
71 div#hint {
71 div#hint {
72 position: absolute;
72 position: absolute;
73 display: none;
73 display: none;
74 width: 250px;
74 width: 250px;
75 padding: 5px;
75 padding: 5px;
76 background: #ffc;
76 background: #ffc;
77 border: 1px solid yellow;
77 border: 1px solid yellow;
78 border-radius: 5px;
78 border-radius: 5px;
79 }
79 }
80
80
81 #searchform:hover div#hint { display: block; }
81 #searchform:hover div#hint { display: block; }
82
82
83 tr.thisrev a { color:#999999; text-decoration: none; }
83 tr.thisrev a { color:#999999; text-decoration: none; }
84 tr.thisrev pre { color:#009900; }
84 tr.thisrev pre { color:#009900; }
85 td.annotate {
85 td.annotate {
86 white-space: nowrap;
86 white-space: nowrap;
87 }
87 }
88 div.annotate-info {
88 div.annotate-info {
89 z-index: 5;
89 z-index: 5;
90 display: none;
90 display: none;
91 position: absolute;
91 position: absolute;
92 background-color: #FFFFFF;
92 background-color: #FFFFFF;
93 border: 1px solid #d9d8d1;
93 border: 1px solid #d9d8d1;
94 text-align: left;
94 text-align: left;
95 color: #000000;
95 color: #000000;
96 padding: 5px;
96 padding: 5px;
97 }
97 }
98 div.annotate-info a { color: #0000FF; text-decoration: underline; }
98 div.annotate-info a { color: #0000FF; text-decoration: underline; }
99 td.annotate:hover div.annotate-info { display: inline; }
99 td.annotate:hover div.annotate-info { display: inline; }
100 .linenr { color:#999999; text-decoration:none }
100 .linenr { color:#999999; text-decoration:none }
101 div.rss_logo { float: right; white-space: nowrap; }
101 div.rss_logo { float: right; white-space: nowrap; }
102 div.rss_logo a {
102 div.rss_logo a {
103 padding:3px 6px; line-height:10px;
103 padding:3px 6px; line-height:10px;
104 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
104 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
105 color:#ffffff; background-color:#ff6600;
105 color:#ffffff; background-color:#ff6600;
106 font-weight:bold; font-family:sans-serif; font-size:10px;
106 font-weight:bold; font-family:sans-serif; font-size:10px;
107 text-align:center; text-decoration:none;
107 text-align:center; text-decoration:none;
108 }
108 }
109 div.rss_logo a:hover { background-color:#ee5500; }
109 div.rss_logo a:hover { background-color:#ee5500; }
110 pre { margin: 0; }
110 pre { margin: 0; }
111 span.logtags span {
111 span.logtags span {
112 padding: 0px 4px;
112 padding: 0px 4px;
113 font-size: 10px;
113 font-size: 10px;
114 font-weight: normal;
114 font-weight: normal;
115 border: 1px solid;
115 border: 1px solid;
116 background-color: #ffaaff;
116 background-color: #ffaaff;
117 border-color: #ffccff #ff00ee #ff00ee #ffccff;
117 border-color: #ffccff #ff00ee #ff00ee #ffccff;
118 }
118 }
119 span.logtags span.tagtag {
119 span.logtags span.tagtag {
120 background-color: #ffffaa;
120 background-color: #ffffaa;
121 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
121 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
122 }
122 }
123 span.logtags span.branchtag {
123 span.logtags span.branchtag {
124 background-color: #aaffaa;
124 background-color: #aaffaa;
125 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
125 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
126 }
126 }
127 span.logtags span.inbranchtag {
127 span.logtags span.inbranchtag {
128 background-color: #d5dde6;
128 background-color: #d5dde6;
129 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
129 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
130 }
130 }
131 span.logtags span.bookmarktag {
131 span.logtags span.bookmarktag {
132 background-color: #afdffa;
132 background-color: #afdffa;
133 border-color: #ccecff #46ace6 #46ace6 #ccecff;
133 border-color: #ccecff #46ace6 #46ace6 #ccecff;
134 }
134 }
135 span.difflineplus { color:#008800; }
135 span.difflineplus { color:#008800; }
136 span.difflineminus { color:#cc0000; }
136 span.difflineminus { color:#cc0000; }
137 span.difflineat { color:#990099; }
137 span.difflineat { color:#990099; }
138 div.diffblocks { counter-reset: lineno; }
138 div.diffblocks { counter-reset: lineno; }
139 div.diffblock { counter-increment: lineno; }
139 div.diffblock { counter-increment: lineno; }
140 pre.sourcelines { position: relative; counter-reset: lineno; }
140 pre.sourcelines { position: relative; counter-reset: lineno; }
141 pre.sourcelines > span {
141 pre.sourcelines > span {
142 display: inline-block;
142 display: inline-block;
143 box-sizing: border-box;
143 box-sizing: border-box;
144 width: 100%;
144 width: 100%;
145 padding: 0 0 0 5em;
145 padding: 0 0 0 5em;
146 counter-increment: lineno;
146 counter-increment: lineno;
147 vertical-align: top;
147 vertical-align: top;
148 }
148 }
149 pre.sourcelines > span:before {
149 pre.sourcelines > span:before {
150 -moz-user-select: -moz-none;
150 -moz-user-select: -moz-none;
151 -khtml-user-select: none;
151 -khtml-user-select: none;
152 -webkit-user-select: none;
152 -webkit-user-select: none;
153 -ms-user-select: none;
153 -ms-user-select: none;
154 user-select: none;
154 user-select: none;
155 display: inline-block;
155 display: inline-block;
156 margin-left: -6em;
156 margin-left: -6em;
157 width: 4em;
157 width: 4em;
158 color: #999;
158 color: #999;
159 text-align: right;
159 text-align: right;
160 content: counters(lineno,".");
160 content: counters(lineno,".");
161 float: left;
161 float: left;
162 }
162 }
163 pre.sourcelines > a {
163 pre.sourcelines > a {
164 display: inline-block;
164 display: inline-block;
165 position: absolute;
165 position: absolute;
166 left: 0px;
166 left: 0px;
167 width: 4em;
167 width: 4em;
168 height: 1em;
168 height: 1em;
169 }
169 }
170 tr:target td,
170 tr:target td,
171 pre.sourcelines > span:target,
171 pre.sourcelines > span:target,
172 pre.sourcelines.stripes > span:target {
172 pre.sourcelines.stripes > span:target {
173 background-color: #bfdfff;
173 background-color: #bfdfff;
174 }
174 }
175
175
176 .description {
176 .description {
177 font-family: monospace;
177 font-family: monospace;
178 white-space: pre;
178 }
179 }
179
180
180 /* Followlines */
181 /* Followlines */
181 tbody.sourcelines > tr.followlines-selected,
182 tbody.sourcelines > tr.followlines-selected,
182 pre.sourcelines > span.followlines-selected {
183 pre.sourcelines > span.followlines-selected {
183 background-color: #99C7E9 !important;
184 background-color: #99C7E9 !important;
184 }
185 }
185
186
186 div#followlines {
187 div#followlines {
187 background-color: #B7B7B7;
188 background-color: #B7B7B7;
188 border: 1px solid #CCC;
189 border: 1px solid #CCC;
189 border-radius: 5px;
190 border-radius: 5px;
190 padding: 4px;
191 padding: 4px;
191 position: fixed;
192 position: fixed;
192 }
193 }
193
194
194 div.followlines-cancel {
195 div.followlines-cancel {
195 text-align: right;
196 text-align: right;
196 }
197 }
197
198
198 div.followlines-cancel > button {
199 div.followlines-cancel > button {
199 line-height: 80%;
200 line-height: 80%;
200 padding: 0;
201 padding: 0;
201 border: 0;
202 border: 0;
202 border-radius: 2px;
203 border-radius: 2px;
203 background-color: inherit;
204 background-color: inherit;
204 font-weight: bold;
205 font-weight: bold;
205 }
206 }
206
207
207 div.followlines-cancel > button:hover {
208 div.followlines-cancel > button:hover {
208 color: #FFFFFF;
209 color: #FFFFFF;
209 background-color: #CF1F1F;
210 background-color: #CF1F1F;
210 }
211 }
211
212
212 div.followlines-link {
213 div.followlines-link {
213 margin: 2px;
214 margin: 2px;
214 margin-top: 4px;
215 margin-top: 4px;
215 font-family: sans-serif;
216 font-family: sans-serif;
216 }
217 }
217
218
218 .btn-followlines {
219 .btn-followlines {
219 display: none;
220 display: none;
220 cursor: pointer;
221 cursor: pointer;
221 box-sizing: content-box;
222 box-sizing: content-box;
222 font-size: 11px;
223 font-size: 11px;
223 width: 13px;
224 width: 13px;
224 height: 13px;
225 height: 13px;
225 border-radius: 3px;
226 border-radius: 3px;
226 margin: 0px;
227 margin: 0px;
227 margin-top: -2px;
228 margin-top: -2px;
228 padding: 0px;
229 padding: 0px;
229 background-color: #E5FDE5;
230 background-color: #E5FDE5;
230 border: 1px solid #9BC19B;
231 border: 1px solid #9BC19B;
231 font-family: monospace;
232 font-family: monospace;
232 text-align: center;
233 text-align: center;
233 line-height: 5px;
234 line-height: 5px;
234 }
235 }
235
236
236 tr .btn-followlines {
237 tr .btn-followlines {
237 position: absolute;
238 position: absolute;
238 }
239 }
239
240
240 span .btn-followlines {
241 span .btn-followlines {
241 float: left;
242 float: left;
242 }
243 }
243
244
244 span.followlines-select .btn-followlines {
245 span.followlines-select .btn-followlines {
245 margin-left: -1.6em;
246 margin-left: -1.6em;
246 }
247 }
247
248
248 .btn-followlines:hover {
249 .btn-followlines:hover {
249 transform: scale(1.1, 1.1);
250 transform: scale(1.1, 1.1);
250 }
251 }
251
252
252 .btn-followlines .followlines-plus {
253 .btn-followlines .followlines-plus {
253 color: green;
254 color: green;
254 }
255 }
255
256
256 .btn-followlines .followlines-minus {
257 .btn-followlines .followlines-minus {
257 color: red;
258 color: red;
258 }
259 }
259
260
260 .btn-followlines-end {
261 .btn-followlines-end {
261 background-color: #ffdcdc;
262 background-color: #ffdcdc;
262 }
263 }
263
264
264 .sourcelines tr:hover .btn-followlines,
265 .sourcelines tr:hover .btn-followlines,
265 .sourcelines span.followlines-select:hover > .btn-followlines {
266 .sourcelines span.followlines-select:hover > .btn-followlines {
266 display: inline;
267 display: inline;
267 }
268 }
268
269
269 .btn-followlines-hidden,
270 .btn-followlines-hidden,
270 .sourcelines tr:hover .btn-followlines-hidden {
271 .sourcelines tr:hover .btn-followlines-hidden {
271 display: none;
272 display: none;
272 }
273 }
273
274
274 /* Graph */
275 /* Graph */
275 div#wrapper {
276 div#wrapper {
276 position: relative;
277 position: relative;
277 margin: 0;
278 margin: 0;
278 padding: 0;
279 padding: 0;
279 margin-top: 3px;
280 margin-top: 3px;
280 }
281 }
281
282
282 canvas {
283 canvas {
283 position: absolute;
284 position: absolute;
284 z-index: 5;
285 z-index: 5;
285 top: -0.9em;
286 top: -0.9em;
286 margin: 0;
287 margin: 0;
287 }
288 }
288
289
289 ul#nodebgs {
290 ul#nodebgs {
290 list-style: none inside none;
291 list-style: none inside none;
291 padding: 0;
292 padding: 0;
292 margin: 0;
293 margin: 0;
293 top: -0.7em;
294 top: -0.7em;
294 }
295 }
295
296
296 ul#graphnodes li, ul#nodebgs li {
297 ul#graphnodes li, ul#nodebgs li {
297 height: 39px;
298 height: 39px;
298 }
299 }
299
300
300 ul#graphnodes {
301 ul#graphnodes {
301 position: absolute;
302 position: absolute;
302 z-index: 10;
303 z-index: 10;
303 top: -0.8em;
304 top: -0.8em;
304 list-style: none inside none;
305 list-style: none inside none;
305 padding: 0;
306 padding: 0;
306 }
307 }
307
308
308 ul#graphnodes li .info {
309 ul#graphnodes li .info {
309 display: block;
310 display: block;
310 font-size: 100%;
311 font-size: 100%;
311 position: relative;
312 position: relative;
312 top: -3px;
313 top: -3px;
313 font-style: italic;
314 font-style: italic;
314 }
315 }
315
316
316 /* Comparison */
317 /* Comparison */
317 .legend {
318 .legend {
318 padding: 1.5% 0 1.5% 0;
319 padding: 1.5% 0 1.5% 0;
319 }
320 }
320
321
321 .legendinfo {
322 .legendinfo {
322 border: 1px solid #d9d8d1;
323 border: 1px solid #d9d8d1;
323 font-size: 80%;
324 font-size: 80%;
324 text-align: center;
325 text-align: center;
325 padding: 0.5%;
326 padding: 0.5%;
326 }
327 }
327
328
328 .equal {
329 .equal {
329 background-color: #ffffff;
330 background-color: #ffffff;
330 }
331 }
331
332
332 .delete {
333 .delete {
333 background-color: #faa;
334 background-color: #faa;
334 color: #333;
335 color: #333;
335 }
336 }
336
337
337 .insert {
338 .insert {
338 background-color: #ffa;
339 background-color: #ffa;
339 }
340 }
340
341
341 .replace {
342 .replace {
342 background-color: #e8e8e8;
343 background-color: #e8e8e8;
343 }
344 }
344
345
345 .comparison {
346 .comparison {
346 overflow-x: auto;
347 overflow-x: auto;
347 }
348 }
348
349
349 .header th {
350 .header th {
350 text-align: center;
351 text-align: center;
351 }
352 }
352
353
353 .block {
354 .block {
354 border-top: 1px solid #d9d8d1;
355 border-top: 1px solid #d9d8d1;
355 }
356 }
356
357
357 .scroll-loading {
358 .scroll-loading {
358 -webkit-animation: change_color 1s linear 0s infinite alternate;
359 -webkit-animation: change_color 1s linear 0s infinite alternate;
359 -moz-animation: change_color 1s linear 0s infinite alternate;
360 -moz-animation: change_color 1s linear 0s infinite alternate;
360 -o-animation: change_color 1s linear 0s infinite alternate;
361 -o-animation: change_color 1s linear 0s infinite alternate;
361 animation: change_color 1s linear 0s infinite alternate;
362 animation: change_color 1s linear 0s infinite alternate;
362 }
363 }
363
364
364 @-webkit-keyframes change_color {
365 @-webkit-keyframes change_color {
365 from { background-color: #A0CEFF; } to { }
366 from { background-color: #A0CEFF; } to { }
366 }
367 }
367 @-moz-keyframes change_color {
368 @-moz-keyframes change_color {
368 from { background-color: #A0CEFF; } to { }
369 from { background-color: #A0CEFF; } to { }
369 }
370 }
370 @-o-keyframes change_color {
371 @-o-keyframes change_color {
371 from { background-color: #A0CEFF; } to { }
372 from { background-color: #A0CEFF; } to { }
372 }
373 }
373 @keyframes change_color {
374 @keyframes change_color {
374 from { background-color: #A0CEFF; } to { }
375 from { background-color: #A0CEFF; } to { }
375 }
376 }
376
377
377 .scroll-loading-error {
378 .scroll-loading-error {
378 background-color: #FFCCCC !important;
379 background-color: #FFCCCC !important;
379 }
380 }
380
381
381 #doc {
382 #doc {
382 margin: 0 8px;
383 margin: 0 8px;
383 }
384 }
@@ -1,873 +1,874 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="tag">tip</span> <span class="tag">@</span> <span class="tag">a b c</span> <span class="tag">d/e/f</span>
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 </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 <tr class="fileline">
290 <tr class="fileline">
291 <td class="name"><a href="/file/tip/">[up]</a></td>
291 <td class="name"><a href="/file/tip/">[up]</a></td>
292 <td class="size"></td>
292 <td class="size"></td>
293 <td class="permissions">drwxr-xr-x</td>
293 <td class="permissions">drwxr-xr-x</td>
294 </tr>
294 </tr>
295
295
296 <tr class="fileline">
296 <tr class="fileline">
297 <td class="name">
297 <td class="name">
298 <a href="/file/tip/da">
298 <a href="/file/tip/da">
299 <img src="/static/coal-folder.png" alt="dir."/> da/
299 <img src="/static/coal-folder.png" alt="dir."/> da/
300 </a>
300 </a>
301 <a href="/file/tip/da/">
301 <a href="/file/tip/da/">
302
302
303 </a>
303 </a>
304 </td>
304 </td>
305 <td class="size"></td>
305 <td class="size"></td>
306 <td class="permissions">drwxr-xr-x</td>
306 <td class="permissions">drwxr-xr-x</td>
307 </tr>
307 </tr>
308
308
309 <tr class="fileline">
309 <tr class="fileline">
310 <td class="filename">
310 <td class="filename">
311 <a href="/file/tip/foo">
311 <a href="/file/tip/foo">
312 <img src="/static/coal-file.png" alt="file"/> foo
312 <img src="/static/coal-file.png" alt="file"/> foo
313 </a>
313 </a>
314 </td>
314 </td>
315 <td class="size">4</td>
315 <td class="size">4</td>
316 <td class="permissions">-rw-r--r--</td>
316 <td class="permissions">-rw-r--r--</td>
317 </tr>
317 </tr>
318 </tbody>
318 </tbody>
319 </table>
319 </table>
320 </div>
320 </div>
321 </div>
321 </div>
322
322
323
323
324 </body>
324 </body>
325 </html>
325 </html>
326
326
327
327
328 stop and restart
328 stop and restart
329
329
330 $ killdaemons.py
330 $ killdaemons.py
331 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log
331 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log
332 $ cat hg.pid >> $DAEMON_PIDS
332 $ cat hg.pid >> $DAEMON_PIDS
333
333
334 Test the access/error files are opened in append mode
334 Test the access/error files are opened in append mode
335
335
336 $ $PYTHON -c "print len(file('access.log').readlines()), 'log lines written'"
336 $ $PYTHON -c "print len(file('access.log').readlines()), 'log lines written'"
337 14 log lines written
337 14 log lines written
338
338
339 static file
339 static file
340
340
341 $ get-with-headers.py --twice localhost:$HGPORT 'static/style-gitweb.css' - date etag server
341 $ get-with-headers.py --twice localhost:$HGPORT 'static/style-gitweb.css' - date etag server
342 200 Script output follows
342 200 Script output follows
343 content-length: 8985
343 content-length: 9007
344 content-type: text/css
344 content-type: text/css
345
345
346 body { font-family: sans-serif; font-size: 12px; border:solid #d9d8d1; border-width:1px; margin:10px; background: white; color: black; }
346 body { font-family: sans-serif; font-size: 12px; border:solid #d9d8d1; border-width:1px; margin:10px; background: white; color: black; }
347 a { color:#0000cc; }
347 a { color:#0000cc; }
348 a:hover, a:visited, a:active { color:#880000; }
348 a:hover, a:visited, a:active { color:#880000; }
349 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
349 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
350 div.page_header a:visited { color:#0000cc; }
350 div.page_header a:visited { color:#0000cc; }
351 div.page_header a:hover { color:#880000; }
351 div.page_header a:hover { color:#880000; }
352 div.page_nav {
352 div.page_nav {
353 padding:8px;
353 padding:8px;
354 display: flex;
354 display: flex;
355 justify-content: space-between;
355 justify-content: space-between;
356 align-items: center;
356 align-items: center;
357 }
357 }
358 div.page_nav a:visited { color:#0000cc; }
358 div.page_nav a:visited { color:#0000cc; }
359 div.extra_nav {
359 div.extra_nav {
360 padding: 8px;
360 padding: 8px;
361 }
361 }
362 div.extra_nav a:visited {
362 div.extra_nav a:visited {
363 color: #0000cc;
363 color: #0000cc;
364 }
364 }
365 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
365 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
366 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
366 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
367 div.page_footer_text { float:left; color:#555555; font-style:italic; }
367 div.page_footer_text { float:left; color:#555555; font-style:italic; }
368 div.page_body { padding:8px; }
368 div.page_body { padding:8px; }
369 div.title, a.title {
369 div.title, a.title {
370 display:block; padding:6px 8px;
370 display:block; padding:6px 8px;
371 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
371 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
372 }
372 }
373 a.title:hover { background-color: #d9d8d1; }
373 a.title:hover { background-color: #d9d8d1; }
374 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
374 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
375 div.log_body { padding:8px 8px 8px 150px; }
375 div.log_body { padding:8px 8px 8px 150px; }
376 .age { white-space:nowrap; }
376 .age { white-space:nowrap; }
377 span.age { position:relative; float:left; width:142px; font-style:italic; }
377 span.age { position:relative; float:left; width:142px; font-style:italic; }
378 div.log_link {
378 div.log_link {
379 padding:0px 8px;
379 padding:0px 8px;
380 font-size:10px; font-family:sans-serif; font-style:normal;
380 font-size:10px; font-family:sans-serif; font-style:normal;
381 position:relative; float:left; width:136px;
381 position:relative; float:left; width:136px;
382 }
382 }
383 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
383 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
384 a.list { text-decoration:none; color:#000000; }
384 a.list { text-decoration:none; color:#000000; }
385 a.list:hover { text-decoration:underline; color:#880000; }
385 a.list:hover { text-decoration:underline; color:#880000; }
386 table { padding:8px 4px; }
386 table { padding:8px 4px; }
387 th { padding:2px 5px; font-size:12px; text-align:left; }
387 th { padding:2px 5px; font-size:12px; text-align:left; }
388 .parity0 { background-color:#ffffff; }
388 .parity0 { background-color:#ffffff; }
389 tr.dark, .parity1, pre.sourcelines.stripes > :nth-child(4n+4) { background-color:#f6f6f0; }
389 tr.dark, .parity1, pre.sourcelines.stripes > :nth-child(4n+4) { background-color:#f6f6f0; }
390 tr.light:hover, .parity0:hover, tr.dark:hover, .parity1:hover,
390 tr.light:hover, .parity0:hover, tr.dark:hover, .parity1:hover,
391 pre.sourcelines.stripes > :nth-child(4n+2):hover,
391 pre.sourcelines.stripes > :nth-child(4n+2):hover,
392 pre.sourcelines.stripes > :nth-child(4n+4):hover,
392 pre.sourcelines.stripes > :nth-child(4n+4):hover,
393 pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
393 pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
394 pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color:#edece6; }
394 pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color:#edece6; }
395 td { padding:2px 5px; font-size:12px; vertical-align:top; }
395 td { padding:2px 5px; font-size:12px; vertical-align:top; }
396 td.closed { background-color: #99f; }
396 td.closed { background-color: #99f; }
397 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
397 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
398 td.indexlinks { white-space: nowrap; }
398 td.indexlinks { white-space: nowrap; }
399 td.indexlinks a {
399 td.indexlinks a {
400 padding: 2px 5px; line-height: 10px;
400 padding: 2px 5px; line-height: 10px;
401 border: 1px solid;
401 border: 1px solid;
402 color: #ffffff; background-color: #7777bb;
402 color: #ffffff; background-color: #7777bb;
403 border-color: #aaaadd #333366 #333366 #aaaadd;
403 border-color: #aaaadd #333366 #333366 #aaaadd;
404 font-weight: bold; text-align: center; text-decoration: none;
404 font-weight: bold; text-align: center; text-decoration: none;
405 font-size: 10px;
405 font-size: 10px;
406 }
406 }
407 td.indexlinks a:hover { background-color: #6666aa; }
407 td.indexlinks a:hover { background-color: #6666aa; }
408 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
408 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
409 div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
409 div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
410 div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
410 div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
411
411
412 .search {
412 .search {
413 margin-right: 8px;
413 margin-right: 8px;
414 }
414 }
415
415
416 div#hint {
416 div#hint {
417 position: absolute;
417 position: absolute;
418 display: none;
418 display: none;
419 width: 250px;
419 width: 250px;
420 padding: 5px;
420 padding: 5px;
421 background: #ffc;
421 background: #ffc;
422 border: 1px solid yellow;
422 border: 1px solid yellow;
423 border-radius: 5px;
423 border-radius: 5px;
424 }
424 }
425
425
426 #searchform:hover div#hint { display: block; }
426 #searchform:hover div#hint { display: block; }
427
427
428 tr.thisrev a { color:#999999; text-decoration: none; }
428 tr.thisrev a { color:#999999; text-decoration: none; }
429 tr.thisrev pre { color:#009900; }
429 tr.thisrev pre { color:#009900; }
430 td.annotate {
430 td.annotate {
431 white-space: nowrap;
431 white-space: nowrap;
432 }
432 }
433 div.annotate-info {
433 div.annotate-info {
434 z-index: 5;
434 z-index: 5;
435 display: none;
435 display: none;
436 position: absolute;
436 position: absolute;
437 background-color: #FFFFFF;
437 background-color: #FFFFFF;
438 border: 1px solid #d9d8d1;
438 border: 1px solid #d9d8d1;
439 text-align: left;
439 text-align: left;
440 color: #000000;
440 color: #000000;
441 padding: 5px;
441 padding: 5px;
442 }
442 }
443 div.annotate-info a { color: #0000FF; text-decoration: underline; }
443 div.annotate-info a { color: #0000FF; text-decoration: underline; }
444 td.annotate:hover div.annotate-info { display: inline; }
444 td.annotate:hover div.annotate-info { display: inline; }
445 .linenr { color:#999999; text-decoration:none }
445 .linenr { color:#999999; text-decoration:none }
446 div.rss_logo { float: right; white-space: nowrap; }
446 div.rss_logo { float: right; white-space: nowrap; }
447 div.rss_logo a {
447 div.rss_logo a {
448 padding:3px 6px; line-height:10px;
448 padding:3px 6px; line-height:10px;
449 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
449 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
450 color:#ffffff; background-color:#ff6600;
450 color:#ffffff; background-color:#ff6600;
451 font-weight:bold; font-family:sans-serif; font-size:10px;
451 font-weight:bold; font-family:sans-serif; font-size:10px;
452 text-align:center; text-decoration:none;
452 text-align:center; text-decoration:none;
453 }
453 }
454 div.rss_logo a:hover { background-color:#ee5500; }
454 div.rss_logo a:hover { background-color:#ee5500; }
455 pre { margin: 0; }
455 pre { margin: 0; }
456 span.logtags span {
456 span.logtags span {
457 padding: 0px 4px;
457 padding: 0px 4px;
458 font-size: 10px;
458 font-size: 10px;
459 font-weight: normal;
459 font-weight: normal;
460 border: 1px solid;
460 border: 1px solid;
461 background-color: #ffaaff;
461 background-color: #ffaaff;
462 border-color: #ffccff #ff00ee #ff00ee #ffccff;
462 border-color: #ffccff #ff00ee #ff00ee #ffccff;
463 }
463 }
464 span.logtags span.tagtag {
464 span.logtags span.tagtag {
465 background-color: #ffffaa;
465 background-color: #ffffaa;
466 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
466 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
467 }
467 }
468 span.logtags span.branchtag {
468 span.logtags span.branchtag {
469 background-color: #aaffaa;
469 background-color: #aaffaa;
470 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
470 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
471 }
471 }
472 span.logtags span.inbranchtag {
472 span.logtags span.inbranchtag {
473 background-color: #d5dde6;
473 background-color: #d5dde6;
474 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
474 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
475 }
475 }
476 span.logtags span.bookmarktag {
476 span.logtags span.bookmarktag {
477 background-color: #afdffa;
477 background-color: #afdffa;
478 border-color: #ccecff #46ace6 #46ace6 #ccecff;
478 border-color: #ccecff #46ace6 #46ace6 #ccecff;
479 }
479 }
480 span.difflineplus { color:#008800; }
480 span.difflineplus { color:#008800; }
481 span.difflineminus { color:#cc0000; }
481 span.difflineminus { color:#cc0000; }
482 span.difflineat { color:#990099; }
482 span.difflineat { color:#990099; }
483 div.diffblocks { counter-reset: lineno; }
483 div.diffblocks { counter-reset: lineno; }
484 div.diffblock { counter-increment: lineno; }
484 div.diffblock { counter-increment: lineno; }
485 pre.sourcelines { position: relative; counter-reset: lineno; }
485 pre.sourcelines { position: relative; counter-reset: lineno; }
486 pre.sourcelines > span {
486 pre.sourcelines > span {
487 display: inline-block;
487 display: inline-block;
488 box-sizing: border-box;
488 box-sizing: border-box;
489 width: 100%;
489 width: 100%;
490 padding: 0 0 0 5em;
490 padding: 0 0 0 5em;
491 counter-increment: lineno;
491 counter-increment: lineno;
492 vertical-align: top;
492 vertical-align: top;
493 }
493 }
494 pre.sourcelines > span:before {
494 pre.sourcelines > span:before {
495 -moz-user-select: -moz-none;
495 -moz-user-select: -moz-none;
496 -khtml-user-select: none;
496 -khtml-user-select: none;
497 -webkit-user-select: none;
497 -webkit-user-select: none;
498 -ms-user-select: none;
498 -ms-user-select: none;
499 user-select: none;
499 user-select: none;
500 display: inline-block;
500 display: inline-block;
501 margin-left: -6em;
501 margin-left: -6em;
502 width: 4em;
502 width: 4em;
503 color: #999;
503 color: #999;
504 text-align: right;
504 text-align: right;
505 content: counters(lineno,".");
505 content: counters(lineno,".");
506 float: left;
506 float: left;
507 }
507 }
508 pre.sourcelines > a {
508 pre.sourcelines > a {
509 display: inline-block;
509 display: inline-block;
510 position: absolute;
510 position: absolute;
511 left: 0px;
511 left: 0px;
512 width: 4em;
512 width: 4em;
513 height: 1em;
513 height: 1em;
514 }
514 }
515 tr:target td,
515 tr:target td,
516 pre.sourcelines > span:target,
516 pre.sourcelines > span:target,
517 pre.sourcelines.stripes > span:target {
517 pre.sourcelines.stripes > span:target {
518 background-color: #bfdfff;
518 background-color: #bfdfff;
519 }
519 }
520
520
521 .description {
521 .description {
522 font-family: monospace;
522 font-family: monospace;
523 white-space: pre;
523 }
524 }
524
525
525 /* Followlines */
526 /* Followlines */
526 tbody.sourcelines > tr.followlines-selected,
527 tbody.sourcelines > tr.followlines-selected,
527 pre.sourcelines > span.followlines-selected {
528 pre.sourcelines > span.followlines-selected {
528 background-color: #99C7E9 !important;
529 background-color: #99C7E9 !important;
529 }
530 }
530
531
531 div#followlines {
532 div#followlines {
532 background-color: #B7B7B7;
533 background-color: #B7B7B7;
533 border: 1px solid #CCC;
534 border: 1px solid #CCC;
534 border-radius: 5px;
535 border-radius: 5px;
535 padding: 4px;
536 padding: 4px;
536 position: fixed;
537 position: fixed;
537 }
538 }
538
539
539 div.followlines-cancel {
540 div.followlines-cancel {
540 text-align: right;
541 text-align: right;
541 }
542 }
542
543
543 div.followlines-cancel > button {
544 div.followlines-cancel > button {
544 line-height: 80%;
545 line-height: 80%;
545 padding: 0;
546 padding: 0;
546 border: 0;
547 border: 0;
547 border-radius: 2px;
548 border-radius: 2px;
548 background-color: inherit;
549 background-color: inherit;
549 font-weight: bold;
550 font-weight: bold;
550 }
551 }
551
552
552 div.followlines-cancel > button:hover {
553 div.followlines-cancel > button:hover {
553 color: #FFFFFF;
554 color: #FFFFFF;
554 background-color: #CF1F1F;
555 background-color: #CF1F1F;
555 }
556 }
556
557
557 div.followlines-link {
558 div.followlines-link {
558 margin: 2px;
559 margin: 2px;
559 margin-top: 4px;
560 margin-top: 4px;
560 font-family: sans-serif;
561 font-family: sans-serif;
561 }
562 }
562
563
563 .btn-followlines {
564 .btn-followlines {
564 display: none;
565 display: none;
565 cursor: pointer;
566 cursor: pointer;
566 box-sizing: content-box;
567 box-sizing: content-box;
567 font-size: 11px;
568 font-size: 11px;
568 width: 13px;
569 width: 13px;
569 height: 13px;
570 height: 13px;
570 border-radius: 3px;
571 border-radius: 3px;
571 margin: 0px;
572 margin: 0px;
572 margin-top: -2px;
573 margin-top: -2px;
573 padding: 0px;
574 padding: 0px;
574 background-color: #E5FDE5;
575 background-color: #E5FDE5;
575 border: 1px solid #9BC19B;
576 border: 1px solid #9BC19B;
576 font-family: monospace;
577 font-family: monospace;
577 text-align: center;
578 text-align: center;
578 line-height: 5px;
579 line-height: 5px;
579 }
580 }
580
581
581 tr .btn-followlines {
582 tr .btn-followlines {
582 position: absolute;
583 position: absolute;
583 }
584 }
584
585
585 span .btn-followlines {
586 span .btn-followlines {
586 float: left;
587 float: left;
587 }
588 }
588
589
589 span.followlines-select .btn-followlines {
590 span.followlines-select .btn-followlines {
590 margin-left: -1.6em;
591 margin-left: -1.6em;
591 }
592 }
592
593
593 .btn-followlines:hover {
594 .btn-followlines:hover {
594 transform: scale(1.1, 1.1);
595 transform: scale(1.1, 1.1);
595 }
596 }
596
597
597 .btn-followlines .followlines-plus {
598 .btn-followlines .followlines-plus {
598 color: green;
599 color: green;
599 }
600 }
600
601
601 .btn-followlines .followlines-minus {
602 .btn-followlines .followlines-minus {
602 color: red;
603 color: red;
603 }
604 }
604
605
605 .btn-followlines-end {
606 .btn-followlines-end {
606 background-color: #ffdcdc;
607 background-color: #ffdcdc;
607 }
608 }
608
609
609 .sourcelines tr:hover .btn-followlines,
610 .sourcelines tr:hover .btn-followlines,
610 .sourcelines span.followlines-select:hover > .btn-followlines {
611 .sourcelines span.followlines-select:hover > .btn-followlines {
611 display: inline;
612 display: inline;
612 }
613 }
613
614
614 .btn-followlines-hidden,
615 .btn-followlines-hidden,
615 .sourcelines tr:hover .btn-followlines-hidden {
616 .sourcelines tr:hover .btn-followlines-hidden {
616 display: none;
617 display: none;
617 }
618 }
618
619
619 /* Graph */
620 /* Graph */
620 div#wrapper {
621 div#wrapper {
621 position: relative;
622 position: relative;
622 margin: 0;
623 margin: 0;
623 padding: 0;
624 padding: 0;
624 margin-top: 3px;
625 margin-top: 3px;
625 }
626 }
626
627
627 canvas {
628 canvas {
628 position: absolute;
629 position: absolute;
629 z-index: 5;
630 z-index: 5;
630 top: -0.9em;
631 top: -0.9em;
631 margin: 0;
632 margin: 0;
632 }
633 }
633
634
634 ul#nodebgs {
635 ul#nodebgs {
635 list-style: none inside none;
636 list-style: none inside none;
636 padding: 0;
637 padding: 0;
637 margin: 0;
638 margin: 0;
638 top: -0.7em;
639 top: -0.7em;
639 }
640 }
640
641
641 ul#graphnodes li, ul#nodebgs li {
642 ul#graphnodes li, ul#nodebgs li {
642 height: 39px;
643 height: 39px;
643 }
644 }
644
645
645 ul#graphnodes {
646 ul#graphnodes {
646 position: absolute;
647 position: absolute;
647 z-index: 10;
648 z-index: 10;
648 top: -0.8em;
649 top: -0.8em;
649 list-style: none inside none;
650 list-style: none inside none;
650 padding: 0;
651 padding: 0;
651 }
652 }
652
653
653 ul#graphnodes li .info {
654 ul#graphnodes li .info {
654 display: block;
655 display: block;
655 font-size: 100%;
656 font-size: 100%;
656 position: relative;
657 position: relative;
657 top: -3px;
658 top: -3px;
658 font-style: italic;
659 font-style: italic;
659 }
660 }
660
661
661 /* Comparison */
662 /* Comparison */
662 .legend {
663 .legend {
663 padding: 1.5% 0 1.5% 0;
664 padding: 1.5% 0 1.5% 0;
664 }
665 }
665
666
666 .legendinfo {
667 .legendinfo {
667 border: 1px solid #d9d8d1;
668 border: 1px solid #d9d8d1;
668 font-size: 80%;
669 font-size: 80%;
669 text-align: center;
670 text-align: center;
670 padding: 0.5%;
671 padding: 0.5%;
671 }
672 }
672
673
673 .equal {
674 .equal {
674 background-color: #ffffff;
675 background-color: #ffffff;
675 }
676 }
676
677
677 .delete {
678 .delete {
678 background-color: #faa;
679 background-color: #faa;
679 color: #333;
680 color: #333;
680 }
681 }
681
682
682 .insert {
683 .insert {
683 background-color: #ffa;
684 background-color: #ffa;
684 }
685 }
685
686
686 .replace {
687 .replace {
687 background-color: #e8e8e8;
688 background-color: #e8e8e8;
688 }
689 }
689
690
690 .comparison {
691 .comparison {
691 overflow-x: auto;
692 overflow-x: auto;
692 }
693 }
693
694
694 .header th {
695 .header th {
695 text-align: center;
696 text-align: center;
696 }
697 }
697
698
698 .block {
699 .block {
699 border-top: 1px solid #d9d8d1;
700 border-top: 1px solid #d9d8d1;
700 }
701 }
701
702
702 .scroll-loading {
703 .scroll-loading {
703 -webkit-animation: change_color 1s linear 0s infinite alternate;
704 -webkit-animation: change_color 1s linear 0s infinite alternate;
704 -moz-animation: change_color 1s linear 0s infinite alternate;
705 -moz-animation: change_color 1s linear 0s infinite alternate;
705 -o-animation: change_color 1s linear 0s infinite alternate;
706 -o-animation: change_color 1s linear 0s infinite alternate;
706 animation: change_color 1s linear 0s infinite alternate;
707 animation: change_color 1s linear 0s infinite alternate;
707 }
708 }
708
709
709 @-webkit-keyframes change_color {
710 @-webkit-keyframes change_color {
710 from { background-color: #A0CEFF; } to { }
711 from { background-color: #A0CEFF; } to { }
711 }
712 }
712 @-moz-keyframes change_color {
713 @-moz-keyframes change_color {
713 from { background-color: #A0CEFF; } to { }
714 from { background-color: #A0CEFF; } to { }
714 }
715 }
715 @-o-keyframes change_color {
716 @-o-keyframes change_color {
716 from { background-color: #A0CEFF; } to { }
717 from { background-color: #A0CEFF; } to { }
717 }
718 }
718 @keyframes change_color {
719 @keyframes change_color {
719 from { background-color: #A0CEFF; } to { }
720 from { background-color: #A0CEFF; } to { }
720 }
721 }
721
722
722 .scroll-loading-error {
723 .scroll-loading-error {
723 background-color: #FFCCCC !important;
724 background-color: #FFCCCC !important;
724 }
725 }
725
726
726 #doc {
727 #doc {
727 margin: 0 8px;
728 margin: 0 8px;
728 }
729 }
729 304 Not Modified
730 304 Not Modified
730
731
731
732
732 phase changes are refreshed (issue4061)
733 phase changes are refreshed (issue4061)
733
734
734 $ echo bar >> foo
735 $ echo bar >> foo
735 $ hg ci -msecret --secret
736 $ hg ci -msecret --secret
736 $ get-with-headers.py localhost:$HGPORT 'log?style=raw'
737 $ get-with-headers.py localhost:$HGPORT 'log?style=raw'
737 200 Script output follows
738 200 Script output follows
738
739
739
740
740 # HG changelog
741 # HG changelog
741 # Node ID 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
742 # Node ID 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
742
743
743 changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
744 changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
744 revision: 0
745 revision: 0
745 user: test
746 user: test
746 date: Thu, 01 Jan 1970 00:00:00 +0000
747 date: Thu, 01 Jan 1970 00:00:00 +0000
747 summary: base
748 summary: base
748 branch: default
749 branch: default
749 tag: tip
750 tag: tip
750 bookmark: @
751 bookmark: @
751 bookmark: a b c
752 bookmark: a b c
752 bookmark: d/e/f
753 bookmark: d/e/f
753
754
754
755
755 $ hg phase --draft tip
756 $ hg phase --draft tip
756 $ get-with-headers.py localhost:$HGPORT 'log?style=raw'
757 $ get-with-headers.py localhost:$HGPORT 'log?style=raw'
757 200 Script output follows
758 200 Script output follows
758
759
759
760
760 # HG changelog
761 # HG changelog
761 # Node ID a084749e708a9c4c0a5b652a2a446322ce290e04
762 # Node ID a084749e708a9c4c0a5b652a2a446322ce290e04
762
763
763 changeset: a084749e708a9c4c0a5b652a2a446322ce290e04
764 changeset: a084749e708a9c4c0a5b652a2a446322ce290e04
764 revision: 1
765 revision: 1
765 user: test
766 user: test
766 date: Thu, 01 Jan 1970 00:00:00 +0000
767 date: Thu, 01 Jan 1970 00:00:00 +0000
767 summary: secret
768 summary: secret
768 branch: default
769 branch: default
769 tag: tip
770 tag: tip
770
771
771 changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
772 changeset: 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
772 revision: 0
773 revision: 0
773 user: test
774 user: test
774 date: Thu, 01 Jan 1970 00:00:00 +0000
775 date: Thu, 01 Jan 1970 00:00:00 +0000
775 summary: base
776 summary: base
776 bookmark: @
777 bookmark: @
777 bookmark: a b c
778 bookmark: a b c
778 bookmark: d/e/f
779 bookmark: d/e/f
779
780
780
781
781
782
782 access bookmarks
783 access bookmarks
783
784
784 $ get-with-headers.py localhost:$HGPORT 'rev/@?style=paper' | egrep '^200|changeset 0:'
785 $ get-with-headers.py localhost:$HGPORT 'rev/@?style=paper' | egrep '^200|changeset 0:'
785 200 Script output follows
786 200 Script output follows
786 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
787 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
787
788
788 $ get-with-headers.py localhost:$HGPORT 'rev/%40?style=paper' | egrep '^200|changeset 0:'
789 $ get-with-headers.py localhost:$HGPORT 'rev/%40?style=paper' | egrep '^200|changeset 0:'
789 200 Script output follows
790 200 Script output follows
790 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
791 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
791
792
792 $ get-with-headers.py localhost:$HGPORT 'rev/a%20b%20c?style=paper' | egrep '^200|changeset 0:'
793 $ get-with-headers.py localhost:$HGPORT 'rev/a%20b%20c?style=paper' | egrep '^200|changeset 0:'
793 200 Script output follows
794 200 Script output follows
794 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
795 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
795
796
796 $ get-with-headers.py localhost:$HGPORT 'rev/d%252Fe%252Ff?style=paper' | egrep '^200|changeset 0:'
797 $ get-with-headers.py localhost:$HGPORT 'rev/d%252Fe%252Ff?style=paper' | egrep '^200|changeset 0:'
797 200 Script output follows
798 200 Script output follows
798 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
799 changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
799
800
800 no style can be loaded from directories other than the specified paths
801 no style can be loaded from directories other than the specified paths
801
802
802 $ mkdir -p x/templates/fallback
803 $ mkdir -p x/templates/fallback
803 $ cat <<EOF > x/templates/fallback/map
804 $ cat <<EOF > x/templates/fallback/map
804 > default = 'shortlog'
805 > default = 'shortlog'
805 > shortlog = 'fall back to default\n'
806 > shortlog = 'fall back to default\n'
806 > mimetype = 'text/plain'
807 > mimetype = 'text/plain'
807 > EOF
808 > EOF
808 $ cat <<EOF > x/map
809 $ cat <<EOF > x/map
809 > default = 'shortlog'
810 > default = 'shortlog'
810 > shortlog = 'access to outside of templates directory\n'
811 > shortlog = 'access to outside of templates directory\n'
811 > mimetype = 'text/plain'
812 > mimetype = 'text/plain'
812 > EOF
813 > EOF
813
814
814 $ killdaemons.py
815 $ killdaemons.py
815 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log \
816 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log \
816 > --config web.style=fallback --config web.templates=x/templates
817 > --config web.style=fallback --config web.templates=x/templates
817 $ cat hg.pid >> $DAEMON_PIDS
818 $ cat hg.pid >> $DAEMON_PIDS
818
819
819 $ get-with-headers.py localhost:$HGPORT "?style=`pwd`/x"
820 $ get-with-headers.py localhost:$HGPORT "?style=`pwd`/x"
820 200 Script output follows
821 200 Script output follows
821
822
822 fall back to default
823 fall back to default
823
824
824 $ get-with-headers.py localhost:$HGPORT '?style=..'
825 $ get-with-headers.py localhost:$HGPORT '?style=..'
825 200 Script output follows
826 200 Script output follows
826
827
827 fall back to default
828 fall back to default
828
829
829 $ get-with-headers.py localhost:$HGPORT '?style=./..'
830 $ get-with-headers.py localhost:$HGPORT '?style=./..'
830 200 Script output follows
831 200 Script output follows
831
832
832 fall back to default
833 fall back to default
833
834
834 $ get-with-headers.py localhost:$HGPORT '?style=.../.../'
835 $ get-with-headers.py localhost:$HGPORT '?style=.../.../'
835 200 Script output follows
836 200 Script output follows
836
837
837 fall back to default
838 fall back to default
838
839
839 errors
840 errors
840
841
841 $ cat errors.log
842 $ cat errors.log
842
843
843 Uncaught exceptions result in a logged error and canned HTTP response
844 Uncaught exceptions result in a logged error and canned HTTP response
844
845
845 $ killdaemons.py
846 $ killdaemons.py
846 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
847 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
847 $ cat hg.pid >> $DAEMON_PIDS
848 $ cat hg.pid >> $DAEMON_PIDS
848
849
849 $ get-with-headers.py localhost:$HGPORT 'raiseerror' transfer-encoding content-type
850 $ get-with-headers.py localhost:$HGPORT 'raiseerror' transfer-encoding content-type
850 500 Internal Server Error
851 500 Internal Server Error
851 transfer-encoding: chunked
852 transfer-encoding: chunked
852
853
853 Internal Server Error (no-eol)
854 Internal Server Error (no-eol)
854 [1]
855 [1]
855
856
856 $ killdaemons.py
857 $ killdaemons.py
857 $ head -1 errors.log
858 $ head -1 errors.log
858 .* Exception happened during processing request '/raiseerror': (re)
859 .* Exception happened during processing request '/raiseerror': (re)
859
860
860 Uncaught exception after partial content sent
861 Uncaught exception after partial content sent
861
862
862 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
863 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
863 $ cat hg.pid >> $DAEMON_PIDS
864 $ cat hg.pid >> $DAEMON_PIDS
864 $ get-with-headers.py localhost:$HGPORT 'raiseerror?partialresponse=1' transfer-encoding content-type
865 $ get-with-headers.py localhost:$HGPORT 'raiseerror?partialresponse=1' transfer-encoding content-type
865 200 Script output follows
866 200 Script output follows
866 transfer-encoding: chunked
867 transfer-encoding: chunked
867 content-type: text/plain
868 content-type: text/plain
868
869
869 partial content
870 partial content
870 Internal Server Error (no-eol)
871 Internal Server Error (no-eol)
871
872
872 $ killdaemons.py
873 $ killdaemons.py
873 $ cd ..
874 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now