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