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