##// END OF EJS Templates
hgweb: add bookmark labels to gitweb theme (based on 270f57d35525)
Yuya Nishihara -
r13863:b602ac02 stable
parent child Browse files
Show More
@@ -1,14 +1,14
1 1 <div>
2 <a class="title" href="{url}rev/{node|short}{sessionvars%urlparameter}"><span class="age">{date|age}</span>{desc|strip|firstline|escape|nonempty}<span class="logtags"> {inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a>
2 <a class="title" href="{url}rev/{node|short}{sessionvars%urlparameter}"><span class="age">{date|age}</span>{desc|strip|firstline|escape|nonempty}<span class="logtags"> {inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span></a>
3 3 </div>
4 4 <div class="title_text">
5 5 <div class="log_link">
6 6 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a><br/>
7 7 </div>
8 8 <i>{author|obfuscate} [{date|rfc822date}] rev {rev}</i><br/>
9 9 </div>
10 10 <div class="log_body">
11 11 {desc|strip|escape|addbreaks|nonempty}
12 12 <br/>
13 13 <br/>
14 14 </div>
@@ -1,52 +1,52
1 1 {header}
2 2 <title>{repo|escape}: changeset {rev}:{node|short}</title>
3 3 <link rel="alternate" type="application/atom+xml"
4 4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 5 <link rel="alternate" type="application/rss+xml"
6 6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 7 </head>
8 8 <body>
9 9
10 10 <div class="page_header">
11 11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changeset
12 12 </div>
13 13
14 14 <div class="page_nav">
15 15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 16 <a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a> |
17 17 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
18 18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 20 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 21 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
22 22 changeset |
23 23 <a href="{url}raw-rev/{node|short}">raw</a> {archives%archiveentry} |
24 24 <a href="{url}help{sessionvars%urlparameter}">help</a>
25 25 <br/>
26 26 </div>
27 27
28 28 <div>
29 <a class="title" href="{url}raw-rev/{node|short}">{desc|strip|escape|firstline|nonempty} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a>
29 <a class="title" href="{url}raw-rev/{node|short}">{desc|strip|escape|firstline|nonempty} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span></a>
30 30 </div>
31 31 <div class="title_text">
32 32 <table cellspacing="0">
33 33 <tr><td>author</td><td>{author|obfuscate}</td></tr>
34 34 <tr><td></td><td>{date|date} ({date|age})</td></tr>
35 35 {branch%changesetbranch}
36 36 <tr><td>changeset {rev}</td><td style="font-family:monospace">{node|short}</td></tr>
37 37 {parent%changesetparent}
38 38 {child%changesetchild}
39 39 </table></div>
40 40
41 41 <div class="page_body">
42 42 {desc|strip|escape|addbreaks|nonempty}
43 43 </div>
44 44 <div class="list_head"></div>
45 45 <div class="title_text">
46 46 <table cellspacing="0">
47 47 {files}
48 48 </table></div>
49 49
50 50 <div class="page_body">{diff}</div>
51 51
52 52 {footer}
@@ -1,122 +1,128
1 1 {header}
2 2 <title>{repo|escape}: Graph</title>
3 3 <link rel="alternate" type="application/atom+xml"
4 4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 5 <link rel="alternate" type="application/rss+xml"
6 6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 7 <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
8 8 </head>
9 9 <body>
10 10
11 11 <div class="page_header">
12 12 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / graph
13 13 </div>
14 14
15 15 <form action="{url}log">
16 16 {sessionvars%hiddenformentry}
17 17 <div class="search">
18 18 <input type="text" name="rev" />
19 19 </div>
20 20 </form>
21 21 <div class="page_nav">
22 22 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
23 23 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
24 24 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
25 25 graph |
26 26 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
27 27 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
28 28 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
29 29 <a href="{url}help{sessionvars%urlparameter}">help</a>
30 30 <br/>
31 31 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
32 32 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
33 33 | {changenav%navgraph}<br/>
34 34 </div>
35 35
36 36 <div class="title">&nbsp;</div>
37 37
38 38 <noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
39 39
40 40 <div id="wrapper">
41 41 <ul id="nodebgs"></ul>
42 42 <canvas id="graph" width="480" height="{canvasheight}"></canvas>
43 43 <ul id="graphnodes"></ul>
44 44 </div>
45 45
46 46 <script type="text/javascript" src="{staticurl}graph.js"></script>
47 47 <script>
48 48 <!-- hide script content
49 49
50 50 var data = {jsdata|json};
51 51 var graph = new Graph();
52 52 graph.scale({bg_height});
53 53
54 54 graph.edge = function(x0, y0, x1, y1, color) \{
55 55
56 56 this.setColor(color, 0.0, 0.65);
57 57 this.ctx.beginPath();
58 58 this.ctx.moveTo(x0, y0);
59 59 this.ctx.lineTo(x1, y1);
60 60 this.ctx.stroke();
61 61
62 62 }
63 63
64 64 var revlink = '<li style="_STYLE"><span class="desc">';
65 65 revlink += '<a class="list" href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID"><b>_DESC</b></a>';
66 66 revlink += '</span> _TAGS';
67 67 revlink += '<span class="info">_DATE, by _USER</span></li>';
68 68
69 69 graph.vertex = function(x, y, color, parity, cur) \{
70 70
71 71 this.ctx.beginPath();
72 72 color = this.setColor(color, 0.25, 0.75);
73 73 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
74 74 this.ctx.fill();
75 75
76 76 var bg = '<li class="bg parity' + parity + '"></li>';
77 77 var left = (this.columns + 1) * this.bg_height;
78 78 var nstyle = 'padding-left: ' + left + 'px;';
79 79 var item = revlink.replace(/_STYLE/, nstyle);
80 80 item = item.replace(/_PARITY/, 'parity' + parity);
81 81 item = item.replace(/_NODEID/, cur[0]);
82 82 item = item.replace(/_NODEID/, cur[0]);
83 83 item = item.replace(/_DESC/, cur[3]);
84 84 item = item.replace(/_USER/, cur[4]);
85 85 item = item.replace(/_DATE/, cur[5]);
86 86
87 87 var tagspan = '';
88 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) \{
88 if (cur[7].length || cur[8].length || (cur[6][0] != 'default' || cur[6][1])) \{
89 89 tagspan = '<span class="logtags">';
90 90 if (cur[6][1]) \{
91 91 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
92 92 tagspan += cur[6][0] + '</span> ';
93 93 } else if (!cur[6][1] && cur[6][0] != 'default') \{
94 94 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
95 95 tagspan += cur[6][0] + '</span> ';
96 96 }
97 97 if (cur[7].length) \{
98 98 for (var t in cur[7]) \{
99 99 var tag = cur[7][t];
100 100 tagspan += '<span class="tagtag">' + tag + '</span> ';
101 101 }
102 102 }
103 if (cur[8].length) \{
104 for (var t in cur[8]) \{
105 var bookmark = cur[8][t];
106 tagspan += '<span class="bookmarktag">' + bookmark + '</span> ';
107 }
108 }
103 109 tagspan += '</span>';
104 110 }
105 111
106 112 item = item.replace(/_TAGS/, tagspan);
107 113 return [bg, item];
108 114
109 115 }
110 116
111 117 graph.render(data);
112 118
113 119 // stop hiding script -->
114 120 </script>
115 121
116 122 <div class="page_nav">
117 123 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
118 124 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
119 125 | {changenav%navgraph}
120 126 </div>
121 127
122 128 {footer}
@@ -1,40 +1,40
1 1 {header}
2 2 <title>{repo|escape}: files</title>
3 3 <link rel="alternate" type="application/atom+xml"
4 4 href="{url}atom-log" title="Atom feed for {repo|escape}"/>
5 5 <link rel="alternate" type="application/rss+xml"
6 6 href="{url}rss-log" title="RSS feed for {repo|escape}"/>
7 7 </head>
8 8 <body>
9 9
10 10 <div class="page_header">
11 11 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / files
12 12 </div>
13 13
14 14 <div class="page_nav">
15 15 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
16 16 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
17 17 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
18 18 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
19 19 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
20 20 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
21 21 files |
22 22 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry} |
23 23 <a href="{url}help{sessionvars%urlparameter}">help</a>
24 24 <br/>
25 25 </div>
26 26
27 <div class="title">{path|escape} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></div>
27 <div class="title">{path|escape} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span></div>
28 28 <table cellspacing="0">
29 29 <tr class="parity{upparity}">
30 30 <td style="font-family:monospace">drwxr-xr-x</td>
31 31 <td style="font-family:monospace"></td>
32 32 <td style="font-family:monospace"></td>
33 33 <td><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
34 34 <td class="link">&nbsp;</td>
35 35 </tr>
36 36 {dentries%direntry}
37 37 {fentries%fileentry}
38 38 </table>
39 39
40 40 {footer}
@@ -1,260 +1,261
1 1 default = 'summary'
2 2 mimetype = 'text/html; charset={encoding}'
3 3 header = header.tmpl
4 4 footer = footer.tmpl
5 5 search = search.tmpl
6 6 changelog = changelog.tmpl
7 7 summary = summary.tmpl
8 8 error = error.tmpl
9 9 notfound = notfound.tmpl
10 10
11 11 help = help.tmpl
12 12 helptopics = helptopics.tmpl
13 13
14 14 helpentry = '<tr><td><a href="{url}help/{topic|escape}{sessionvars%urlparameter}">{topic|escape}</a></td><td>{summary|escape}</td></tr>'
15 15
16 16 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
17 17 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
18 18 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
19 19 filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
20 20 filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
21 21 filenodelink = '
22 22 <tr class="parity{parity}">
23 23 <td><a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
24 24 <td></td>
25 25 <td class="link">
26 26 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
27 27 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
28 28 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
29 29 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
30 30 </td>
31 31 </tr>'
32 32 filenolink = '
33 33 <tr class="parity{parity}">
34 34 <td><a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
35 35 <td></td>
36 36 <td class="link">
37 37 file |
38 38 annotate |
39 39 <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
40 40 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
41 41 </td>
42 42 </tr>'
43 43
44 44 nav = '{before%naventry} {after%naventry}'
45 45 navshort = '{before%navshortentry}{after%navshortentry}'
46 46 navgraph = '{before%navgraphentry}{after%navgraphentry}'
47 47 filenav = '{before%filenaventry}{after%filenaventry}'
48 48
49 49 fileellipses = '...'
50 50 changelogentry = changelogentry.tmpl
51 51 searchentry = changelogentry.tmpl
52 52 changeset = changeset.tmpl
53 53 manifest = manifest.tmpl
54 54 direntry = '
55 55 <tr class="parity{parity}">
56 56 <td style="font-family:monospace">drwxr-xr-x</td>
57 57 <td style="font-family:monospace"></td>
58 58 <td style="font-family:monospace"></td>
59 59 <td>
60 60 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
61 61 <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
62 62 </td>
63 63 <td class="link">
64 64 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a>
65 65 </td>
66 66 </tr>'
67 67 fileentry = '
68 68 <tr class="parity{parity}">
69 69 <td style="font-family:monospace">{permissions|permissions}</td>
70 70 <td style="font-family:monospace" align=right>{date|isodate}</td>
71 71 <td style="font-family:monospace" align=right>{size}</td>
72 72 <td class="list">
73 73 <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
74 74 </td>
75 75 <td class="link">
76 76 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
77 77 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
78 78 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
79 79 </td>
80 80 </tr>'
81 81 filerevision = filerevision.tmpl
82 82 fileannotate = fileannotate.tmpl
83 83 filediff = filediff.tmpl
84 84 filelog = filelog.tmpl
85 85 fileline = '
86 86 <div style="font-family:monospace" class="parity{parity}">
87 87 <pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</pre>
88 88 </div>'
89 89 annotateline = '
90 90 <tr style="font-family:monospace" class="parity{parity}">
91 91 <td class="linenr" style="text-align: right;">
92 92 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}"
93 93 title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
94 94 </td>
95 95 <td><pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a></pre></td>
96 96 <td><pre>{line|escape}</pre></td>
97 97 </tr>'
98 98 difflineplus = '<span style="color:#008800;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
99 99 difflineminus = '<span style="color:#cc0000;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
100 100 difflineat = '<span style="color:#990099;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
101 101 diffline = '<span><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
102 102 changelogparent = '
103 103 <tr>
104 104 <th class="parent">parent {rev}:</th>
105 105 <td class="parent">
106 106 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
107 107 </td>
108 108 </tr>'
109 109 changesetbranch = '<tr><td>branch</td><td>{name}</td></tr>'
110 110 changesetparent = '
111 111 <tr>
112 112 <td>parent {rev}</td>
113 113 <td style="font-family:monospace">
114 114 <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
115 115 </td>
116 116 </tr>'
117 117 filerevbranch = '<tr><td>branch</td><td>{name}</td></tr>'
118 118 filerevparent = '
119 119 <tr>
120 120 <td>parent {rev}</td>
121 121 <td style="font-family:monospace">
122 122 <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
123 123 {rename%filerename}{node|short}
124 124 </a>
125 125 </td>
126 126 </tr>'
127 127 filerename = '{file|escape}@'
128 128 filelogrename = '| <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
129 129 fileannotateparent = '
130 130 <tr>
131 131 <td>parent {rev}</td>
132 132 <td style="font-family:monospace">
133 133 <a class="list" href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
134 134 {rename%filerename}{node|short}
135 135 </a>
136 136 </td>
137 137 </tr>'
138 138 changelogchild = '
139 139 <tr>
140 140 <th class="child">child {rev}:</th>
141 141 <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
142 142 </tr>'
143 143 changesetchild = '
144 144 <tr>
145 145 <td>child {rev}</td>
146 146 <td style="font-family:monospace">
147 147 <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
148 148 </td>
149 149 </tr>'
150 150 filerevchild = '
151 151 <tr>
152 152 <td>child {rev}</td>
153 153 <td style="font-family:monospace">
154 154 <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
155 155 </tr>'
156 156 fileannotatechild = '
157 157 <tr>
158 158 <td>child {rev}</td>
159 159 <td style="font-family:monospace">
160 160 <a class="list" href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
161 161 </tr>'
162 162 tags = tags.tmpl
163 163 tagentry = '
164 164 <tr class="parity{parity}">
165 165 <td class="age"><i>{date|age}</i></td>
166 166 <td><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}"><b>{tag|escape}</b></a></td>
167 167 <td class="link">
168 168 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
169 169 <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
170 170 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
171 171 </td>
172 172 </tr>'
173 173 branches = branches.tmpl
174 174 branchentry = '
175 175 <tr class="parity{parity}">
176 176 <td class="age"><i>{date|age}</i></td>
177 177 <td><a class="list" href="{url}shortlog/{node|short}{sessionvars%urlparameter}"><b>{node|short}</b></a></td>
178 178 <td class="{status}">{branch|escape}</td>
179 179 <td class="link">
180 180 <a href="{url}changeset/{node|short}{sessionvars%urlparameter}">changeset</a> |
181 181 <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
182 182 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
183 183 </td>
184 184 </tr>'
185 185 diffblock = '<pre>{lines}</pre>'
186 186 filediffparent = '
187 187 <tr>
188 188 <td>parent {rev}</td>
189 189 <td style="font-family:monospace">
190 190 <a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
191 191 {node|short}
192 192 </a>
193 193 </td>
194 194 </tr>'
195 195 filelogparent = '
196 196 <tr>
197 197 <td align="right">parent {rev}:&nbsp;</td>
198 198 <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
199 199 </tr>'
200 200 filediffchild = '
201 201 <tr>
202 202 <td>child {rev}</td>
203 203 <td style="font-family:monospace">
204 204 <a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
205 205 </td>
206 206 </tr>'
207 207 filelogchild = '
208 208 <tr>
209 209 <td align="right">child {rev}:&nbsp;</td>
210 210 <td><a href="{url}file{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
211 211 </tr>'
212 212 shortlog = shortlog.tmpl
213 213 graph = graph.tmpl
214 214 tagtag = '<span class="tagtag" title="{name}">{name}</span> '
215 215 branchtag = '<span class="branchtag" title="{name}">{name}</span> '
216 216 inbranchtag = '<span class="inbranchtag" title="{name}">{name}</span> '
217 bookmarktag = '<span class="bookmarktag" title="{name}">{name}</span> '
217 218 shortlogentry = '
218 219 <tr class="parity{parity}">
219 220 <td class="age"><i>{date|age}</i></td>
220 221 <td><i>{author|person}</i></td>
221 222 <td>
222 223 <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">
223 224 <b>{desc|strip|firstline|escape|nonempty}</b>
224 <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span>
225 <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span>
225 226 </a>
226 227 </td>
227 228 <td class="link" nowrap>
228 229 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
229 230 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
230 231 </td>
231 232 </tr>'
232 233 filelogentry = '
233 234 <tr class="parity{parity}">
234 235 <td class="age"><i>{date|age}</i></td>
235 236 <td>
236 237 <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">
237 238 <b>{desc|strip|firstline|escape|nonempty}</b>
238 239 </a>
239 240 </td>
240 241 <td class="link">
241 242 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>&nbsp;|&nbsp;<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>&nbsp;|&nbsp;<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> {rename%filelogrename}</td>
242 243 </tr>'
243 244 archiveentry = ' | <a href="{url}archive/{node|short}{extension}">{type|escape}</a> '
244 245 indexentry = '
245 246 <tr class="parity{parity}">
246 247 <td>
247 248 <a class="list" href="{url}{sessionvars%urlparameter}">
248 249 <b>{name|escape}</b>
249 250 </a>
250 251 </td>
251 252 <td>{description}</td>
252 253 <td>{contact|obfuscate}</td>
253 254 <td class="age">{lastchange|age}</td>
254 255 <td class="indexlinks">{archives%indexarchiveentry}</td>
255 256 <td><div class="rss_logo"><a href="{url}rss-log">RSS</a> <a href="{url}atom-log">Atom</a></div></td>
256 257 </tr>\n'
257 258 indexarchiveentry = ' <a href="{url}archive/{node|short}{extension}">{type|escape}</a> '
258 259 index = index.tmpl
259 260 urlparameter = '{separator}{name}={value|urlescape}'
260 261 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
@@ -1,124 +1,128
1 1 body { font-family: sans-serif; font-size: 12px; margin:0px; border:solid #d9d8d1; border-width:1px; margin:10px; }
2 2 a { color:#0000cc; }
3 3 a:hover, a:visited, a:active { color:#880000; }
4 4 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
5 5 div.page_header a:visited { color:#0000cc; }
6 6 div.page_header a:hover { color:#880000; }
7 7 div.page_nav { padding:8px; }
8 8 div.page_nav a:visited { color:#0000cc; }
9 9 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
10 10 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
11 11 div.page_footer_text { float:left; color:#555555; font-style:italic; }
12 12 div.page_body { padding:8px; }
13 13 div.title, a.title {
14 14 display:block; padding:6px 8px;
15 15 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
16 16 }
17 17 a.title:hover { background-color: #d9d8d1; }
18 18 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
19 19 div.log_body { padding:8px 8px 8px 150px; }
20 20 .age { white-space:nowrap; }
21 21 span.age { position:relative; float:left; width:142px; font-style:italic; }
22 22 div.log_link {
23 23 padding:0px 8px;
24 24 font-size:10px; font-family:sans-serif; font-style:normal;
25 25 position:relative; float:left; width:136px;
26 26 }
27 27 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
28 28 a.list { text-decoration:none; color:#000000; }
29 29 a.list:hover { text-decoration:underline; color:#880000; }
30 30 table { padding:8px 4px; }
31 31 th { padding:2px 5px; font-size:12px; text-align:left; }
32 32 tr.light:hover, .parity0:hover { background-color:#edece6; }
33 33 tr.dark, .parity1 { background-color:#f6f6f0; }
34 34 tr.dark:hover, .parity1:hover { background-color:#edece6; }
35 35 td { padding:2px 5px; font-size:12px; vertical-align:top; }
36 36 td.closed { background-color: #99f; }
37 37 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
38 38 td.indexlinks { white-space: nowrap; }
39 39 td.indexlinks a {
40 40 padding: 2px 5px; line-height: 10px;
41 41 border: 1px solid;
42 42 color: #ffffff; background-color: #7777bb;
43 43 border-color: #aaaadd #333366 #333366 #aaaadd;
44 44 font-weight: bold; text-align: center; text-decoration: none;
45 45 font-size: 10px;
46 46 }
47 47 td.indexlinks a:hover { background-color: #6666aa; }
48 48 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
49 49 div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
50 50 div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
51 51 div.search { margin:4px 8px; position:absolute; top:56px; right:12px }
52 52 .linenr { color:#999999; text-decoration:none }
53 53 div.rss_logo { float: right; white-space: nowrap; }
54 54 div.rss_logo a {
55 55 padding:3px 6px; line-height:10px;
56 56 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
57 57 color:#ffffff; background-color:#ff6600;
58 58 font-weight:bold; font-family:sans-serif; font-size:10px;
59 59 text-align:center; text-decoration:none;
60 60 }
61 61 div.rss_logo a:hover { background-color:#ee5500; }
62 62 pre { margin: 0; }
63 63 span.logtags span {
64 64 padding: 0px 4px;
65 65 font-size: 10px;
66 66 font-weight: normal;
67 67 border: 1px solid;
68 68 background-color: #ffaaff;
69 69 border-color: #ffccff #ff00ee #ff00ee #ffccff;
70 70 }
71 71 span.logtags span.tagtag {
72 72 background-color: #ffffaa;
73 73 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
74 74 }
75 75 span.logtags span.branchtag {
76 76 background-color: #aaffaa;
77 77 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
78 78 }
79 79 span.logtags span.inbranchtag {
80 80 background-color: #d5dde6;
81 81 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
82 82 }
83 span.logtags span.bookmarktag {
84 background-color: #afdffa;
85 border-color: #ccecff #46ace6 #46ace6 #ccecff;
86 }
83 87
84 88 /* Graph */
85 89 div#wrapper {
86 90 position: relative;
87 91 margin: 0;
88 92 padding: 0;
89 93 margin-top: 3px;
90 94 }
91 95
92 96 canvas {
93 97 position: absolute;
94 98 z-index: 5;
95 99 top: -0.9em;
96 100 margin: 0;
97 101 }
98 102
99 103 ul#nodebgs {
100 104 list-style: none inside none;
101 105 padding: 0;
102 106 margin: 0;
103 107 top: -0.7em;
104 108 }
105 109
106 110 ul#graphnodes li, ul#nodebgs li {
107 111 height: 39px;
108 112 }
109 113
110 114 ul#graphnodes {
111 115 position: absolute;
112 116 z-index: 10;
113 117 top: -0.8em;
114 118 list-style: none inside none;
115 119 padding: 0;
116 120 }
117 121
118 122 ul#graphnodes li .info {
119 123 display: block;
120 124 font-size: 100%;
121 125 position: relative;
122 126 top: -3px;
123 127 font-style: italic;
124 128 }
@@ -1,1081 +1,1087
1 1 An attempt at more fully testing the hgweb web interface.
2 2 The following things are tested elsewhere and are therefore omitted:
3 3 - archive, tested in test-archive
4 4 - unbundle, tested in test-push-http
5 5 - changegroupsubset, tested in test-pull
6 6
7 7 Set up the repo
8 8
9 9 $ hg init test
10 10 $ cd test
11 11 $ mkdir da
12 12 $ echo foo > da/foo
13 13 $ echo foo > foo
14 14 $ hg ci -Ambase
15 15 adding da/foo
16 16 adding foo
17 17 $ hg tag 1.0
18 18 $ hg bookmark something
19 19 $ echo another > foo
20 20 $ hg branch stable
21 21 marked working directory as branch stable
22 22 $ hg ci -Ambranch
23 23 $ hg serve --config server.uncompressed=False -n test -p $HGPORT -d --pid-file=hg.pid -E errors.log
24 24 $ cat hg.pid >> $DAEMON_PIDS
25 25
26 26 Logs and changes
27 27
28 28 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/log/?style=atom'
29 29 200 Script output follows
30 30
31 31 <?xml version="1.0" encoding="ascii"?>
32 32 <feed xmlns="http://www.w3.org/2005/Atom">
33 33 <!-- Changelog -->
34 34 <id>http://*:$HGPORT/</id> (glob)
35 35 <link rel="self" href="http://*:$HGPORT/atom-log"/> (glob)
36 36 <link rel="alternate" href="http://*:$HGPORT/"/> (glob)
37 37 <title>test Changelog</title>
38 38 <updated>1970-01-01T00:00:00+00:00</updated>
39 39
40 40 <entry>
41 41 <title>branch</title>
42 42 <id>http://*:$HGPORT/#changeset-1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe</id> (glob)
43 43 <link href="http://*:$HGPORT/rev/1d22e65f027e"/> (glob)
44 44 <author>
45 45 <name>test</name>
46 46 <email>&#116;&#101;&#115;&#116;</email>
47 47 </author>
48 48 <updated>1970-01-01T00:00:00+00:00</updated>
49 49 <published>1970-01-01T00:00:00+00:00</published>
50 50 <content type="xhtml">
51 51 <div xmlns="http://www.w3.org/1999/xhtml">
52 52 <pre xml:space="preserve">branch</pre>
53 53 </div>
54 54 </content>
55 55 </entry>
56 56 <entry>
57 57 <title>Added tag 1.0 for changeset 2ef0ac749a14</title>
58 58 <id>http://*:$HGPORT/#changeset-a4f92ed23982be056b9852de5dfe873eaac7f0de</id> (glob)
59 59 <link href="http://*:$HGPORT/rev/a4f92ed23982"/> (glob)
60 60 <author>
61 61 <name>test</name>
62 62 <email>&#116;&#101;&#115;&#116;</email>
63 63 </author>
64 64 <updated>1970-01-01T00:00:00+00:00</updated>
65 65 <published>1970-01-01T00:00:00+00:00</published>
66 66 <content type="xhtml">
67 67 <div xmlns="http://www.w3.org/1999/xhtml">
68 68 <pre xml:space="preserve">Added tag 1.0 for changeset 2ef0ac749a14</pre>
69 69 </div>
70 70 </content>
71 71 </entry>
72 72 <entry>
73 73 <title>base</title>
74 74 <id>http://*:$HGPORT/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id> (glob)
75 75 <link href="http://*:$HGPORT/rev/2ef0ac749a14"/> (glob)
76 76 <author>
77 77 <name>test</name>
78 78 <email>&#116;&#101;&#115;&#116;</email>
79 79 </author>
80 80 <updated>1970-01-01T00:00:00+00:00</updated>
81 81 <published>1970-01-01T00:00:00+00:00</published>
82 82 <content type="xhtml">
83 83 <div xmlns="http://www.w3.org/1999/xhtml">
84 84 <pre xml:space="preserve">base</pre>
85 85 </div>
86 86 </content>
87 87 </entry>
88 88
89 89 </feed>
90 90 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/log/1/?style=atom'
91 91 200 Script output follows
92 92
93 93 <?xml version="1.0" encoding="ascii"?>
94 94 <feed xmlns="http://www.w3.org/2005/Atom">
95 95 <!-- Changelog -->
96 96 <id>http://*:$HGPORT/</id> (glob)
97 97 <link rel="self" href="http://*:$HGPORT/atom-log"/> (glob)
98 98 <link rel="alternate" href="http://*:$HGPORT/"/> (glob)
99 99 <title>test Changelog</title>
100 100 <updated>1970-01-01T00:00:00+00:00</updated>
101 101
102 102 <entry>
103 103 <title>branch</title>
104 104 <id>http://*:$HGPORT/#changeset-1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe</id> (glob)
105 105 <link href="http://*:$HGPORT/rev/1d22e65f027e"/> (glob)
106 106 <author>
107 107 <name>test</name>
108 108 <email>&#116;&#101;&#115;&#116;</email>
109 109 </author>
110 110 <updated>1970-01-01T00:00:00+00:00</updated>
111 111 <published>1970-01-01T00:00:00+00:00</published>
112 112 <content type="xhtml">
113 113 <div xmlns="http://www.w3.org/1999/xhtml">
114 114 <pre xml:space="preserve">branch</pre>
115 115 </div>
116 116 </content>
117 117 </entry>
118 118 <entry>
119 119 <title>Added tag 1.0 for changeset 2ef0ac749a14</title>
120 120 <id>http://*:$HGPORT/#changeset-a4f92ed23982be056b9852de5dfe873eaac7f0de</id> (glob)
121 121 <link href="http://*:$HGPORT/rev/a4f92ed23982"/> (glob)
122 122 <author>
123 123 <name>test</name>
124 124 <email>&#116;&#101;&#115;&#116;</email>
125 125 </author>
126 126 <updated>1970-01-01T00:00:00+00:00</updated>
127 127 <published>1970-01-01T00:00:00+00:00</published>
128 128 <content type="xhtml">
129 129 <div xmlns="http://www.w3.org/1999/xhtml">
130 130 <pre xml:space="preserve">Added tag 1.0 for changeset 2ef0ac749a14</pre>
131 131 </div>
132 132 </content>
133 133 </entry>
134 134 <entry>
135 135 <title>base</title>
136 136 <id>http://*:$HGPORT/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id> (glob)
137 137 <link href="http://*:$HGPORT/rev/2ef0ac749a14"/> (glob)
138 138 <author>
139 139 <name>test</name>
140 140 <email>&#116;&#101;&#115;&#116;</email>
141 141 </author>
142 142 <updated>1970-01-01T00:00:00+00:00</updated>
143 143 <published>1970-01-01T00:00:00+00:00</published>
144 144 <content type="xhtml">
145 145 <div xmlns="http://www.w3.org/1999/xhtml">
146 146 <pre xml:space="preserve">base</pre>
147 147 </div>
148 148 </content>
149 149 </entry>
150 150
151 151 </feed>
152 152 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/log/1/foo/?style=atom'
153 153 200 Script output follows
154 154
155 155 <?xml version="1.0" encoding="ascii"?>
156 156 <feed xmlns="http://www.w3.org/2005/Atom">
157 157 <id>http://*:$HGPORT/atom-log/tip/foo</id> (glob)
158 158 <link rel="self" href="http://*:$HGPORT/atom-log/tip/foo"/> (glob)
159 159 <title>test: foo history</title>
160 160 <updated>1970-01-01T00:00:00+00:00</updated>
161 161
162 162 <entry>
163 163 <title>base</title>
164 164 <id>http://*:$HGPORT/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id> (glob)
165 165 <link href="http://*:$HGPORT/rev/2ef0ac749a14"/> (glob)
166 166 <author>
167 167 <name>test</name>
168 168 <email>&#116;&#101;&#115;&#116;</email>
169 169 </author>
170 170 <updated>1970-01-01T00:00:00+00:00</updated>
171 171 <published>1970-01-01T00:00:00+00:00</published>
172 172 <content type="xhtml">
173 173 <div xmlns="http://www.w3.org/1999/xhtml">
174 174 <pre xml:space="preserve">base</pre>
175 175 </div>
176 176 </content>
177 177 </entry>
178 178
179 179 </feed>
180 180 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/shortlog/'
181 181 200 Script output follows
182 182
183 183 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
184 184 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
185 185 <head>
186 186 <link rel="icon" href="/static/hgicon.png" type="image/png" />
187 187 <meta name="robots" content="index, nofollow" />
188 188 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
189 189
190 190 <title>test: log</title>
191 191 <link rel="alternate" type="application/atom+xml"
192 192 href="/atom-log" title="Atom feed for test" />
193 193 <link rel="alternate" type="application/rss+xml"
194 194 href="/rss-log" title="RSS feed for test" />
195 195 </head>
196 196 <body>
197 197
198 198 <div class="container">
199 199 <div class="menu">
200 200 <div class="logo">
201 201 <a href="http://mercurial.selenic.com/">
202 202 <img src="/static/hglogo.png" alt="mercurial" /></a>
203 203 </div>
204 204 <ul>
205 205 <li class="active">log</li>
206 206 <li><a href="/graph/1d22e65f027e">graph</a></li>
207 207 <li><a href="/tags">tags</a></li>
208 208 <li><a href="/bookmarks">bookmarks</a></li>
209 209 <li><a href="/branches">branches</a></li>
210 210 </ul>
211 211 <ul>
212 212 <li><a href="/rev/1d22e65f027e">changeset</a></li>
213 213 <li><a href="/file/1d22e65f027e">browse</a></li>
214 214 </ul>
215 215 <ul>
216 216
217 217 </ul>
218 218 <ul>
219 219 <li><a href="/help">help</a></li>
220 220 </ul>
221 221 </div>
222 222
223 223 <div class="main">
224 224 <h2><a href="/">test</a></h2>
225 225 <h3>log</h3>
226 226
227 227 <form class="search" action="/log">
228 228
229 229 <p><input name="rev" id="search1" type="text" size="30" /></p>
230 230 <div id="hint">find changesets by author, revision,
231 231 files, or words in the commit message</div>
232 232 </form>
233 233
234 234 <div class="navigate">
235 235 <a href="/shortlog/2?revcount=30">less</a>
236 236 <a href="/shortlog/2?revcount=120">more</a>
237 237 | rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a>
238 238 </div>
239 239
240 240 <table class="bigtable">
241 241 <tr>
242 242 <th class="age">age</th>
243 243 <th class="author">author</th>
244 244 <th class="description">description</th>
245 245 </tr>
246 246 <tr class="parity0">
247 247 <td class="age">1970-01-01</td>
248 248 <td class="author">test</td>
249 249 <td class="description"><a href="/rev/1d22e65f027e">branch</a><span class="branchhead">stable</span> <span class="tag">tip</span> <span class="tag">something</span> </td>
250 250 </tr>
251 251 <tr class="parity1">
252 252 <td class="age">1970-01-01</td>
253 253 <td class="author">test</td>
254 254 <td class="description"><a href="/rev/a4f92ed23982">Added tag 1.0 for changeset 2ef0ac749a14</a><span class="branchhead">default</span> </td>
255 255 </tr>
256 256 <tr class="parity0">
257 257 <td class="age">1970-01-01</td>
258 258 <td class="author">test</td>
259 259 <td class="description"><a href="/rev/2ef0ac749a14">base</a><span class="tag">1.0</span> </td>
260 260 </tr>
261 261
262 262 </table>
263 263
264 264 <div class="navigate">
265 265 <a href="/shortlog/2?revcount=30">less</a>
266 266 <a href="/shortlog/2?revcount=120">more</a>
267 267 | rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a>
268 268 </div>
269 269
270 270 </div>
271 271 </div>
272 272
273 273
274 274
275 275 </body>
276 276 </html>
277 277
278 278 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/rev/0/'
279 279 200 Script output follows
280 280
281 281 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
282 282 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
283 283 <head>
284 284 <link rel="icon" href="/static/hgicon.png" type="image/png" />
285 285 <meta name="robots" content="index, nofollow" />
286 286 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
287 287
288 288 <title>test: 2ef0ac749a14</title>
289 289 </head>
290 290 <body>
291 291 <div class="container">
292 292 <div class="menu">
293 293 <div class="logo">
294 294 <a href="http://mercurial.selenic.com/">
295 295 <img src="/static/hglogo.png" alt="mercurial" /></a>
296 296 </div>
297 297 <ul>
298 298 <li><a href="/shortlog/2ef0ac749a14">log</a></li>
299 299 <li><a href="/graph/2ef0ac749a14">graph</a></li>
300 300 <li><a href="/tags">tags</a></li>
301 301 <li><a href="/bookmarks">bookmarks</a></li>
302 302 <li><a href="/branches">branches</a></li>
303 303 </ul>
304 304 <ul>
305 305 <li class="active">changeset</li>
306 306 <li><a href="/raw-rev/2ef0ac749a14">raw</a></li>
307 307 <li><a href="/file/2ef0ac749a14">browse</a></li>
308 308 </ul>
309 309 <ul>
310 310
311 311 </ul>
312 312 <ul>
313 313 <li><a href="/help">help</a></li>
314 314 </ul>
315 315 </div>
316 316
317 317 <div class="main">
318 318
319 319 <h2><a href="/">test</a></h2>
320 320 <h3>changeset 0:2ef0ac749a14 <span class="tag">1.0</span> </h3>
321 321
322 322 <form class="search" action="/log">
323 323
324 324 <p><input name="rev" id="search1" type="text" size="30" /></p>
325 325 <div id="hint">find changesets by author, revision,
326 326 files, or words in the commit message</div>
327 327 </form>
328 328
329 329 <div class="description">base</div>
330 330
331 331 <table id="changesetEntry">
332 332 <tr>
333 333 <th class="author">author</th>
334 334 <td class="author">&#116;&#101;&#115;&#116;</td>
335 335 </tr>
336 336 <tr>
337 337 <th class="date">date</th>
338 338 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
339 339 <tr>
340 340 <th class="author">parents</th>
341 341 <td class="author"></td>
342 342 </tr>
343 343 <tr>
344 344 <th class="author">children</th>
345 345 <td class="author"> <a href="/rev/a4f92ed23982">a4f92ed23982</a></td>
346 346 </tr>
347 347 <tr>
348 348 <th class="files">files</th>
349 349 <td class="files"><a href="/file/2ef0ac749a14/da/foo">da/foo</a> <a href="/file/2ef0ac749a14/foo">foo</a> </td>
350 350 </tr>
351 351 </table>
352 352
353 353 <div class="overflow">
354 354 <div class="sourcefirst"> line diff</div>
355 355
356 356 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> <span class="minusline">--- /dev/null Thu Jan 01 00:00:00 1970 +0000
357 357 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ b/da/foo Thu Jan 01 00:00:00 1970 +0000
358 358 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -0,0 +1,1 @@
359 359 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="plusline">+foo
360 360 </span></pre></div><div class="source bottomline parity1"><pre><a href="#l2.1" id="l2.1"> 2.1</a> <span class="minusline">--- /dev/null Thu Jan 01 00:00:00 1970 +0000
361 361 </span><a href="#l2.2" id="l2.2"> 2.2</a> <span class="plusline">+++ b/foo Thu Jan 01 00:00:00 1970 +0000
362 362 </span><a href="#l2.3" id="l2.3"> 2.3</a> <span class="atline">@@ -0,0 +1,1 @@
363 363 </span><a href="#l2.4" id="l2.4"> 2.4</a> <span class="plusline">+foo
364 364 </span></pre></div>
365 365 </div>
366 366
367 367 </div>
368 368 </div>
369 369
370 370
371 371 </body>
372 372 </html>
373 373
374 374 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/rev/1/?style=raw'
375 375 200 Script output follows
376 376
377 377
378 378 # HG changeset patch
379 379 # User test
380 380 # Date 0 0
381 381 # Node ID a4f92ed23982be056b9852de5dfe873eaac7f0de
382 382 # Parent 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
383 383 Added tag 1.0 for changeset 2ef0ac749a14
384 384
385 385 diff -r 2ef0ac749a14 -r a4f92ed23982 .hgtags
386 386 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
387 387 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
388 388 @@ -0,0 +1,1 @@
389 389 +2ef0ac749a14e4f57a5a822464a0902c6f7f448f 1.0
390 390
391 391 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/log?rev=base'
392 392 200 Script output follows
393 393
394 394 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
395 395 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
396 396 <head>
397 397 <link rel="icon" href="/static/hgicon.png" type="image/png" />
398 398 <meta name="robots" content="index, nofollow" />
399 399 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
400 400
401 401 <title>test: searching for base</title>
402 402 </head>
403 403 <body>
404 404
405 405 <div class="container">
406 406 <div class="menu">
407 407 <div class="logo">
408 408 <a href="http://mercurial.selenic.com/">
409 409 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
410 410 </div>
411 411 <ul>
412 412 <li><a href="/shortlog">log</a></li>
413 413 <li><a href="/graph">graph</a></li>
414 414 <li><a href="/tags">tags</a></li>
415 415 <li><a href="/bookmarks">bookmarks</a></li>
416 416 <li><a href="/branches">branches</a></li>
417 417 <li><a href="/help">help</a></li>
418 418 </ul>
419 419 </div>
420 420
421 421 <div class="main">
422 422 <h2><a href="/">test</a></h2>
423 423 <h3>searching for 'base'</h3>
424 424
425 425 <form class="search" action="/log">
426 426
427 427 <p><input name="rev" id="search1" type="text" size="30"></p>
428 428 <div id="hint">find changesets by author, revision,
429 429 files, or words in the commit message</div>
430 430 </form>
431 431
432 432 <div class="navigate">
433 433 <a href="/search/?rev=base&revcount=5">less</a>
434 434 <a href="/search/?rev=base&revcount=20">more</a>
435 435 </div>
436 436
437 437 <table class="bigtable">
438 438 <tr>
439 439 <th class="age">age</th>
440 440 <th class="author">author</th>
441 441 <th class="description">description</th>
442 442 </tr>
443 443 <tr class="parity0">
444 444 <td class="age">1970-01-01</td>
445 445 <td class="author">test</td>
446 446 <td class="description"><a href="/rev/2ef0ac749a14">base</a><span class="tag">1.0</span> </td>
447 447 </tr>
448 448
449 449 </table>
450 450
451 451 <div class="navigate">
452 452 <a href="/search/?rev=base&revcount=5">less</a>
453 453 <a href="/search/?rev=base&revcount=20">more</a>
454 454 </div>
455 455
456 456 </div>
457 457 </div>
458 458
459 459
460 460
461 461 </body>
462 462 </html>
463 463
464 464
465 465 File-related
466 466
467 467 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file/1/foo/?style=raw'
468 468 200 Script output follows
469 469
470 470 foo
471 471 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/annotate/1/foo/?style=raw'
472 472 200 Script output follows
473 473
474 474
475 475 test@0: foo
476 476
477 477
478 478
479 479
480 480 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file/1/?style=raw'
481 481 200 Script output follows
482 482
483 483
484 484 drwxr-xr-x da
485 485 -rw-r--r-- 45 .hgtags
486 486 -rw-r--r-- 4 foo
487 487
488 488
489 489 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/file/1/foo'
490 490 200 Script output follows
491 491
492 492 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
493 493 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
494 494 <head>
495 495 <link rel="icon" href="/static/hgicon.png" type="image/png" />
496 496 <meta name="robots" content="index, nofollow" />
497 497 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
498 498
499 499 <title>test: a4f92ed23982 foo</title>
500 500 </head>
501 501 <body>
502 502
503 503 <div class="container">
504 504 <div class="menu">
505 505 <div class="logo">
506 506 <a href="http://mercurial.selenic.com/">
507 507 <img src="/static/hglogo.png" alt="mercurial" /></a>
508 508 </div>
509 509 <ul>
510 510 <li><a href="/shortlog/a4f92ed23982">log</a></li>
511 511 <li><a href="/graph/a4f92ed23982">graph</a></li>
512 512 <li><a href="/tags">tags</a></li>
513 513 <li><a href="/branches">branches</a></li>
514 514 </ul>
515 515 <ul>
516 516 <li><a href="/rev/a4f92ed23982">changeset</a></li>
517 517 <li><a href="/file/a4f92ed23982/">browse</a></li>
518 518 </ul>
519 519 <ul>
520 520 <li class="active">file</li>
521 521 <li><a href="/file/tip/foo">latest</a></li>
522 522 <li><a href="/diff/a4f92ed23982/foo">diff</a></li>
523 523 <li><a href="/annotate/a4f92ed23982/foo">annotate</a></li>
524 524 <li><a href="/log/a4f92ed23982/foo">file log</a></li>
525 525 <li><a href="/raw-file/a4f92ed23982/foo">raw</a></li>
526 526 </ul>
527 527 <ul>
528 528 <li><a href="/help">help</a></li>
529 529 </ul>
530 530 </div>
531 531
532 532 <div class="main">
533 533 <h2><a href="/">test</a></h2>
534 534 <h3>view foo @ 1:a4f92ed23982</h3>
535 535
536 536 <form class="search" action="/log">
537 537
538 538 <p><input name="rev" id="search1" type="text" size="30" /></p>
539 539 <div id="hint">find changesets by author, revision,
540 540 files, or words in the commit message</div>
541 541 </form>
542 542
543 543 <div class="description">Added tag 1.0 for changeset 2ef0ac749a14</div>
544 544
545 545 <table id="changesetEntry">
546 546 <tr>
547 547 <th class="author">author</th>
548 548 <td class="author">&#116;&#101;&#115;&#116;</td>
549 549 </tr>
550 550 <tr>
551 551 <th class="date">date</th>
552 552 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
553 553 </tr>
554 554 <tr>
555 555 <th class="author">parents</th>
556 556 <td class="author"></td>
557 557 </tr>
558 558 <tr>
559 559 <th class="author">children</th>
560 560 <td class="author"><a href="/file/1d22e65f027e/foo">1d22e65f027e</a> </td>
561 561 </tr>
562 562
563 563 </table>
564 564
565 565 <div class="overflow">
566 566 <div class="sourcefirst"> line source</div>
567 567
568 568 <div class="parity0 source"><a href="#l1" id="l1"> 1</a> foo
569 569 </div>
570 570 <div class="sourcelast"></div>
571 571 </div>
572 572 </div>
573 573 </div>
574 574
575 575
576 576
577 577 </body>
578 578 </html>
579 579
580 580 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/filediff/1/foo/?style=raw'
581 581 200 Script output follows
582 582
583 583
584 584 diff -r 000000000000 -r a4f92ed23982 foo
585 585 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
586 586 +++ b/foo Thu Jan 01 00:00:00 1970 +0000
587 587 @@ -0,0 +1,1 @@
588 588 +foo
589 589
590 590
591 591
592 592
593 593
594 594 Overviews
595 595
596 596 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/raw-tags'
597 597 200 Script output follows
598 598
599 599 tip 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
600 600 1.0 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
601 601 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/raw-branches'
602 602 200 Script output follows
603 603
604 604 stable 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe open
605 605 default a4f92ed23982be056b9852de5dfe873eaac7f0de inactive
606 606 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/summary/?style=gitweb'
607 607 200 Script output follows
608 608
609 609 <?xml version="1.0" encoding="ascii"?>
610 610 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
611 611 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
612 612 <head>
613 613 <link rel="icon" href="/static/hgicon.png" type="image/png" />
614 614 <meta name="robots" content="index, nofollow"/>
615 615 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
616 616
617 617
618 618 <title>test: Summary</title>
619 619 <link rel="alternate" type="application/atom+xml"
620 620 href="/atom-log" title="Atom feed for test"/>
621 621 <link rel="alternate" type="application/rss+xml"
622 622 href="/rss-log" title="RSS feed for test"/>
623 623 </head>
624 624 <body>
625 625
626 626 <div class="page_header">
627 627 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / summary
628 628
629 629 <form action="/log">
630 630 <input type="hidden" name="style" value="gitweb" />
631 631 <div class="search">
632 632 <input type="text" name="rev" />
633 633 </div>
634 634 </form>
635 635 </div>
636 636
637 637 <div class="page_nav">
638 638 summary |
639 639 <a href="/shortlog?style=gitweb">shortlog</a> |
640 640 <a href="/log?style=gitweb">changelog</a> |
641 641 <a href="/graph?style=gitweb">graph</a> |
642 642 <a href="/tags?style=gitweb">tags</a> |
643 643 <a href="/branches?style=gitweb">branches</a> |
644 644 <a href="/file/1d22e65f027e?style=gitweb">files</a> |
645 645 <a href="/help?style=gitweb">help</a>
646 646 <br/>
647 647 </div>
648 648
649 649 <div class="title">&nbsp;</div>
650 650 <table cellspacing="0">
651 651 <tr><td>description</td><td>unknown</td></tr>
652 652 <tr><td>owner</td><td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td></tr>
653 653 <tr><td>last change</td><td>Thu, 01 Jan 1970 00:00:00 +0000</td></tr>
654 654 </table>
655 655
656 656 <div><a class="title" href="/shortlog?style=gitweb">changes</a></div>
657 657 <table cellspacing="0">
658 658
659 659 <tr class="parity0">
660 660 <td class="age"><i>1970-01-01</i></td>
661 661 <td><i>test</i></td>
662 662 <td>
663 663 <a class="list" href="/rev/1d22e65f027e?style=gitweb">
664 664 <b>branch</b>
665 <span class="logtags"><span class="branchtag" title="stable">stable</span> <span class="tagtag" title="tip">tip</span> </span>
665 <span class="logtags"><span class="branchtag" title="stable">stable</span> <span class="tagtag" title="tip">tip</span> <span class="bookmarktag" title="something">something</span> </span>
666 666 </a>
667 667 </td>
668 668 <td class="link" nowrap>
669 669 <a href="/rev/1d22e65f027e?style=gitweb">changeset</a> |
670 670 <a href="/file/1d22e65f027e?style=gitweb">files</a>
671 671 </td>
672 672 </tr>
673 673 <tr class="parity1">
674 674 <td class="age"><i>1970-01-01</i></td>
675 675 <td><i>test</i></td>
676 676 <td>
677 677 <a class="list" href="/rev/a4f92ed23982?style=gitweb">
678 678 <b>Added tag 1.0 for changeset 2ef0ac749a14</b>
679 679 <span class="logtags"><span class="branchtag" title="default">default</span> </span>
680 680 </a>
681 681 </td>
682 682 <td class="link" nowrap>
683 683 <a href="/rev/a4f92ed23982?style=gitweb">changeset</a> |
684 684 <a href="/file/a4f92ed23982?style=gitweb">files</a>
685 685 </td>
686 686 </tr>
687 687 <tr class="parity0">
688 688 <td class="age"><i>1970-01-01</i></td>
689 689 <td><i>test</i></td>
690 690 <td>
691 691 <a class="list" href="/rev/2ef0ac749a14?style=gitweb">
692 692 <b>base</b>
693 693 <span class="logtags"><span class="tagtag" title="1.0">1.0</span> </span>
694 694 </a>
695 695 </td>
696 696 <td class="link" nowrap>
697 697 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
698 698 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
699 699 </td>
700 700 </tr>
701 701 <tr class="light"><td colspan="4"><a class="list" href="/shortlog?style=gitweb">...</a></td></tr>
702 702 </table>
703 703
704 704 <div><a class="title" href="/tags?style=gitweb">tags</a></div>
705 705 <table cellspacing="0">
706 706
707 707 <tr class="parity0">
708 708 <td class="age"><i>1970-01-01</i></td>
709 709 <td><a class="list" href="/rev/2ef0ac749a14?style=gitweb"><b>1.0</b></a></td>
710 710 <td class="link">
711 711 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
712 712 <a href="/log/2ef0ac749a14?style=gitweb">changelog</a> |
713 713 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
714 714 </td>
715 715 </tr>
716 716 <tr class="light"><td colspan="3"><a class="list" href="/tags?style=gitweb">...</a></td></tr>
717 717 </table>
718 718
719 719 <div><a class="title" href="#">branches</a></div>
720 720 <table cellspacing="0">
721 721
722 722 <tr class="parity0">
723 723 <td class="age"><i>1970-01-01</i></td>
724 724 <td><a class="list" href="/shortlog/1d22e65f027e?style=gitweb"><b>1d22e65f027e</b></a></td>
725 725 <td class="">stable</td>
726 726 <td class="link">
727 727 <a href="/changeset/1d22e65f027e?style=gitweb">changeset</a> |
728 728 <a href="/log/1d22e65f027e?style=gitweb">changelog</a> |
729 729 <a href="/file/1d22e65f027e?style=gitweb">files</a>
730 730 </td>
731 731 </tr>
732 732 <tr class="parity1">
733 733 <td class="age"><i>1970-01-01</i></td>
734 734 <td><a class="list" href="/shortlog/a4f92ed23982?style=gitweb"><b>a4f92ed23982</b></a></td>
735 735 <td class="">default</td>
736 736 <td class="link">
737 737 <a href="/changeset/a4f92ed23982?style=gitweb">changeset</a> |
738 738 <a href="/log/a4f92ed23982?style=gitweb">changelog</a> |
739 739 <a href="/file/a4f92ed23982?style=gitweb">files</a>
740 740 </td>
741 741 </tr>
742 742 <tr class="light">
743 743 <td colspan="4"><a class="list" href="#">...</a></td>
744 744 </tr>
745 745 </table>
746 746 <div class="page_footer">
747 747 <div class="page_footer_text">test</div>
748 748 <div class="rss_logo">
749 749 <a href="/rss-log">RSS</a>
750 750 <a href="/atom-log">Atom</a>
751 751 </div>
752 752 <br />
753 753
754 754 </div>
755 755 </body>
756 756 </html>
757 757
758 758 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/graph/?style=gitweb'
759 759 200 Script output follows
760 760
761 761 <?xml version="1.0" encoding="ascii"?>
762 762 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
763 763 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
764 764 <head>
765 765 <link rel="icon" href="/static/hgicon.png" type="image/png" />
766 766 <meta name="robots" content="index, nofollow"/>
767 767 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
768 768
769 769
770 770 <title>test: Graph</title>
771 771 <link rel="alternate" type="application/atom+xml"
772 772 href="/atom-log" title="Atom feed for test"/>
773 773 <link rel="alternate" type="application/rss+xml"
774 774 href="/rss-log" title="RSS feed for test"/>
775 775 <!--[if IE]><script type="text/javascript" src="/static/excanvas.js"></script><![endif]-->
776 776 </head>
777 777 <body>
778 778
779 779 <div class="page_header">
780 780 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / graph
781 781 </div>
782 782
783 783 <form action="/log">
784 784 <input type="hidden" name="style" value="gitweb" />
785 785 <div class="search">
786 786 <input type="text" name="rev" />
787 787 </div>
788 788 </form>
789 789 <div class="page_nav">
790 790 <a href="/summary?style=gitweb">summary</a> |
791 791 <a href="/shortlog?style=gitweb">shortlog</a> |
792 792 <a href="/log/2?style=gitweb">changelog</a> |
793 793 graph |
794 794 <a href="/tags?style=gitweb">tags</a> |
795 795 <a href="/branches?style=gitweb">branches</a> |
796 796 <a href="/file/1d22e65f027e?style=gitweb">files</a> |
797 797 <a href="/help?style=gitweb">help</a>
798 798 <br/>
799 799 <a href="/graph/2?style=gitweb&revcount=30">less</a>
800 800 <a href="/graph/2?style=gitweb&revcount=120">more</a>
801 801 | <a href="/graph/2ef0ac749a14?style=gitweb">(0)</a> <a href="/graph/2ef0ac749a14?style=gitweb">-2</a> <a href="/graph/tip?style=gitweb">tip</a> <br/>
802 802 </div>
803 803
804 804 <div class="title">&nbsp;</div>
805 805
806 806 <noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
807 807
808 808 <div id="wrapper">
809 809 <ul id="nodebgs"></ul>
810 810 <canvas id="graph" width="480" height="129"></canvas>
811 811 <ul id="graphnodes"></ul>
812 812 </div>
813 813
814 814 <script type="text/javascript" src="/static/graph.js"></script>
815 815 <script>
816 816 <!-- hide script content
817 817
818 818 var data = [["1d22e65f027e", [0, 1], [[0, 0, 1]], "branch", "test", "1970-01-01", ["stable", true], ["tip"], ["something"]], ["a4f92ed23982", [0, 1], [[0, 0, 1]], "Added tag 1.0 for changeset 2ef0ac749a14", "test", "1970-01-01", ["default", true], [], []], ["2ef0ac749a14", [0, 1], [], "base", "test", "1970-01-01", ["default", false], ["1.0"], []]];
819 819 var graph = new Graph();
820 820 graph.scale(39);
821 821
822 822 graph.edge = function(x0, y0, x1, y1, color) {
823 823
824 824 this.setColor(color, 0.0, 0.65);
825 825 this.ctx.beginPath();
826 826 this.ctx.moveTo(x0, y0);
827 827 this.ctx.lineTo(x1, y1);
828 828 this.ctx.stroke();
829 829
830 830 }
831 831
832 832 var revlink = '<li style="_STYLE"><span class="desc">';
833 833 revlink += '<a class="list" href="/rev/_NODEID?style=gitweb" title="_NODEID"><b>_DESC</b></a>';
834 834 revlink += '</span> _TAGS';
835 835 revlink += '<span class="info">_DATE, by _USER</span></li>';
836 836
837 837 graph.vertex = function(x, y, color, parity, cur) {
838 838
839 839 this.ctx.beginPath();
840 840 color = this.setColor(color, 0.25, 0.75);
841 841 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
842 842 this.ctx.fill();
843 843
844 844 var bg = '<li class="bg parity' + parity + '"></li>';
845 845 var left = (this.columns + 1) * this.bg_height;
846 846 var nstyle = 'padding-left: ' + left + 'px;';
847 847 var item = revlink.replace(/_STYLE/, nstyle);
848 848 item = item.replace(/_PARITY/, 'parity' + parity);
849 849 item = item.replace(/_NODEID/, cur[0]);
850 850 item = item.replace(/_NODEID/, cur[0]);
851 851 item = item.replace(/_DESC/, cur[3]);
852 852 item = item.replace(/_USER/, cur[4]);
853 853 item = item.replace(/_DATE/, cur[5]);
854 854
855 855 var tagspan = '';
856 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
856 if (cur[7].length || cur[8].length || (cur[6][0] != 'default' || cur[6][1])) {
857 857 tagspan = '<span class="logtags">';
858 858 if (cur[6][1]) {
859 859 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
860 860 tagspan += cur[6][0] + '</span> ';
861 861 } else if (!cur[6][1] && cur[6][0] != 'default') {
862 862 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
863 863 tagspan += cur[6][0] + '</span> ';
864 864 }
865 865 if (cur[7].length) {
866 866 for (var t in cur[7]) {
867 867 var tag = cur[7][t];
868 868 tagspan += '<span class="tagtag">' + tag + '</span> ';
869 869 }
870 870 }
871 if (cur[8].length) {
872 for (var t in cur[8]) {
873 var bookmark = cur[8][t];
874 tagspan += '<span class="bookmarktag">' + bookmark + '</span> ';
875 }
876 }
871 877 tagspan += '</span>';
872 878 }
873 879
874 880 item = item.replace(/_TAGS/, tagspan);
875 881 return [bg, item];
876 882
877 883 }
878 884
879 885 graph.render(data);
880 886
881 887 // stop hiding script -->
882 888 </script>
883 889
884 890 <div class="page_nav">
885 891 <a href="/graph/2?style=gitweb&revcount=30">less</a>
886 892 <a href="/graph/2?style=gitweb&revcount=120">more</a>
887 893 | <a href="/graph/2ef0ac749a14?style=gitweb">(0)</a> <a href="/graph/2ef0ac749a14?style=gitweb">-2</a> <a href="/graph/tip?style=gitweb">tip</a>
888 894 </div>
889 895
890 896 <div class="page_footer">
891 897 <div class="page_footer_text">test</div>
892 898 <div class="rss_logo">
893 899 <a href="/rss-log">RSS</a>
894 900 <a href="/atom-log">Atom</a>
895 901 </div>
896 902 <br />
897 903
898 904 </div>
899 905 </body>
900 906 </html>
901 907
902 908
903 909 capabilities
904 910
905 911 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=capabilities'; echo
906 912 200 Script output follows
907 913
908 914 lookup changegroupsubset branchmap pushkey unbundle=HG10GZ,HG10BZ,HG10UN
909 915
910 916 heads
911 917
912 918 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=heads'
913 919 200 Script output follows
914 920
915 921 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
916 922
917 923 branches
918 924
919 925 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=branches&nodes=0000000000000000000000000000000000000000'
920 926 200 Script output follows
921 927
922 928 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
923 929
924 930 changegroup
925 931
926 932 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=changegroup&roots=0000000000000000000000000000000000000000'
927 933 200 Script output follows
928 934
929 935 x\x9c\xbdTMHUA\x14\xbe\xa8\xf9\xec\xda&\x10\x11*\xb8\x88\x81\x99\xbef\xe6\xce\xbdw\xc6\xf2a\x16E\x1b\x11[%\x98\xcc\xaf\x8f\x8c\xf7\xc0\xf7\x82 (esc)
930 936 4\x11KP2m\x95\xad*\xabE\x05AP\xd0\xc22Z\x14\xf9\x03\xb9j\xa3\x9b$\xa4MJ\xb4\x90\xc0\x9a\x9bO0\x10\xdf\x13\xa2\x81\x0f\x869g\xe6|\xe7\x9c\xef\x8ceY\xf7\xa2KO\xd2\xb7K\x16~\\n\xe9\xad\x90w\x86\xab\x93W\x8e\xdf\xb0r\\Y\xee6(\xa2)\xf6\x95\xc6\x01\xe4\x1az\x80R\xe8kN\x98\xe7R\xa4\xa9K@\xe0!A\xb4k\xa7U*m\x03\x07\xd8\x92\x1d\xd2\xc9\xa4\x1d\xc2\xe6,\xa5\xcc+\x1f\xef\xafDgi\xef\xab\x1d\x1d\xb7\x9a\xe7[W\xfbc\x8f\xde-\xcd\xe7\xcaz\xb3\xbb\x19\xd3\x81\x10>c>\x08\x00"X\x11\xc2\x84@\xd2\xe7B*L\x00\x01P\x04R\xc3@\xbaB0\xdb8#\x83:\x83\xa2h\xbc=\xcd\xdaS\xe1Y,L\xd3\xa0\xf2\xa8\x94J:\xe6\xd8\x81Q\xe0\xe8d\xa7#\xe2,\xd1\xaeR*\xed \xa5\x01\x13\x01\xa6\x0cb\xe3;\xbe\xaf\xfcK[^wK\xe1N\xaf\xbbk\xe8B\xd1\xf4\xc1\x07\xb3\xab[\x10\xfdkmvwcB\xa6\xa4\xd4G\xc4D\xc2\x141\xad\x91\x10\x00\x08J\x81\xcb}\xee \xee+W\xba\x8a\x80\x90|\xd4\xa0\xd6\xa0\xd4T\xde\xe1\x9d,!\xe2\xb5\xa94\xe3\xe7\xd5\x9f\x06\x18\xcba\x03aP\xb8f\xcd\x04\x1a_\\9\xf1\xed\xe4\x9e\xe5\xa6\xd1\xd2\x9f\x03\xa7o\xae\x90H\xf3\xfb\xef\xffH3\xadk (esc)
931 937 \xb0\x90\x92\x88\xb9\x14"\x068\xc2\x1e@\x00\xbb\x8a)\xd3'\x859 (esc)
932 938 \xa8\x80\x84S \xa5\xbd-g\x13`\xe4\xdc\xc3H^\xdf\xe2\xc0TM\xc7\xf4BO\xcf\xde\xae\xe5\xae#\x1frM(K\x97`F\x19\x16s\x05GD\xb9\x01\xc1\x00+\x8c|\x9fp\xc11\xf0\x14\x00\x9cJ\x82<\xe0\x12\x9f\xc1\x90\xd0\xf5\xc8\x19>Pr\xaa\xeaW\xf5\xc4\xae\xd1\xfc\x17\xcf'\x13u\xb1\x9e\xcdHnC\x0e\xcc`\xc8\xa0&\xac\x0e\xf1|\x8c\x10$\xc4\x8c\xa2p\x05`\xdc\x08 \x80\xc4\xd7Rr-\x94\x10\x102\xedi;\xf3f\xf1z\x16\x86\xdb\xd8d\xe5\xe7\x8b\xf5\x8d\rzp\xb2\xfe\xac\xf5\xf2\xd3\xfe\xfckws\xedt\x96b\xd5l\x1c\x0b\x85\xb5\x170\x8f\x11\x84\xb0\x8f\x19\xa0\x00 _\x07\x1ac\xa2\xc3\x89Z\xe7\x96\xf9 \xccNFg\xc7F\xaa\x8a+\x9a\x9cc_\x17\x1b\x17\x9e]z38<\x97+\xb5,",\xc8\xc8?\\\x91\xff\x17.~U\x96\x97\xf5%\xdeN<\x8e\xf5\x97%\xe7^\xcfL\xed~\xda\x96k\xdc->\x86\x02\x83"\x96H\xa6\xe3\xaas=-\xeb7\xe5\xda\x8f\xbc (no-eol) (esc)
933 939
934 940 stream_out
935 941
936 942 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=stream_out'
937 943 200 Script output follows
938 944
939 945 1
940 946
941 947 failing unbundle, requires POST request
942 948
943 949 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=unbundle'
944 950 405 push requires POST request
945 951
946 952 0
947 953 push requires POST request
948 954 [1]
949 955
950 956 Static files
951 957
952 958 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/static/style.css'
953 959 200 Script output follows
954 960
955 961 a { text-decoration:none; }
956 962 .age { white-space:nowrap; }
957 963 .date { white-space:nowrap; }
958 964 .indexlinks { white-space:nowrap; }
959 965 .parity0 { background-color: #ddd; }
960 966 .parity1 { background-color: #eee; }
961 967 .lineno { width: 60px; color: #aaa; font-size: smaller;
962 968 text-align: right; }
963 969 .plusline { color: green; }
964 970 .minusline { color: red; }
965 971 .atline { color: purple; }
966 972 .annotate { font-size: smaller; text-align: right; padding-right: 1em; }
967 973 .buttons a {
968 974 background-color: #666;
969 975 padding: 2pt;
970 976 color: white;
971 977 font-family: sans;
972 978 font-weight: bold;
973 979 }
974 980 .navigate a {
975 981 background-color: #ccc;
976 982 padding: 2pt;
977 983 font-family: sans;
978 984 color: black;
979 985 }
980 986
981 987 .metatag {
982 988 background-color: #888;
983 989 color: white;
984 990 text-align: right;
985 991 }
986 992
987 993 /* Common */
988 994 pre { margin: 0; }
989 995
990 996 .logo {
991 997 float: right;
992 998 clear: right;
993 999 }
994 1000
995 1001 /* Changelog/Filelog entries */
996 1002 .logEntry { width: 100%; }
997 1003 .logEntry .age { width: 15%; }
998 1004 .logEntry th { font-weight: normal; text-align: right; vertical-align: top; }
999 1005 .logEntry th.age, .logEntry th.firstline { font-weight: bold; }
1000 1006 .logEntry th.firstline { text-align: left; width: inherit; }
1001 1007
1002 1008 /* Shortlog entries */
1003 1009 .slogEntry { width: 100%; }
1004 1010 .slogEntry .age { width: 8em; }
1005 1011 .slogEntry td { font-weight: normal; text-align: left; vertical-align: top; }
1006 1012 .slogEntry td.author { width: 15em; }
1007 1013
1008 1014 /* Tag entries */
1009 1015 #tagEntries { list-style: none; margin: 0; padding: 0; }
1010 1016 #tagEntries .tagEntry { list-style: none; margin: 0; padding: 0; }
1011 1017
1012 1018 /* Changeset entry */
1013 1019 #changesetEntry { }
1014 1020 #changesetEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
1015 1021 #changesetEntry th.files, #changesetEntry th.description { vertical-align: top; }
1016 1022
1017 1023 /* File diff view */
1018 1024 #filediffEntry { }
1019 1025 #filediffEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
1020 1026
1021 1027 /* Graph */
1022 1028 div#wrapper {
1023 1029 position: relative;
1024 1030 margin: 0;
1025 1031 padding: 0;
1026 1032 }
1027 1033
1028 1034 canvas {
1029 1035 position: absolute;
1030 1036 z-index: 5;
1031 1037 top: -0.6em;
1032 1038 margin: 0;
1033 1039 }
1034 1040
1035 1041 ul#nodebgs {
1036 1042 list-style: none inside none;
1037 1043 padding: 0;
1038 1044 margin: 0;
1039 1045 top: -0.7em;
1040 1046 }
1041 1047
1042 1048 ul#graphnodes li, ul#nodebgs li {
1043 1049 height: 39px;
1044 1050 }
1045 1051
1046 1052 ul#graphnodes {
1047 1053 position: absolute;
1048 1054 z-index: 10;
1049 1055 top: -0.85em;
1050 1056 list-style: none inside none;
1051 1057 padding: 0;
1052 1058 }
1053 1059
1054 1060 ul#graphnodes li .info {
1055 1061 display: block;
1056 1062 font-size: 70%;
1057 1063 position: relative;
1058 1064 top: -1px;
1059 1065 }
1060 1066
1061 1067 Stop and restart with HGENCODING=cp932
1062 1068
1063 1069 $ "$TESTDIR/killdaemons.py"
1064 1070 $ HGENCODING=cp932 hg serve --config server.uncompressed=False -n test \
1065 1071 > -p $HGPORT -d --pid-file=hg.pid -E errors.log
1066 1072 $ cat hg.pid >> $DAEMON_PIDS
1067 1073
1068 1074 commit message with Japanese Kanji 'Noh', which ends with '\x5c'
1069 1075
1070 1076 $ echo foo >> foo
1071 1077 $ HGENCODING=cp932 hg ci -m `python -c 'print("\x94\x5c")'`
1072 1078
1073 1079 Graph json escape of multibyte character
1074 1080
1075 1081 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/graph/' \
1076 1082 > | grep '^var data ='
1077 1083 var data = [["40b4d6888e92", [0, 1], [[0, 0, 1]], "\u80fd", "test", "1970-01-01", ["stable", true], ["tip"], ["something"]], ["1d22e65f027e", [0, 1], [[0, 0, 1]], "branch", "test", "1970-01-01", ["stable", false], [], []], ["a4f92ed23982", [0, 1], [[0, 0, 1]], "Added tag 1.0 for changeset 2ef0ac749a14", "test", "1970-01-01", ["default", true], [], []], ["2ef0ac749a14", [0, 1], [], "base", "test", "1970-01-01", ["default", false], ["1.0"], []]];
1078 1084
1079 1085 ERRORS ENCOUNTERED
1080 1086
1081 1087 $ cat errors.log
@@ -1,433 +1,437
1 1 Some tests for hgweb. Tests static files, plain files and different 404's.
2 2
3 3 $ hg init test
4 4 $ cd test
5 5 $ mkdir da
6 6 $ echo foo > da/foo
7 7 $ echo foo > foo
8 8 $ hg ci -Ambase
9 9 adding da/foo
10 10 adding foo
11 11 $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
12 12 $ cat hg.pid >> $DAEMON_PIDS
13 13
14 14 manifest
15 15
16 16 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/?style=raw')
17 17 200 Script output follows
18 18
19 19
20 20 drwxr-xr-x da
21 21 -rw-r--r-- 4 foo
22 22
23 23
24 24 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/da?style=raw')
25 25 200 Script output follows
26 26
27 27
28 28 -rw-r--r-- 4 foo
29 29
30 30
31 31
32 32 plain file
33 33
34 34 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/foo?style=raw'
35 35 200 Script output follows
36 36
37 37 foo
38 38
39 39 should give a 404 - static file that does not exist
40 40
41 41 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/static/bogus'
42 42 404 Not Found
43 43
44 44 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
45 45 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
46 46 <head>
47 47 <link rel="icon" href="/static/hgicon.png" type="image/png" />
48 48 <meta name="robots" content="index, nofollow" />
49 49 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
50 50
51 51 <title>test: error</title>
52 52 </head>
53 53 <body>
54 54
55 55 <div class="container">
56 56 <div class="menu">
57 57 <div class="logo">
58 58 <a href="http://mercurial.selenic.com/">
59 59 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
60 60 </div>
61 61 <ul>
62 62 <li><a href="/shortlog">log</a></li>
63 63 <li><a href="/graph">graph</a></li>
64 64 <li><a href="/tags">tags</a></li>
65 65 <li><a href="/bookmarks">bookmarks</a></li>
66 66 <li><a href="/branches">branches</a></li>
67 67 <li><a href="/help">help</a></li>
68 68 </ul>
69 69 </div>
70 70
71 71 <div class="main">
72 72
73 73 <h2><a href="/">test</a></h2>
74 74 <h3>error</h3>
75 75
76 76 <form class="search" action="/log">
77 77
78 78 <p><input name="rev" id="search1" type="text" size="30"></p>
79 79 <div id="hint">find changesets by author, revision,
80 80 files, or words in the commit message</div>
81 81 </form>
82 82
83 83 <div class="description">
84 84 <p>
85 85 An error occurred while processing your request:
86 86 </p>
87 87 <p>
88 88 Not Found
89 89 </p>
90 90 </div>
91 91 </div>
92 92 </div>
93 93
94 94
95 95
96 96 </body>
97 97 </html>
98 98
99 99 [1]
100 100
101 101 should give a 404 - bad revision
102 102
103 103 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/spam/foo?style=raw'
104 104 404 Not Found
105 105
106 106
107 107 error: revision not found: spam
108 108 [1]
109 109
110 110 should give a 400 - bad command
111 111
112 112 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/foo?cmd=spam&style=raw'
113 113 400* (glob)
114 114
115 115
116 116 error: no such method: spam
117 117 [1]
118 118
119 119 should give a 404 - file does not exist
120 120
121 121 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/bork?style=raw'
122 122 404 Not Found
123 123
124 124
125 125 error: bork@2ef0ac749a14: not found in manifest
126 126 [1]
127 127 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/bork'
128 128 404 Not Found
129 129
130 130 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
131 131 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
132 132 <head>
133 133 <link rel="icon" href="/static/hgicon.png" type="image/png" />
134 134 <meta name="robots" content="index, nofollow" />
135 135 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
136 136
137 137 <title>test: error</title>
138 138 </head>
139 139 <body>
140 140
141 141 <div class="container">
142 142 <div class="menu">
143 143 <div class="logo">
144 144 <a href="http://mercurial.selenic.com/">
145 145 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
146 146 </div>
147 147 <ul>
148 148 <li><a href="/shortlog">log</a></li>
149 149 <li><a href="/graph">graph</a></li>
150 150 <li><a href="/tags">tags</a></li>
151 151 <li><a href="/bookmarks">bookmarks</a></li>
152 152 <li><a href="/branches">branches</a></li>
153 153 <li><a href="/help">help</a></li>
154 154 </ul>
155 155 </div>
156 156
157 157 <div class="main">
158 158
159 159 <h2><a href="/">test</a></h2>
160 160 <h3>error</h3>
161 161
162 162 <form class="search" action="/log">
163 163
164 164 <p><input name="rev" id="search1" type="text" size="30"></p>
165 165 <div id="hint">find changesets by author, revision,
166 166 files, or words in the commit message</div>
167 167 </form>
168 168
169 169 <div class="description">
170 170 <p>
171 171 An error occurred while processing your request:
172 172 </p>
173 173 <p>
174 174 bork@2ef0ac749a14: not found in manifest
175 175 </p>
176 176 </div>
177 177 </div>
178 178 </div>
179 179
180 180
181 181
182 182 </body>
183 183 </html>
184 184
185 185 [1]
186 186 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/diff/tip/bork?style=raw'
187 187 404 Not Found
188 188
189 189
190 190 error: bork@2ef0ac749a14: not found in manifest
191 191 [1]
192 192
193 193 try bad style
194 194
195 195 $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/?style=foobar')
196 196 200 Script output follows
197 197
198 198 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
199 199 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
200 200 <head>
201 201 <link rel="icon" href="/static/hgicon.png" type="image/png" />
202 202 <meta name="robots" content="index, nofollow" />
203 203 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
204 204
205 205 <title>test: 2ef0ac749a14 /</title>
206 206 </head>
207 207 <body>
208 208
209 209 <div class="container">
210 210 <div class="menu">
211 211 <div class="logo">
212 212 <a href="http://mercurial.selenic.com/">
213 213 <img src="/static/hglogo.png" alt="mercurial" /></a>
214 214 </div>
215 215 <ul>
216 216 <li><a href="/shortlog/2ef0ac749a14">log</a></li>
217 217 <li><a href="/graph/2ef0ac749a14">graph</a></li>
218 218 <li><a href="/tags">tags</a></li>
219 219 <li><a href="/bookmarks">bookmarks</a></li>
220 220 <li><a href="/branches">branches</a></li>
221 221 </ul>
222 222 <ul>
223 223 <li><a href="/rev/2ef0ac749a14">changeset</a></li>
224 224 <li class="active">browse</li>
225 225 </ul>
226 226 <ul>
227 227
228 228 </ul>
229 229 <ul>
230 230 <li><a href="/help">help</a></li>
231 231 </ul>
232 232 </div>
233 233
234 234 <div class="main">
235 235 <h2><a href="/">test</a></h2>
236 236 <h3>directory / @ 0:2ef0ac749a14 <span class="tag">tip</span> </h3>
237 237
238 238 <form class="search" action="/log">
239 239
240 240 <p><input name="rev" id="search1" type="text" size="30" /></p>
241 241 <div id="hint">find changesets by author, revision,
242 242 files, or words in the commit message</div>
243 243 </form>
244 244
245 245 <table class="bigtable">
246 246 <tr>
247 247 <th class="name">name</th>
248 248 <th class="size">size</th>
249 249 <th class="permissions">permissions</th>
250 250 </tr>
251 251 <tr class="fileline parity0">
252 252 <td class="name"><a href="/file/2ef0ac749a14/">[up]</a></td>
253 253 <td class="size"></td>
254 254 <td class="permissions">drwxr-xr-x</td>
255 255 </tr>
256 256
257 257 <tr class="fileline parity1">
258 258 <td class="name">
259 259 <a href="/file/2ef0ac749a14/da">
260 260 <img src="/static/coal-folder.png" alt="dir."/> da/
261 261 </a>
262 262 <a href="/file/2ef0ac749a14/da/">
263 263
264 264 </a>
265 265 </td>
266 266 <td class="size"></td>
267 267 <td class="permissions">drwxr-xr-x</td>
268 268 </tr>
269 269
270 270 <tr class="fileline parity0">
271 271 <td class="filename">
272 272 <a href="/file/2ef0ac749a14/foo">
273 273 <img src="/static/coal-file.png" alt="file"/> foo
274 274 </a>
275 275 </td>
276 276 <td class="size">4</td>
277 277 <td class="permissions">-rw-r--r--</td>
278 278 </tr>
279 279 </table>
280 280 </div>
281 281 </div>
282 282
283 283
284 284 </body>
285 285 </html>
286 286
287 287
288 288 stop and restart
289 289
290 290 $ "$TESTDIR/killdaemons.py"
291 291 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log
292 292 $ cat hg.pid >> $DAEMON_PIDS
293 293
294 294 Test the access/error files are opened in append mode
295 295
296 296 $ python -c "print len(file('access.log').readlines()), 'log lines written'"
297 297 10 log lines written
298 298
299 299 static file
300 300
301 301 $ "$TESTDIR/get-with-headers.py" --twice localhost:$HGPORT '/static/style-gitweb.css'
302 302 200 Script output follows
303 303
304 304 body { font-family: sans-serif; font-size: 12px; margin:0px; border:solid #d9d8d1; border-width:1px; margin:10px; }
305 305 a { color:#0000cc; }
306 306 a:hover, a:visited, a:active { color:#880000; }
307 307 div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
308 308 div.page_header a:visited { color:#0000cc; }
309 309 div.page_header a:hover { color:#880000; }
310 310 div.page_nav { padding:8px; }
311 311 div.page_nav a:visited { color:#0000cc; }
312 312 div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
313 313 div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
314 314 div.page_footer_text { float:left; color:#555555; font-style:italic; }
315 315 div.page_body { padding:8px; }
316 316 div.title, a.title {
317 317 display:block; padding:6px 8px;
318 318 font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
319 319 }
320 320 a.title:hover { background-color: #d9d8d1; }
321 321 div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
322 322 div.log_body { padding:8px 8px 8px 150px; }
323 323 .age { white-space:nowrap; }
324 324 span.age { position:relative; float:left; width:142px; font-style:italic; }
325 325 div.log_link {
326 326 padding:0px 8px;
327 327 font-size:10px; font-family:sans-serif; font-style:normal;
328 328 position:relative; float:left; width:136px;
329 329 }
330 330 div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
331 331 a.list { text-decoration:none; color:#000000; }
332 332 a.list:hover { text-decoration:underline; color:#880000; }
333 333 table { padding:8px 4px; }
334 334 th { padding:2px 5px; font-size:12px; text-align:left; }
335 335 tr.light:hover, .parity0:hover { background-color:#edece6; }
336 336 tr.dark, .parity1 { background-color:#f6f6f0; }
337 337 tr.dark:hover, .parity1:hover { background-color:#edece6; }
338 338 td { padding:2px 5px; font-size:12px; vertical-align:top; }
339 339 td.closed { background-color: #99f; }
340 340 td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
341 341 td.indexlinks { white-space: nowrap; }
342 342 td.indexlinks a {
343 343 padding: 2px 5px; line-height: 10px;
344 344 border: 1px solid;
345 345 color: #ffffff; background-color: #7777bb;
346 346 border-color: #aaaadd #333366 #333366 #aaaadd;
347 347 font-weight: bold; text-align: center; text-decoration: none;
348 348 font-size: 10px;
349 349 }
350 350 td.indexlinks a:hover { background-color: #6666aa; }
351 351 div.pre { font-family:monospace; font-size:12px; white-space:pre; }
352 352 div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
353 353 div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
354 354 div.search { margin:4px 8px; position:absolute; top:56px; right:12px }
355 355 .linenr { color:#999999; text-decoration:none }
356 356 div.rss_logo { float: right; white-space: nowrap; }
357 357 div.rss_logo a {
358 358 padding:3px 6px; line-height:10px;
359 359 border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
360 360 color:#ffffff; background-color:#ff6600;
361 361 font-weight:bold; font-family:sans-serif; font-size:10px;
362 362 text-align:center; text-decoration:none;
363 363 }
364 364 div.rss_logo a:hover { background-color:#ee5500; }
365 365 pre { margin: 0; }
366 366 span.logtags span {
367 367 padding: 0px 4px;
368 368 font-size: 10px;
369 369 font-weight: normal;
370 370 border: 1px solid;
371 371 background-color: #ffaaff;
372 372 border-color: #ffccff #ff00ee #ff00ee #ffccff;
373 373 }
374 374 span.logtags span.tagtag {
375 375 background-color: #ffffaa;
376 376 border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
377 377 }
378 378 span.logtags span.branchtag {
379 379 background-color: #aaffaa;
380 380 border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
381 381 }
382 382 span.logtags span.inbranchtag {
383 383 background-color: #d5dde6;
384 384 border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
385 385 }
386 span.logtags span.bookmarktag {
387 background-color: #afdffa;
388 border-color: #ccecff #46ace6 #46ace6 #ccecff;
389 }
386 390
387 391 /* Graph */
388 392 div#wrapper {
389 393 position: relative;
390 394 margin: 0;
391 395 padding: 0;
392 396 margin-top: 3px;
393 397 }
394 398
395 399 canvas {
396 400 position: absolute;
397 401 z-index: 5;
398 402 top: -0.9em;
399 403 margin: 0;
400 404 }
401 405
402 406 ul#nodebgs {
403 407 list-style: none inside none;
404 408 padding: 0;
405 409 margin: 0;
406 410 top: -0.7em;
407 411 }
408 412
409 413 ul#graphnodes li, ul#nodebgs li {
410 414 height: 39px;
411 415 }
412 416
413 417 ul#graphnodes {
414 418 position: absolute;
415 419 z-index: 10;
416 420 top: -0.8em;
417 421 list-style: none inside none;
418 422 padding: 0;
419 423 }
420 424
421 425 ul#graphnodes li .info {
422 426 display: block;
423 427 font-size: 100%;
424 428 position: relative;
425 429 top: -3px;
426 430 font-style: italic;
427 431 }
428 432 304 Not Modified
429 433
430 434
431 435 errors
432 436
433 437 $ cat errors.log
General Comments 0
You need to be logged in to leave comments. Login now