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