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