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