Show More
@@ -0,0 +1,40 | |||
|
1 | hg init test | |
|
2 | cd test | |
|
3 | ||
|
4 | echo b > b | |
|
5 | hg ci -Am "b" | |
|
6 | ||
|
7 | echo a > a | |
|
8 | hg ci -Am "first a" | |
|
9 | ||
|
10 | hg rm a | |
|
11 | hg ci -m "del a" | |
|
12 | ||
|
13 | echo b > a | |
|
14 | hg ci -Am "second a" | |
|
15 | ||
|
16 | hg rm a | |
|
17 | hg ci -m "del2 a" | |
|
18 | ||
|
19 | hg log -p | |
|
20 | ||
|
21 | hg serve -n test -p $HGPORT -d --pid-file=hg.pid -E errors.log | |
|
22 | cat hg.pid >> $DAEMON_PIDS | |
|
23 | ||
|
24 | echo % tip - two revisions | |
|
25 | ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/log/tip/a') | |
|
26 | ||
|
27 | echo % second version - two revisions | |
|
28 | ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/log/3/a') | |
|
29 | ||
|
30 | echo % first deleted - one revision | |
|
31 | ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/log/2/a') | |
|
32 | ||
|
33 | echo % first version - one revision | |
|
34 | ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/log/1/a') | |
|
35 | ||
|
36 | echo % before addition - error | |
|
37 | ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/log/0/a') | |
|
38 | ||
|
39 | echo % errors | |
|
40 | cat errors.log |
@@ -0,0 +1,418 | |||
|
1 | adding b | |
|
2 | adding a | |
|
3 | adding a | |
|
4 | changeset: 4:52e848cdcd88 | |
|
5 | tag: tip | |
|
6 | user: test | |
|
7 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
8 | summary: del2 a | |
|
9 | ||
|
10 | diff -r 01de2d66a28d -r 52e848cdcd88 a | |
|
11 | --- a/a Thu Jan 01 00:00:00 1970 +0000 | |
|
12 | +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 | |
|
13 | @@ -1,1 +0,0 @@ | |
|
14 | -b | |
|
15 | ||
|
16 | changeset: 3:01de2d66a28d | |
|
17 | user: test | |
|
18 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
19 | summary: second a | |
|
20 | ||
|
21 | diff -r be3ebcc91739 -r 01de2d66a28d a | |
|
22 | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 | |
|
23 | +++ b/a Thu Jan 01 00:00:00 1970 +0000 | |
|
24 | @@ -0,0 +1,1 @@ | |
|
25 | +b | |
|
26 | ||
|
27 | changeset: 2:be3ebcc91739 | |
|
28 | user: test | |
|
29 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
30 | summary: del a | |
|
31 | ||
|
32 | diff -r 5ed941583260 -r be3ebcc91739 a | |
|
33 | --- a/a Thu Jan 01 00:00:00 1970 +0000 | |
|
34 | +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 | |
|
35 | @@ -1,1 +0,0 @@ | |
|
36 | -a | |
|
37 | ||
|
38 | changeset: 1:5ed941583260 | |
|
39 | user: test | |
|
40 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
41 | summary: first a | |
|
42 | ||
|
43 | diff -r 6563da9dcf87 -r 5ed941583260 a | |
|
44 | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 | |
|
45 | +++ b/a Thu Jan 01 00:00:00 1970 +0000 | |
|
46 | @@ -0,0 +1,1 @@ | |
|
47 | +a | |
|
48 | ||
|
49 | changeset: 0:6563da9dcf87 | |
|
50 | user: test | |
|
51 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
52 | summary: b | |
|
53 | ||
|
54 | diff -r 000000000000 -r 6563da9dcf87 b | |
|
55 | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 | |
|
56 | +++ b/b Thu Jan 01 00:00:00 1970 +0000 | |
|
57 | @@ -0,0 +1,1 @@ | |
|
58 | +b | |
|
59 | ||
|
60 | % tip - two revisions | |
|
61 | 200 Script output follows | |
|
62 | ||
|
63 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
|
64 | <html> | |
|
65 | <head> | |
|
66 | <link rel="icon" href="/static/hgicon.png" type="image/png"> | |
|
67 | <meta name="robots" content="index, nofollow" /> | |
|
68 | <link rel="stylesheet" href="/static/style.css" type="text/css" /> | |
|
69 | ||
|
70 | <title>test: a history</title> | |
|
71 | <link rel="alternate" type="application/atom+xml" | |
|
72 | href="/atom-log/tip/a" title="Atom feed for test:a"> | |
|
73 | <link rel="alternate" type="application/rss+xml" | |
|
74 | href="/rss-log/tip/a" title="RSS feed for test:a"> | |
|
75 | </head> | |
|
76 | <body> | |
|
77 | ||
|
78 | <div class="buttons"> | |
|
79 | <a href="/log">changelog</a> | |
|
80 | <a href="/shortlog">shortlog</a> | |
|
81 | <a href="/graph">graph</a> | |
|
82 | <a href="/tags">tags</a> | |
|
83 | <a href="/file/01de2d66a28d/a">file</a> | |
|
84 | <a href="/annotate/01de2d66a28d/a">annotate</a> | |
|
85 | <a type="application/rss+xml" href="/rss-log/tip/a">rss</a> | |
|
86 | <a type="application/atom+xml" href="/atom-log/tip/a" title="Atom feed for test:a">atom</a> | |
|
87 | </div> | |
|
88 | ||
|
89 | <h2>a revision history</h2> | |
|
90 | ||
|
91 | <p>navigate: <small class="navigate"><a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </small></p> | |
|
92 | ||
|
93 | <table class="logEntry parity0"> | |
|
94 | <tr> | |
|
95 | <th class="age">38 years ago:</th> | |
|
96 | <th class="firstline"><a href="/rev/01de2d66a28d">second a</a></th> | |
|
97 | </tr> | |
|
98 | <tr> | |
|
99 | <th class="revision">revision 1:</td> | |
|
100 | <td class="node"> | |
|
101 | <a href="/file/01de2d66a28d/a">01de2d66a28d</a> | |
|
102 | <a href="/diff/01de2d66a28d/a">(diff)</a> | |
|
103 | <a href="/annotate/01de2d66a28d/a">(annotate)</a> | |
|
104 | </td> | |
|
105 | </tr> | |
|
106 | ||
|
107 | <tr> | |
|
108 | <th class="author">author:</th> | |
|
109 | <td class="author">test</td> | |
|
110 | </tr> | |
|
111 | <tr> | |
|
112 | <th class="date">date:</th> | |
|
113 | <td class="date">Thu Jan 01 00:00:00 1970 +0000</td> | |
|
114 | </tr> | |
|
115 | </table> | |
|
116 | ||
|
117 | ||
|
118 | <table class="logEntry parity1"> | |
|
119 | <tr> | |
|
120 | <th class="age">38 years ago:</th> | |
|
121 | <th class="firstline"><a href="/rev/5ed941583260">first a</a></th> | |
|
122 | </tr> | |
|
123 | <tr> | |
|
124 | <th class="revision">revision 0:</td> | |
|
125 | <td class="node"> | |
|
126 | <a href="/file/5ed941583260/a">5ed941583260</a> | |
|
127 | <a href="/diff/5ed941583260/a">(diff)</a> | |
|
128 | <a href="/annotate/5ed941583260/a">(annotate)</a> | |
|
129 | </td> | |
|
130 | </tr> | |
|
131 | ||
|
132 | <tr> | |
|
133 | <th class="author">author:</th> | |
|
134 | <td class="author">test</td> | |
|
135 | </tr> | |
|
136 | <tr> | |
|
137 | <th class="date">date:</th> | |
|
138 | <td class="date">Thu Jan 01 00:00:00 1970 +0000</td> | |
|
139 | </tr> | |
|
140 | </table> | |
|
141 | ||
|
142 | ||
|
143 | ||
|
144 | ||
|
145 | ||
|
146 | <div class="logo"> | |
|
147 | <a href="http://www.selenic.com/mercurial/"> | |
|
148 | <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a> | |
|
149 | </div> | |
|
150 | ||
|
151 | </body> | |
|
152 | </html> | |
|
153 | ||
|
154 | % second version - two revisions | |
|
155 | 200 Script output follows | |
|
156 | ||
|
157 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
|
158 | <html> | |
|
159 | <head> | |
|
160 | <link rel="icon" href="/static/hgicon.png" type="image/png"> | |
|
161 | <meta name="robots" content="index, nofollow" /> | |
|
162 | <link rel="stylesheet" href="/static/style.css" type="text/css" /> | |
|
163 | ||
|
164 | <title>test: a history</title> | |
|
165 | <link rel="alternate" type="application/atom+xml" | |
|
166 | href="/atom-log/tip/a" title="Atom feed for test:a"> | |
|
167 | <link rel="alternate" type="application/rss+xml" | |
|
168 | href="/rss-log/tip/a" title="RSS feed for test:a"> | |
|
169 | </head> | |
|
170 | <body> | |
|
171 | ||
|
172 | <div class="buttons"> | |
|
173 | <a href="/log">changelog</a> | |
|
174 | <a href="/shortlog">shortlog</a> | |
|
175 | <a href="/graph">graph</a> | |
|
176 | <a href="/tags">tags</a> | |
|
177 | <a href="/file/01de2d66a28d/a">file</a> | |
|
178 | <a href="/annotate/01de2d66a28d/a">annotate</a> | |
|
179 | <a type="application/rss+xml" href="/rss-log/tip/a">rss</a> | |
|
180 | <a type="application/atom+xml" href="/atom-log/tip/a" title="Atom feed for test:a">atom</a> | |
|
181 | </div> | |
|
182 | ||
|
183 | <h2>a revision history</h2> | |
|
184 | ||
|
185 | <p>navigate: <small class="navigate"><a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </small></p> | |
|
186 | ||
|
187 | <table class="logEntry parity0"> | |
|
188 | <tr> | |
|
189 | <th class="age">38 years ago:</th> | |
|
190 | <th class="firstline"><a href="/rev/01de2d66a28d">second a</a></th> | |
|
191 | </tr> | |
|
192 | <tr> | |
|
193 | <th class="revision">revision 1:</td> | |
|
194 | <td class="node"> | |
|
195 | <a href="/file/01de2d66a28d/a">01de2d66a28d</a> | |
|
196 | <a href="/diff/01de2d66a28d/a">(diff)</a> | |
|
197 | <a href="/annotate/01de2d66a28d/a">(annotate)</a> | |
|
198 | </td> | |
|
199 | </tr> | |
|
200 | ||
|
201 | <tr> | |
|
202 | <th class="author">author:</th> | |
|
203 | <td class="author">test</td> | |
|
204 | </tr> | |
|
205 | <tr> | |
|
206 | <th class="date">date:</th> | |
|
207 | <td class="date">Thu Jan 01 00:00:00 1970 +0000</td> | |
|
208 | </tr> | |
|
209 | </table> | |
|
210 | ||
|
211 | ||
|
212 | <table class="logEntry parity1"> | |
|
213 | <tr> | |
|
214 | <th class="age">38 years ago:</th> | |
|
215 | <th class="firstline"><a href="/rev/5ed941583260">first a</a></th> | |
|
216 | </tr> | |
|
217 | <tr> | |
|
218 | <th class="revision">revision 0:</td> | |
|
219 | <td class="node"> | |
|
220 | <a href="/file/5ed941583260/a">5ed941583260</a> | |
|
221 | <a href="/diff/5ed941583260/a">(diff)</a> | |
|
222 | <a href="/annotate/5ed941583260/a">(annotate)</a> | |
|
223 | </td> | |
|
224 | </tr> | |
|
225 | ||
|
226 | <tr> | |
|
227 | <th class="author">author:</th> | |
|
228 | <td class="author">test</td> | |
|
229 | </tr> | |
|
230 | <tr> | |
|
231 | <th class="date">date:</th> | |
|
232 | <td class="date">Thu Jan 01 00:00:00 1970 +0000</td> | |
|
233 | </tr> | |
|
234 | </table> | |
|
235 | ||
|
236 | ||
|
237 | ||
|
238 | ||
|
239 | ||
|
240 | <div class="logo"> | |
|
241 | <a href="http://www.selenic.com/mercurial/"> | |
|
242 | <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a> | |
|
243 | </div> | |
|
244 | ||
|
245 | </body> | |
|
246 | </html> | |
|
247 | ||
|
248 | % first deleted - one revision | |
|
249 | 200 Script output follows | |
|
250 | ||
|
251 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
|
252 | <html> | |
|
253 | <head> | |
|
254 | <link rel="icon" href="/static/hgicon.png" type="image/png"> | |
|
255 | <meta name="robots" content="index, nofollow" /> | |
|
256 | <link rel="stylesheet" href="/static/style.css" type="text/css" /> | |
|
257 | ||
|
258 | <title>test: a history</title> | |
|
259 | <link rel="alternate" type="application/atom+xml" | |
|
260 | href="/atom-log/tip/a" title="Atom feed for test:a"> | |
|
261 | <link rel="alternate" type="application/rss+xml" | |
|
262 | href="/rss-log/tip/a" title="RSS feed for test:a"> | |
|
263 | </head> | |
|
264 | <body> | |
|
265 | ||
|
266 | <div class="buttons"> | |
|
267 | <a href="/log">changelog</a> | |
|
268 | <a href="/shortlog">shortlog</a> | |
|
269 | <a href="/graph">graph</a> | |
|
270 | <a href="/tags">tags</a> | |
|
271 | <a href="/file/5ed941583260/a">file</a> | |
|
272 | <a href="/annotate/5ed941583260/a">annotate</a> | |
|
273 | <a type="application/rss+xml" href="/rss-log/tip/a">rss</a> | |
|
274 | <a type="application/atom+xml" href="/atom-log/tip/a" title="Atom feed for test:a">atom</a> | |
|
275 | </div> | |
|
276 | ||
|
277 | <h2>a revision history</h2> | |
|
278 | ||
|
279 | <p>navigate: <small class="navigate"><a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </small></p> | |
|
280 | ||
|
281 | <table class="logEntry parity0"> | |
|
282 | <tr> | |
|
283 | <th class="age">38 years ago:</th> | |
|
284 | <th class="firstline"><a href="/rev/5ed941583260">first a</a></th> | |
|
285 | </tr> | |
|
286 | <tr> | |
|
287 | <th class="revision">revision 0:</td> | |
|
288 | <td class="node"> | |
|
289 | <a href="/file/5ed941583260/a">5ed941583260</a> | |
|
290 | <a href="/diff/5ed941583260/a">(diff)</a> | |
|
291 | <a href="/annotate/5ed941583260/a">(annotate)</a> | |
|
292 | </td> | |
|
293 | </tr> | |
|
294 | ||
|
295 | <tr> | |
|
296 | <th class="author">author:</th> | |
|
297 | <td class="author">test</td> | |
|
298 | </tr> | |
|
299 | <tr> | |
|
300 | <th class="date">date:</th> | |
|
301 | <td class="date">Thu Jan 01 00:00:00 1970 +0000</td> | |
|
302 | </tr> | |
|
303 | </table> | |
|
304 | ||
|
305 | ||
|
306 | ||
|
307 | ||
|
308 | ||
|
309 | <div class="logo"> | |
|
310 | <a href="http://www.selenic.com/mercurial/"> | |
|
311 | <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a> | |
|
312 | </div> | |
|
313 | ||
|
314 | </body> | |
|
315 | </html> | |
|
316 | ||
|
317 | % first version - one revision | |
|
318 | 200 Script output follows | |
|
319 | ||
|
320 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
|
321 | <html> | |
|
322 | <head> | |
|
323 | <link rel="icon" href="/static/hgicon.png" type="image/png"> | |
|
324 | <meta name="robots" content="index, nofollow" /> | |
|
325 | <link rel="stylesheet" href="/static/style.css" type="text/css" /> | |
|
326 | ||
|
327 | <title>test: a history</title> | |
|
328 | <link rel="alternate" type="application/atom+xml" | |
|
329 | href="/atom-log/tip/a" title="Atom feed for test:a"> | |
|
330 | <link rel="alternate" type="application/rss+xml" | |
|
331 | href="/rss-log/tip/a" title="RSS feed for test:a"> | |
|
332 | </head> | |
|
333 | <body> | |
|
334 | ||
|
335 | <div class="buttons"> | |
|
336 | <a href="/log">changelog</a> | |
|
337 | <a href="/shortlog">shortlog</a> | |
|
338 | <a href="/graph">graph</a> | |
|
339 | <a href="/tags">tags</a> | |
|
340 | <a href="/file/5ed941583260/a">file</a> | |
|
341 | <a href="/annotate/5ed941583260/a">annotate</a> | |
|
342 | <a type="application/rss+xml" href="/rss-log/tip/a">rss</a> | |
|
343 | <a type="application/atom+xml" href="/atom-log/tip/a" title="Atom feed for test:a">atom</a> | |
|
344 | </div> | |
|
345 | ||
|
346 | <h2>a revision history</h2> | |
|
347 | ||
|
348 | <p>navigate: <small class="navigate"><a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </small></p> | |
|
349 | ||
|
350 | <table class="logEntry parity0"> | |
|
351 | <tr> | |
|
352 | <th class="age">38 years ago:</th> | |
|
353 | <th class="firstline"><a href="/rev/5ed941583260">first a</a></th> | |
|
354 | </tr> | |
|
355 | <tr> | |
|
356 | <th class="revision">revision 0:</td> | |
|
357 | <td class="node"> | |
|
358 | <a href="/file/5ed941583260/a">5ed941583260</a> | |
|
359 | <a href="/diff/5ed941583260/a">(diff)</a> | |
|
360 | <a href="/annotate/5ed941583260/a">(annotate)</a> | |
|
361 | </td> | |
|
362 | </tr> | |
|
363 | ||
|
364 | <tr> | |
|
365 | <th class="author">author:</th> | |
|
366 | <td class="author">test</td> | |
|
367 | </tr> | |
|
368 | <tr> | |
|
369 | <th class="date">date:</th> | |
|
370 | <td class="date">Thu Jan 01 00:00:00 1970 +0000</td> | |
|
371 | </tr> | |
|
372 | </table> | |
|
373 | ||
|
374 | ||
|
375 | ||
|
376 | ||
|
377 | ||
|
378 | <div class="logo"> | |
|
379 | <a href="http://www.selenic.com/mercurial/"> | |
|
380 | <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a> | |
|
381 | </div> | |
|
382 | ||
|
383 | </body> | |
|
384 | </html> | |
|
385 | ||
|
386 | % before addition - error | |
|
387 | 404 Not Found | |
|
388 | ||
|
389 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
|
390 | <html> | |
|
391 | <head> | |
|
392 | <link rel="icon" href="/static/hgicon.png" type="image/png"> | |
|
393 | <meta name="robots" content="index, nofollow" /> | |
|
394 | <link rel="stylesheet" href="/static/style.css" type="text/css" /> | |
|
395 | ||
|
396 | <title>Mercurial Error</title> | |
|
397 | </head> | |
|
398 | <body> | |
|
399 | ||
|
400 | <h2>Mercurial Error</h2> | |
|
401 | ||
|
402 | <p> | |
|
403 | An error occurred while processing your request: | |
|
404 | </p> | |
|
405 | <p> | |
|
406 | a@6563da9dcf87: not found in manifest | |
|
407 | </p> | |
|
408 | ||
|
409 | ||
|
410 | <div class="logo"> | |
|
411 | <a href="http://www.selenic.com/mercurial/"> | |
|
412 | <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a> | |
|
413 | </div> | |
|
414 | ||
|
415 | </body> | |
|
416 | </html> | |
|
417 | ||
|
418 | % errors |
@@ -500,15 +500,30 def annotate(web, req, tmpl): | |||
|
500 | 500 | permissions=fctx.manifest().flags(f)) |
|
501 | 501 | |
|
502 | 502 | def filelog(web, req, tmpl): |
|
503 | fctx = webutil.filectx(web.repo, req) | |
|
504 | f = fctx.path() | |
|
505 | fl = fctx.filelog() | |
|
506 | count = len(fl) | |
|
503 | ||
|
504 | try: | |
|
505 | fctx = webutil.filectx(web.repo, req) | |
|
506 | f = fctx.path() | |
|
507 | fl = fctx.filelog() | |
|
508 | except revlog.LookupError: | |
|
509 | f = webutil.cleanpath(web.repo, req.form['file'][0]) | |
|
510 | fl = web.repo.file(f) | |
|
511 | numrevs = len(fl) | |
|
512 | if not numrevs: # file doesn't exist at all | |
|
513 | raise | |
|
514 | rev = webutil.changectx(web.repo, req).rev() | |
|
515 | first = fl.linkrev(fl.node(0)) | |
|
516 | if rev < first: # current rev is from before file existed | |
|
517 | raise | |
|
518 | frev = numrevs - 1 | |
|
519 | while fl.linkrev(fl.node(frev)) > rev: | |
|
520 | frev -= 1 | |
|
521 | fctx = web.repo.filectx(f, fl.linkrev(fl.node(frev))) | |
|
522 | ||
|
523 | count = fctx.filerev() + 1 | |
|
507 | 524 | pagelen = web.maxshortchanges |
|
508 | pos = fctx.filerev() | |
|
509 | start = max(0, pos - pagelen + 1) | |
|
510 | end = min(count, start + pagelen) | |
|
511 | pos = end - 1 | |
|
525 | start = max(0, fctx.filerev() - pagelen + 1) # first rev on this page | |
|
526 | end = min(count, start + pagelen) # last rev on this page | |
|
512 | 527 | parity = paritygen(web.stripecount, offset=start-end) |
|
513 | 528 | |
|
514 | 529 | def entries(limit=0, **map): |
@@ -535,7 +550,7 def filelog(web, req, tmpl): | |||
|
535 | 550 | yield e |
|
536 | 551 | |
|
537 | 552 | nodefunc = lambda x: fctx.filectx(fileid=x) |
|
538 |
nav = webutil.revnavgen( |
|
|
553 | nav = webutil.revnavgen(end - 1, pagelen, count, nodefunc) | |
|
539 | 554 | return tmpl("filelog", file=f, node=hex(fctx.node()), nav=nav, |
|
540 | 555 | entries=lambda **x: entries(limit=0, **x), |
|
541 | 556 | latestentry=lambda **x: entries(limit=1, **x)) |
General Comments 0
You need to be logged in to leave comments.
Login now