##// END OF EJS Templates
hgweb: add less/more links to shortlog/filelog nav
Dirkjan Ochtman -
r10246:b9d02695 default
parent child Browse files
Show More
@@ -1,698 +1,715 b''
1 1 #
2 2 # Copyright 21 May 2005 - (c) 2005 Jake Edge <jake@edge2.net>
3 3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
4 4 #
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 8 import os, mimetypes, re, cgi, copy
9 9 import webutil
10 10 from mercurial import error, archival, templater, templatefilters
11 11 from mercurial.node import short, hex
12 12 from mercurial.util import binary
13 13 from common import paritygen, staticfile, get_contact, ErrorResponse
14 14 from common import HTTP_OK, HTTP_FORBIDDEN, HTTP_NOT_FOUND
15 15 from mercurial import graphmod
16 16
17 17 # __all__ is populated with the allowed commands. Be sure to add to it if
18 18 # you're adding a new command, or the new command won't work.
19 19
20 20 __all__ = [
21 21 'log', 'rawfile', 'file', 'changelog', 'shortlog', 'changeset', 'rev',
22 22 'manifest', 'tags', 'branches', 'summary', 'filediff', 'diff', 'annotate',
23 23 'filelog', 'archive', 'static', 'graph',
24 24 ]
25 25
26 26 def log(web, req, tmpl):
27 27 if 'file' in req.form and req.form['file'][0]:
28 28 return filelog(web, req, tmpl)
29 29 else:
30 30 return changelog(web, req, tmpl)
31 31
32 32 def rawfile(web, req, tmpl):
33 33 path = webutil.cleanpath(web.repo, req.form.get('file', [''])[0])
34 34 if not path:
35 35 content = manifest(web, req, tmpl)
36 36 req.respond(HTTP_OK, web.ctype)
37 37 return content
38 38
39 39 try:
40 40 fctx = webutil.filectx(web.repo, req)
41 41 except error.LookupError, inst:
42 42 try:
43 43 content = manifest(web, req, tmpl)
44 44 req.respond(HTTP_OK, web.ctype)
45 45 return content
46 46 except ErrorResponse:
47 47 raise inst
48 48
49 49 path = fctx.path()
50 50 text = fctx.data()
51 51 mt = mimetypes.guess_type(path)[0]
52 52 if mt is None:
53 53 mt = binary(text) and 'application/octet-stream' or 'text/plain'
54 54
55 55 req.respond(HTTP_OK, mt, path, len(text))
56 56 return [text]
57 57
58 58 def _filerevision(web, tmpl, fctx):
59 59 f = fctx.path()
60 60 text = fctx.data()
61 61 parity = paritygen(web.stripecount)
62 62
63 63 if binary(text):
64 64 mt = mimetypes.guess_type(f)[0] or 'application/octet-stream'
65 65 text = '(binary:%s)' % mt
66 66
67 67 def lines():
68 68 for lineno, t in enumerate(text.splitlines(True)):
69 69 yield {"line": t,
70 70 "lineid": "l%d" % (lineno + 1),
71 71 "linenumber": "% 6d" % (lineno + 1),
72 72 "parity": parity.next()}
73 73
74 74 return tmpl("filerevision",
75 75 file=f,
76 76 path=webutil.up(f),
77 77 text=lines(),
78 78 rev=fctx.rev(),
79 79 node=hex(fctx.node()),
80 80 author=fctx.user(),
81 81 date=fctx.date(),
82 82 desc=fctx.description(),
83 83 branch=webutil.nodebranchnodefault(fctx),
84 84 parent=webutil.parents(fctx),
85 85 child=webutil.children(fctx),
86 86 rename=webutil.renamelink(fctx),
87 87 permissions=fctx.manifest().flags(f))
88 88
89 89 def file(web, req, tmpl):
90 90 path = webutil.cleanpath(web.repo, req.form.get('file', [''])[0])
91 91 if not path:
92 92 return manifest(web, req, tmpl)
93 93 try:
94 94 return _filerevision(web, tmpl, webutil.filectx(web.repo, req))
95 95 except error.LookupError, inst:
96 96 try:
97 97 return manifest(web, req, tmpl)
98 98 except ErrorResponse:
99 99 raise inst
100 100
101 101 def _search(web, tmpl, query):
102 102
103 103 def changelist(**map):
104 104 cl = web.repo.changelog
105 105 count = 0
106 106 qw = query.lower().split()
107 107
108 108 def revgen():
109 109 for i in xrange(len(cl) - 1, 0, -100):
110 110 l = []
111 111 for j in xrange(max(0, i - 100), i + 1):
112 112 ctx = web.repo[j]
113 113 l.append(ctx)
114 114 l.reverse()
115 115 for e in l:
116 116 yield e
117 117
118 118 for ctx in revgen():
119 119 miss = 0
120 120 for q in qw:
121 121 if not (q in ctx.user().lower() or
122 122 q in ctx.description().lower() or
123 123 q in " ".join(ctx.files()).lower()):
124 124 miss = 1
125 125 break
126 126 if miss:
127 127 continue
128 128
129 129 count += 1
130 130 n = ctx.node()
131 131 showtags = webutil.showtag(web.repo, tmpl, 'changelogtag', n)
132 132 files = webutil.listfilediffs(tmpl, ctx.files(), n, web.maxfiles)
133 133
134 134 yield tmpl('searchentry',
135 135 parity=parity.next(),
136 136 author=ctx.user(),
137 137 parent=webutil.parents(ctx),
138 138 child=webutil.children(ctx),
139 139 changelogtag=showtags,
140 140 desc=ctx.description(),
141 141 date=ctx.date(),
142 142 files=files,
143 143 rev=ctx.rev(),
144 144 node=hex(n),
145 145 tags=webutil.nodetagsdict(web.repo, n),
146 146 inbranch=webutil.nodeinbranch(web.repo, ctx),
147 147 branches=webutil.nodebranchdict(web.repo, ctx))
148 148
149 149 if count >= web.maxchanges:
150 150 break
151 151
152 152 cl = web.repo.changelog
153 153 parity = paritygen(web.stripecount)
154 154
155 155 return tmpl('search',
156 156 query=query,
157 157 node=hex(cl.tip()),
158 158 entries=changelist,
159 159 archives=web.archivelist("tip"))
160 160
161 161 def changelog(web, req, tmpl, shortlog = False):
162 162 if 'node' in req.form:
163 163 ctx = webutil.changectx(web.repo, req)
164 164 else:
165 165 if 'rev' in req.form:
166 166 hi = req.form['rev'][0]
167 167 else:
168 168 hi = len(web.repo) - 1
169 169 try:
170 170 ctx = web.repo[hi]
171 171 except error.RepoError:
172 172 return _search(web, tmpl, hi) # XXX redirect to 404 page?
173 173
174 174 def changelist(limit=0, **map):
175 175 l = [] # build a list in forward order for efficiency
176 176 for i in xrange(start, end):
177 177 ctx = web.repo[i]
178 178 n = ctx.node()
179 179 showtags = webutil.showtag(web.repo, tmpl, 'changelogtag', n)
180 180 files = webutil.listfilediffs(tmpl, ctx.files(), n, web.maxfiles)
181 181
182 182 l.insert(0, {"parity": parity.next(),
183 183 "author": ctx.user(),
184 184 "parent": webutil.parents(ctx, i - 1),
185 185 "child": webutil.children(ctx, i + 1),
186 186 "changelogtag": showtags,
187 187 "desc": ctx.description(),
188 188 "date": ctx.date(),
189 189 "files": files,
190 190 "rev": i,
191 191 "node": hex(n),
192 192 "tags": webutil.nodetagsdict(web.repo, n),
193 193 "inbranch": webutil.nodeinbranch(web.repo, ctx),
194 194 "branches": webutil.nodebranchdict(web.repo, ctx)
195 195 })
196 196
197 197 if limit > 0:
198 198 l = l[:limit]
199 199
200 200 for e in l:
201 201 yield e
202 202
203 maxchanges = shortlog and web.maxshortchanges or web.maxchanges
203 revcount = shortlog and web.maxshortchanges or web.maxchanges
204 if 'revcount' in req.form:
205 revcount = int(req.form.get('revcount', [revcount])[0])
206 tmpl.defaults['sessionvars']['revcount'] = revcount
207
208 lessvars = copy.copy(tmpl.defaults['sessionvars'])
209 lessvars['revcount'] = revcount / 2
210 morevars = copy.copy(tmpl.defaults['sessionvars'])
211 morevars['revcount'] = revcount * 2
212
204 213 cl = web.repo.changelog
205 214 count = len(cl)
206 215 pos = ctx.rev()
207 start = max(0, pos - maxchanges + 1)
208 end = min(count, start + maxchanges)
216 start = max(0, pos - revcount + 1)
217 end = min(count, start + revcount)
209 218 pos = end - 1
210 219 parity = paritygen(web.stripecount, offset=start-end)
211 220
212 changenav = webutil.revnavgen(pos, maxchanges, count, web.repo.changectx)
221 changenav = webutil.revnavgen(pos, revcount, count, web.repo.changectx)
213 222
214 return tmpl(shortlog and 'shortlog' or 'changelog',
215 changenav=changenav,
216 node=hex(ctx.node()),
217 rev=pos, changesets=count,
223 return tmpl(shortlog and 'shortlog' or 'changelog', changenav=changenav,
224 node=hex(ctx.node()), rev=pos, changesets=count,
218 225 entries=lambda **x: changelist(limit=0,**x),
219 226 latestentry=lambda **x: changelist(limit=1,**x),
220 archives=web.archivelist("tip"))
227 archives=web.archivelist("tip"), revcount=revcount,
228 morevars=morevars, lessvars=lessvars)
221 229
222 230 def shortlog(web, req, tmpl):
223 231 return changelog(web, req, tmpl, shortlog = True)
224 232
225 233 def changeset(web, req, tmpl):
226 234 ctx = webutil.changectx(web.repo, req)
227 235 showtags = webutil.showtag(web.repo, tmpl, 'changesettag', ctx.node())
228 236 showbranch = webutil.nodebranchnodefault(ctx)
229 237
230 238 files = []
231 239 parity = paritygen(web.stripecount)
232 240 for f in ctx.files():
233 241 template = f in ctx and 'filenodelink' or 'filenolink'
234 242 files.append(tmpl(template,
235 243 node=ctx.hex(), file=f,
236 244 parity=parity.next()))
237 245
238 246 parity = paritygen(web.stripecount)
239 247 style = web.config('web', 'style', 'paper')
240 248 if 'style' in req.form:
241 249 style = req.form['style'][0]
242 250
243 251 diffs = webutil.diffs(web.repo, tmpl, ctx, None, parity, style)
244 252 return tmpl('changeset',
245 253 diff=diffs,
246 254 rev=ctx.rev(),
247 255 node=ctx.hex(),
248 256 parent=webutil.parents(ctx),
249 257 child=webutil.children(ctx),
250 258 changesettag=showtags,
251 259 changesetbranch=showbranch,
252 260 author=ctx.user(),
253 261 desc=ctx.description(),
254 262 date=ctx.date(),
255 263 files=files,
256 264 archives=web.archivelist(ctx.hex()),
257 265 tags=webutil.nodetagsdict(web.repo, ctx.node()),
258 266 branch=webutil.nodebranchnodefault(ctx),
259 267 inbranch=webutil.nodeinbranch(web.repo, ctx),
260 268 branches=webutil.nodebranchdict(web.repo, ctx))
261 269
262 270 rev = changeset
263 271
264 272 def manifest(web, req, tmpl):
265 273 ctx = webutil.changectx(web.repo, req)
266 274 path = webutil.cleanpath(web.repo, req.form.get('file', [''])[0])
267 275 mf = ctx.manifest()
268 276 node = ctx.node()
269 277
270 278 files = {}
271 279 dirs = {}
272 280 parity = paritygen(web.stripecount)
273 281
274 282 if path and path[-1] != "/":
275 283 path += "/"
276 284 l = len(path)
277 285 abspath = "/" + path
278 286
279 287 for f, n in mf.iteritems():
280 288 if f[:l] != path:
281 289 continue
282 290 remain = f[l:]
283 291 elements = remain.split('/')
284 292 if len(elements) == 1:
285 293 files[remain] = f
286 294 else:
287 295 h = dirs # need to retain ref to dirs (root)
288 296 for elem in elements[0:-1]:
289 297 if elem not in h:
290 298 h[elem] = {}
291 299 h = h[elem]
292 300 if len(h) > 1:
293 301 break
294 302 h[None] = None # denotes files present
295 303
296 304 if mf and not files and not dirs:
297 305 raise ErrorResponse(HTTP_NOT_FOUND, 'path not found: ' + path)
298 306
299 307 def filelist(**map):
300 308 for f in sorted(files):
301 309 full = files[f]
302 310
303 311 fctx = ctx.filectx(full)
304 312 yield {"file": full,
305 313 "parity": parity.next(),
306 314 "basename": f,
307 315 "date": fctx.date(),
308 316 "size": fctx.size(),
309 317 "permissions": mf.flags(full)}
310 318
311 319 def dirlist(**map):
312 320 for d in sorted(dirs):
313 321
314 322 emptydirs = []
315 323 h = dirs[d]
316 324 while isinstance(h, dict) and len(h) == 1:
317 325 k,v = h.items()[0]
318 326 if v:
319 327 emptydirs.append(k)
320 328 h = v
321 329
322 330 path = "%s%s" % (abspath, d)
323 331 yield {"parity": parity.next(),
324 332 "path": path,
325 333 "emptydirs": "/".join(emptydirs),
326 334 "basename": d}
327 335
328 336 return tmpl("manifest",
329 337 rev=ctx.rev(),
330 338 node=hex(node),
331 339 path=abspath,
332 340 up=webutil.up(abspath),
333 341 upparity=parity.next(),
334 342 fentries=filelist,
335 343 dentries=dirlist,
336 344 archives=web.archivelist(hex(node)),
337 345 tags=webutil.nodetagsdict(web.repo, node),
338 346 inbranch=webutil.nodeinbranch(web.repo, ctx),
339 347 branches=webutil.nodebranchdict(web.repo, ctx))
340 348
341 349 def tags(web, req, tmpl):
342 350 i = web.repo.tagslist()
343 351 i.reverse()
344 352 parity = paritygen(web.stripecount)
345 353
346 354 def entries(notip=False, limit=0, **map):
347 355 count = 0
348 356 for k, n in i:
349 357 if notip and k == "tip":
350 358 continue
351 359 if limit > 0 and count >= limit:
352 360 continue
353 361 count = count + 1
354 362 yield {"parity": parity.next(),
355 363 "tag": k,
356 364 "date": web.repo[n].date(),
357 365 "node": hex(n)}
358 366
359 367 return tmpl("tags",
360 368 node=hex(web.repo.changelog.tip()),
361 369 entries=lambda **x: entries(False,0, **x),
362 370 entriesnotip=lambda **x: entries(True,0, **x),
363 371 latestentry=lambda **x: entries(True,1, **x))
364 372
365 373 def branches(web, req, tmpl):
366 374 b = web.repo.branchtags()
367 375 tips = (web.repo[n] for t, n in web.repo.branchtags().iteritems())
368 376 heads = web.repo.heads()
369 377 parity = paritygen(web.stripecount)
370 378 sortkey = lambda ctx: ('close' not in ctx.extra(), ctx.rev())
371 379
372 380 def entries(limit, **map):
373 381 count = 0
374 382 for ctx in sorted(tips, key=sortkey, reverse=True):
375 383 if limit > 0 and count >= limit:
376 384 return
377 385 count += 1
378 386 if ctx.node() not in heads:
379 387 status = 'inactive'
380 388 elif not web.repo.branchheads(ctx.branch()):
381 389 status = 'closed'
382 390 else:
383 391 status = 'open'
384 392 yield {'parity': parity.next(),
385 393 'branch': ctx.branch(),
386 394 'status': status,
387 395 'node': ctx.hex(),
388 396 'date': ctx.date()}
389 397
390 398 return tmpl('branches', node=hex(web.repo.changelog.tip()),
391 399 entries=lambda **x: entries(0, **x),
392 400 latestentry=lambda **x: entries(1, **x))
393 401
394 402 def summary(web, req, tmpl):
395 403 i = web.repo.tagslist()
396 404 i.reverse()
397 405
398 406 def tagentries(**map):
399 407 parity = paritygen(web.stripecount)
400 408 count = 0
401 409 for k, n in i:
402 410 if k == "tip": # skip tip
403 411 continue
404 412
405 413 count += 1
406 414 if count > 10: # limit to 10 tags
407 415 break
408 416
409 417 yield tmpl("tagentry",
410 418 parity=parity.next(),
411 419 tag=k,
412 420 node=hex(n),
413 421 date=web.repo[n].date())
414 422
415 423 def branches(**map):
416 424 parity = paritygen(web.stripecount)
417 425
418 426 b = web.repo.branchtags()
419 427 l = [(-web.repo.changelog.rev(n), n, t) for t, n in b.iteritems()]
420 428 for r,n,t in sorted(l):
421 429 yield {'parity': parity.next(),
422 430 'branch': t,
423 431 'node': hex(n),
424 432 'date': web.repo[n].date()}
425 433
426 434 def changelist(**map):
427 435 parity = paritygen(web.stripecount, offset=start-end)
428 436 l = [] # build a list in forward order for efficiency
429 437 for i in xrange(start, end):
430 438 ctx = web.repo[i]
431 439 n = ctx.node()
432 440 hn = hex(n)
433 441
434 442 l.insert(0, tmpl(
435 443 'shortlogentry',
436 444 parity=parity.next(),
437 445 author=ctx.user(),
438 446 desc=ctx.description(),
439 447 date=ctx.date(),
440 448 rev=i,
441 449 node=hn,
442 450 tags=webutil.nodetagsdict(web.repo, n),
443 451 inbranch=webutil.nodeinbranch(web.repo, ctx),
444 452 branches=webutil.nodebranchdict(web.repo, ctx)))
445 453
446 454 yield l
447 455
448 456 cl = web.repo.changelog
449 457 count = len(cl)
450 458 start = max(0, count - web.maxchanges)
451 459 end = min(count, start + web.maxchanges)
452 460
453 461 return tmpl("summary",
454 462 desc=web.config("web", "description", "unknown"),
455 463 owner=get_contact(web.config) or "unknown",
456 464 lastchange=cl.read(cl.tip())[2],
457 465 tags=tagentries,
458 466 branches=branches,
459 467 shortlog=changelist,
460 468 node=hex(cl.tip()),
461 469 archives=web.archivelist("tip"))
462 470
463 471 def filediff(web, req, tmpl):
464 472 fctx, ctx = None, None
465 473 try:
466 474 fctx = webutil.filectx(web.repo, req)
467 475 except LookupError:
468 476 ctx = webutil.changectx(web.repo, req)
469 477 path = webutil.cleanpath(web.repo, req.form['file'][0])
470 478 if path not in ctx.files():
471 479 raise
472 480
473 481 if fctx is not None:
474 482 n = fctx.node()
475 483 path = fctx.path()
476 484 else:
477 485 n = ctx.node()
478 486 # path already defined in except clause
479 487
480 488 parity = paritygen(web.stripecount)
481 489 style = web.config('web', 'style', 'paper')
482 490 if 'style' in req.form:
483 491 style = req.form['style'][0]
484 492
485 493 diffs = webutil.diffs(web.repo, tmpl, fctx or ctx, [path], parity, style)
486 494 rename = fctx and webutil.renamelink(fctx) or []
487 495 ctx = fctx and fctx or ctx
488 496 return tmpl("filediff",
489 497 file=path,
490 498 node=hex(n),
491 499 rev=ctx.rev(),
492 500 date=ctx.date(),
493 501 desc=ctx.description(),
494 502 author=ctx.user(),
495 503 rename=rename,
496 504 branch=webutil.nodebranchnodefault(ctx),
497 505 parent=webutil.parents(ctx),
498 506 child=webutil.children(ctx),
499 507 diff=diffs)
500 508
501 509 diff = filediff
502 510
503 511 def annotate(web, req, tmpl):
504 512 fctx = webutil.filectx(web.repo, req)
505 513 f = fctx.path()
506 514 parity = paritygen(web.stripecount)
507 515
508 516 def annotate(**map):
509 517 last = None
510 518 if binary(fctx.data()):
511 519 mt = (mimetypes.guess_type(fctx.path())[0]
512 520 or 'application/octet-stream')
513 521 lines = enumerate([((fctx.filectx(fctx.filerev()), 1),
514 522 '(binary:%s)' % mt)])
515 523 else:
516 524 lines = enumerate(fctx.annotate(follow=True, linenumber=True))
517 525 for lineno, ((f, targetline), l) in lines:
518 526 fnode = f.filenode()
519 527
520 528 if last != fnode:
521 529 last = fnode
522 530
523 531 yield {"parity": parity.next(),
524 532 "node": hex(f.node()),
525 533 "rev": f.rev(),
526 534 "author": f.user(),
527 535 "desc": f.description(),
528 536 "file": f.path(),
529 537 "targetline": targetline,
530 538 "line": l,
531 539 "lineid": "l%d" % (lineno + 1),
532 540 "linenumber": "% 6d" % (lineno + 1)}
533 541
534 542 return tmpl("fileannotate",
535 543 file=f,
536 544 annotate=annotate,
537 545 path=webutil.up(f),
538 546 rev=fctx.rev(),
539 547 node=hex(fctx.node()),
540 548 author=fctx.user(),
541 549 date=fctx.date(),
542 550 desc=fctx.description(),
543 551 rename=webutil.renamelink(fctx),
544 552 branch=webutil.nodebranchnodefault(fctx),
545 553 parent=webutil.parents(fctx),
546 554 child=webutil.children(fctx),
547 555 permissions=fctx.manifest().flags(f))
548 556
549 557 def filelog(web, req, tmpl):
550 558
551 559 try:
552 560 fctx = webutil.filectx(web.repo, req)
553 561 f = fctx.path()
554 562 fl = fctx.filelog()
555 563 except error.LookupError:
556 564 f = webutil.cleanpath(web.repo, req.form['file'][0])
557 565 fl = web.repo.file(f)
558 566 numrevs = len(fl)
559 567 if not numrevs: # file doesn't exist at all
560 568 raise
561 569 rev = webutil.changectx(web.repo, req).rev()
562 570 first = fl.linkrev(0)
563 571 if rev < first: # current rev is from before file existed
564 572 raise
565 573 frev = numrevs - 1
566 574 while fl.linkrev(frev) > rev:
567 575 frev -= 1
568 576 fctx = web.repo.filectx(f, fl.linkrev(frev))
569 577
578 revcount = web.maxshortchanges
579 if 'revcount' in req.form:
580 revcount = int(req.form.get('revcount', [revcount])[0])
581 tmpl.defaults['sessionvars']['revcount'] = revcount
582
583 lessvars = copy.copy(tmpl.defaults['sessionvars'])
584 lessvars['revcount'] = revcount / 2
585 morevars = copy.copy(tmpl.defaults['sessionvars'])
586 morevars['revcount'] = revcount * 2
587
570 588 count = fctx.filerev() + 1
571 pagelen = web.maxshortchanges
572 start = max(0, fctx.filerev() - pagelen + 1) # first rev on this page
573 end = min(count, start + pagelen) # last rev on this page
589 start = max(0, fctx.filerev() - revcount + 1) # first rev on this page
590 end = min(count, start + revcount) # last rev on this page
574 591 parity = paritygen(web.stripecount, offset=start-end)
575 592
576 593 def entries(limit=0, **map):
577 594 l = []
578 595
579 596 repo = web.repo
580 597 for i in xrange(start, end):
581 598 iterfctx = fctx.filectx(i)
582 599
583 600 l.insert(0, {"parity": parity.next(),
584 601 "filerev": i,
585 602 "file": f,
586 603 "node": hex(iterfctx.node()),
587 604 "author": iterfctx.user(),
588 605 "date": iterfctx.date(),
589 606 "rename": webutil.renamelink(iterfctx),
590 607 "parent": webutil.parents(iterfctx),
591 608 "child": webutil.children(iterfctx),
592 609 "desc": iterfctx.description(),
593 610 "tags": webutil.nodetagsdict(repo, iterfctx.node()),
594 611 "branch": webutil.nodebranchnodefault(iterfctx),
595 612 "inbranch": webutil.nodeinbranch(repo, iterfctx),
596 613 "branches": webutil.nodebranchdict(repo, iterfctx)})
597 614
598 615 if limit > 0:
599 616 l = l[:limit]
600 617
601 618 for e in l:
602 619 yield e
603 620
604 621 nodefunc = lambda x: fctx.filectx(fileid=x)
605 nav = webutil.revnavgen(end - 1, pagelen, count, nodefunc)
622 nav = webutil.revnavgen(end - 1, revcount, count, nodefunc)
606 623 return tmpl("filelog", file=f, node=hex(fctx.node()), nav=nav,
607 624 entries=lambda **x: entries(limit=0, **x),
608 latestentry=lambda **x: entries(limit=1, **x))
609
625 latestentry=lambda **x: entries(limit=1, **x),
626 revcount=revcount, morevars=morevars, lessvars=lessvars)
610 627
611 628 def archive(web, req, tmpl):
612 629 type_ = req.form.get('type', [None])[0]
613 630 allowed = web.configlist("web", "allow_archive")
614 631 key = req.form['node'][0]
615 632
616 633 if type_ not in web.archives:
617 634 msg = 'Unsupported archive type: %s' % type_
618 635 raise ErrorResponse(HTTP_NOT_FOUND, msg)
619 636
620 637 if not ((type_ in allowed or
621 638 web.configbool("web", "allow" + type_, False))):
622 639 msg = 'Archive type not allowed: %s' % type_
623 640 raise ErrorResponse(HTTP_FORBIDDEN, msg)
624 641
625 642 reponame = re.sub(r"\W+", "-", os.path.basename(web.reponame))
626 643 cnode = web.repo.lookup(key)
627 644 arch_version = key
628 645 if cnode == key or key == 'tip':
629 646 arch_version = short(cnode)
630 647 name = "%s-%s" % (reponame, arch_version)
631 648 mimetype, artype, extension, encoding = web.archive_specs[type_]
632 649 headers = [
633 650 ('Content-Type', mimetype),
634 651 ('Content-Disposition', 'attachment; filename=%s%s' % (name, extension))
635 652 ]
636 653 if encoding:
637 654 headers.append(('Content-Encoding', encoding))
638 655 req.header(headers)
639 656 req.respond(HTTP_OK)
640 657 archival.archive(web.repo, req, cnode, artype, prefix=name)
641 658 return []
642 659
643 660
644 661 def static(web, req, tmpl):
645 662 fname = req.form['file'][0]
646 663 # a repo owner may set web.static in .hg/hgrc to get any file
647 664 # readable by the user running the CGI script
648 665 static = web.config("web", "static", None, untrusted=False)
649 666 if not static:
650 667 tp = web.templatepath or templater.templatepath()
651 668 if isinstance(tp, str):
652 669 tp = [tp]
653 670 static = [os.path.join(p, 'static') for p in tp]
654 671 return [staticfile(static, fname, req)]
655 672
656 673 def graph(web, req, tmpl):
657 674
658 675 rev = webutil.changectx(web.repo, req).rev()
659 676 bg_height = 39
660 677 revcount = web.maxshortchanges
661 678 if 'revcount' in req.form:
662 679 revcount = int(req.form.get('revcount', [revcount])[0])
663 680 tmpl.defaults['sessionvars']['revcount'] = revcount
664 681
665 682 lessvars = copy.copy(tmpl.defaults['sessionvars'])
666 683 lessvars['revcount'] = revcount / 2
667 684 morevars = copy.copy(tmpl.defaults['sessionvars'])
668 685 morevars['revcount'] = revcount * 2
669 686
670 687 max_rev = len(web.repo) - 1
671 688 revcount = min(max_rev, revcount)
672 689 revnode = web.repo.changelog.node(rev)
673 690 revnode_hex = hex(revnode)
674 691 uprev = min(max_rev, rev + revcount)
675 692 downrev = max(0, rev - revcount)
676 693 count = len(web.repo)
677 694 changenav = webutil.revnavgen(rev, revcount, count, web.repo.changectx)
678 695
679 696 dag = graphmod.revisions(web.repo, rev, downrev)
680 697 tree = list(graphmod.colored(dag))
681 698 canvasheight = (len(tree) + 1) * bg_height - 27;
682 699 data = []
683 700 for (id, type, ctx, vtx, edges) in tree:
684 701 if type != graphmod.CHANGESET:
685 702 continue
686 703 node = short(ctx.node())
687 704 age = templatefilters.age(ctx.date())
688 705 desc = templatefilters.firstline(ctx.description())
689 706 desc = cgi.escape(templatefilters.nonempty(desc))
690 707 user = cgi.escape(templatefilters.person(ctx.user()))
691 708 branch = ctx.branch()
692 709 branch = branch, web.repo.branchtags().get(branch) == ctx.node()
693 710 data.append((node, vtx, edges, desc, user, age, branch, ctx.tags()))
694 711
695 712 return tmpl('graph', rev=rev, revcount=revcount, uprev=uprev,
696 713 lessvars=lessvars, morevars=morevars, downrev=downrev,
697 714 canvasheight=canvasheight, jsdata=data, bg_height=bg_height,
698 715 node=revnode_hex, changenav=changenav)
@@ -1,60 +1,69 b''
1 1 {header}
2 2 <title>{repo|escape}: {file|escape} history</title>
3 3 <link rel="alternate" type="application/atom+xml"
4 4 href="{url}atom-log/tip/{file|urlescape}" title="Atom feed for {repo|escape}:{file}" />
5 5 <link rel="alternate" type="application/rss+xml"
6 6 href="{url}rss-log/tip/{file|urlescape}" title="RSS feed for {repo|escape}:{file}" />
7 7 </head>
8 8 <body>
9 9
10 10 <div class="container">
11 11 <div class="menu">
12 12 <div class="logo">
13 13 <a href="http://mercurial.selenic.com/">
14 14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
15 15 </div>
16 16 <ul>
17 17 <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
18 18 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
19 19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
20 20 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
21 21 </ul>
22 22 <ul>
23 23 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
24 24 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
25 25 </ul>
26 26 <ul>
27 27 <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
28 28 <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
29 29 <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
30 30 <li class="active">file log</li>
31 31 <li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
32 32 </ul>
33 33 </div>
34 34
35 35 <div class="main">
36 36 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
37 37 <h3>log {file|escape}</h3>
38 38
39 39 <form class="search" action="{url}log">
40 40 {sessionvars%hiddenformentry}
41 41 <p><input name="rev" id="search1" type="text" size="30" /></p>
42 42 <div id="hint">find changesets by author, revision,
43 43 files, or words in the commit message</div>
44 44 </form>
45 45
46 <div class="navigate">{nav%filenaventry}</div>
46 <div class="navigate">
47 <a href="{url}log/{node|short}/{file|urlescape}{lessvars%urlparameter}">less</a>
48 <a href="{url}log/{node|short}/{file|urlescape}{morevars%urlparameter}">more</a>
49 | {nav%filenaventry}</div>
47 50
48 51 <table class="bigtable">
49 52 <tr>
50 53 <th class="age">age</th>
51 54 <th class="author">author</th>
52 55 <th class="description">description</th>
53 56 </tr>
54 57 {entries%filelogentry}
55 58 </table>
56 59
60 <div class="navigate">
61 <a href="{url}log/{node|short}/{file|urlescape}{lessvars%urlparameter}">less</a>
62 <a href="{url}log/{node|short}/{file|urlescape}{morevars%urlparameter}">more</a>
63 | {nav%filenaventry}
64 </div>
65
57 66 </div>
58 67 </div>
59 68
60 69 {footer}
@@ -1,57 +1,66 b''
1 1 {header}
2 2 <title>{repo|escape}: log</title>
3 3 <link rel="alternate" type="application/atom+xml"
4 4 href="{url}atom-log" title="Atom feed for {repo|escape}" />
5 5 <link rel="alternate" type="application/rss+xml"
6 6 href="{url}rss-log" title="RSS feed for {repo|escape}" />
7 7 </head>
8 8 <body>
9 9
10 10 <div class="container">
11 11 <div class="menu">
12 12 <div class="logo">
13 13 <a href="http://mercurial.selenic.com/">
14 14 <img src="{staticurl}hglogo.png" alt="mercurial" /></a>
15 15 </div>
16 16 <ul>
17 17 <li class="active">log</li>
18 18 <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
19 19 <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
20 20 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
21 21 </ul>
22 22 <ul>
23 23 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
24 24 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
25 25 </ul>
26 26 <ul>
27 27 {archives%archiveentry}
28 28 </ul>
29 29 </div>
30 30
31 31 <div class="main">
32 32 <h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
33 33 <h3>log</h3>
34 34
35 35 <form class="search" action="{url}log">
36 36 {sessionvars%hiddenformentry}
37 37 <p><input name="rev" id="search1" type="text" size="30" /></p>
38 38 <div id="hint">find changesets by author, revision,
39 39 files, or words in the commit message</div>
40 40 </form>
41 41
42 <div class="navigate">rev {rev}: {changenav%navshortentry}</div>
42 <div class="navigate">
43 <a href="{url}shortlog/{rev}{lessvars%urlparameter}">less</a>
44 <a href="{url}shortlog/{rev}{morevars%urlparameter}">more</a>
45 | rev {rev}: {changenav%navshortentry}
46 </div>
43 47
44 48 <table class="bigtable">
45 49 <tr>
46 50 <th class="age">age</th>
47 51 <th class="author">author</th>
48 52 <th class="description">description</th>
49 53 </tr>
50 54 {entries%shortlogentry}
51 55 </table>
52 56
53 <div class="navigate">rev {rev}: {changenav%navshortentry}</div>
57 <div class="navigate">
58 <a href="{url}shortlog/{rev}{lessvars%urlparameter}">less</a>
59 <a href="{url}shortlog/{rev}{morevars%urlparameter}">more</a>
60 | rev {rev}: {changenav%navshortentry}
61 </div>
62
54 63 </div>
55 64 </div>
56 65
57 66 {footer}
@@ -1,906 +1,915 b''
1 1 % Set up the repo
2 2 adding da/foo
3 3 adding foo
4 4 marked working directory as branch stable
5 5 % Logs and changes
6 6 200 Script output follows
7 7
8 8 <?xml version="1.0" encoding="ascii"?>
9 9 <feed xmlns="http://127.0.0.1/2005/Atom">
10 10 <!-- Changelog -->
11 11 <id>http://127.0.0.1/</id>
12 12 <link rel="self" href="http://127.0.0.1/atom-log"/>
13 13 <link rel="alternate" href="http://127.0.0.1/"/>
14 14 <title>test Changelog</title>
15 15 <updated>1970-01-01T00:00:00+00:00</updated>
16 16
17 17 <entry>
18 18 <title>branch</title>
19 19 <id>http://127.0.0.1/#changeset-1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe</id>
20 20 <link href="http://127.0.0.1/rev/1d22e65f027e"/>
21 21 <author>
22 22 <name>test</name>
23 23 <email>&#116;&#101;&#115;&#116;</email>
24 24 </author>
25 25 <updated>1970-01-01T00:00:00+00:00</updated>
26 26 <published>1970-01-01T00:00:00+00:00</published>
27 27 <content type="xhtml">
28 28 <div xmlns="http://127.0.0.1/1999/xhtml">
29 29 <pre xml:space="preserve">branch</pre>
30 30 </div>
31 31 </content>
32 32 </entry>
33 33 <entry>
34 34 <title>Added tag 1.0 for changeset 2ef0ac749a14</title>
35 35 <id>http://127.0.0.1/#changeset-a4f92ed23982be056b9852de5dfe873eaac7f0de</id>
36 36 <link href="http://127.0.0.1/rev/a4f92ed23982"/>
37 37 <author>
38 38 <name>test</name>
39 39 <email>&#116;&#101;&#115;&#116;</email>
40 40 </author>
41 41 <updated>1970-01-01T00:00:00+00:00</updated>
42 42 <published>1970-01-01T00:00:00+00:00</published>
43 43 <content type="xhtml">
44 44 <div xmlns="http://127.0.0.1/1999/xhtml">
45 45 <pre xml:space="preserve">Added tag 1.0 for changeset 2ef0ac749a14</pre>
46 46 </div>
47 47 </content>
48 48 </entry>
49 49 <entry>
50 50 <title>base</title>
51 51 <id>http://127.0.0.1/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id>
52 52 <link href="http://127.0.0.1/rev/2ef0ac749a14"/>
53 53 <author>
54 54 <name>test</name>
55 55 <email>&#116;&#101;&#115;&#116;</email>
56 56 </author>
57 57 <updated>1970-01-01T00:00:00+00:00</updated>
58 58 <published>1970-01-01T00:00:00+00:00</published>
59 59 <content type="xhtml">
60 60 <div xmlns="http://127.0.0.1/1999/xhtml">
61 61 <pre xml:space="preserve">base</pre>
62 62 </div>
63 63 </content>
64 64 </entry>
65 65
66 66 </feed>
67 67 200 Script output follows
68 68
69 69 <?xml version="1.0" encoding="ascii"?>
70 70 <feed xmlns="http://127.0.0.1/2005/Atom">
71 71 <!-- Changelog -->
72 72 <id>http://127.0.0.1/</id>
73 73 <link rel="self" href="http://127.0.0.1/atom-log"/>
74 74 <link rel="alternate" href="http://127.0.0.1/"/>
75 75 <title>test Changelog</title>
76 76 <updated>1970-01-01T00:00:00+00:00</updated>
77 77
78 78 <entry>
79 79 <title>branch</title>
80 80 <id>http://127.0.0.1/#changeset-1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe</id>
81 81 <link href="http://127.0.0.1/rev/1d22e65f027e"/>
82 82 <author>
83 83 <name>test</name>
84 84 <email>&#116;&#101;&#115;&#116;</email>
85 85 </author>
86 86 <updated>1970-01-01T00:00:00+00:00</updated>
87 87 <published>1970-01-01T00:00:00+00:00</published>
88 88 <content type="xhtml">
89 89 <div xmlns="http://127.0.0.1/1999/xhtml">
90 90 <pre xml:space="preserve">branch</pre>
91 91 </div>
92 92 </content>
93 93 </entry>
94 94 <entry>
95 95 <title>Added tag 1.0 for changeset 2ef0ac749a14</title>
96 96 <id>http://127.0.0.1/#changeset-a4f92ed23982be056b9852de5dfe873eaac7f0de</id>
97 97 <link href="http://127.0.0.1/rev/a4f92ed23982"/>
98 98 <author>
99 99 <name>test</name>
100 100 <email>&#116;&#101;&#115;&#116;</email>
101 101 </author>
102 102 <updated>1970-01-01T00:00:00+00:00</updated>
103 103 <published>1970-01-01T00:00:00+00:00</published>
104 104 <content type="xhtml">
105 105 <div xmlns="http://127.0.0.1/1999/xhtml">
106 106 <pre xml:space="preserve">Added tag 1.0 for changeset 2ef0ac749a14</pre>
107 107 </div>
108 108 </content>
109 109 </entry>
110 110 <entry>
111 111 <title>base</title>
112 112 <id>http://127.0.0.1/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id>
113 113 <link href="http://127.0.0.1/rev/2ef0ac749a14"/>
114 114 <author>
115 115 <name>test</name>
116 116 <email>&#116;&#101;&#115;&#116;</email>
117 117 </author>
118 118 <updated>1970-01-01T00:00:00+00:00</updated>
119 119 <published>1970-01-01T00:00:00+00:00</published>
120 120 <content type="xhtml">
121 121 <div xmlns="http://127.0.0.1/1999/xhtml">
122 122 <pre xml:space="preserve">base</pre>
123 123 </div>
124 124 </content>
125 125 </entry>
126 126
127 127 </feed>
128 128 200 Script output follows
129 129
130 130 <?xml version="1.0" encoding="ascii"?>
131 131 <feed xmlns="http://127.0.0.1/2005/Atom">
132 132 <id>http://127.0.0.1/atom-log/tip/foo</id>
133 133 <link rel="self" href="http://127.0.0.1/atom-log/tip/foo"/>
134 134 <title>test: foo history</title>
135 135 <updated>1970-01-01T00:00:00+00:00</updated>
136 136
137 137 <entry>
138 138 <title>base</title>
139 139 <id>http://127.0.0.1/#changeset-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id>
140 140 <link href="http://127.0.0.1/rev/2ef0ac749a14"/>
141 141 <author>
142 142 <name>test</name>
143 143 <email>&#116;&#101;&#115;&#116;</email>
144 144 </author>
145 145 <updated>1970-01-01T00:00:00+00:00</updated>
146 146 <published>1970-01-01T00:00:00+00:00</published>
147 147 <content type="xhtml">
148 148 <div xmlns="http://127.0.0.1/1999/xhtml">
149 149 <pre xml:space="preserve">base</pre>
150 150 </div>
151 151 </content>
152 152 </entry>
153 153
154 154 </feed>
155 155 200 Script output follows
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
164 164 <title>test: log</title>
165 165 <link rel="alternate" type="application/atom+xml"
166 166 href="/atom-log" title="Atom feed for test" />
167 167 <link rel="alternate" type="application/rss+xml"
168 168 href="/rss-log" title="RSS feed for test" />
169 169 </head>
170 170 <body>
171 171
172 172 <div class="container">
173 173 <div class="menu">
174 174 <div class="logo">
175 175 <a href="http://mercurial.selenic.com/">
176 176 <img src="/static/hglogo.png" alt="mercurial" /></a>
177 177 </div>
178 178 <ul>
179 179 <li class="active">log</li>
180 180 <li><a href="/graph/1d22e65f027e">graph</a></li>
181 181 <li><a href="/tags">tags</a></li>
182 182 <li><a href="/branches">branches</a></li>
183 183 </ul>
184 184 <ul>
185 185 <li><a href="/rev/1d22e65f027e">changeset</a></li>
186 186 <li><a href="/file/1d22e65f027e">browse</a></li>
187 187 </ul>
188 188 <ul>
189 189
190 190 </ul>
191 191 </div>
192 192
193 193 <div class="main">
194 194 <h2><a href="/">test</a></h2>
195 195 <h3>log</h3>
196 196
197 197 <form class="search" action="/log">
198 198
199 199 <p><input name="rev" id="search1" type="text" size="30" /></p>
200 200 <div id="hint">find changesets by author, revision,
201 201 files, or words in the commit message</div>
202 202 </form>
203 203
204 <div class="navigate">rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a> </div>
204 <div class="navigate">
205 <a href="/shortlog/2?revcount=30">less</a>
206 <a href="/shortlog/2?revcount=120">more</a>
207 | rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a>
208 </div>
205 209
206 210 <table class="bigtable">
207 211 <tr>
208 212 <th class="age">age</th>
209 213 <th class="author">author</th>
210 214 <th class="description">description</th>
211 215 </tr>
212 216 <tr class="parity0">
213 217 <td class="age">1970-01-01</td>
214 218 <td class="author">test</td>
215 219 <td class="description"><a href="/rev/1d22e65f027e">branch</a><span class="branchhead">stable</span> <span class="tag">tip</span> </td>
216 220 </tr>
217 221 <tr class="parity1">
218 222 <td class="age">1970-01-01</td>
219 223 <td class="author">test</td>
220 224 <td class="description"><a href="/rev/a4f92ed23982">Added tag 1.0 for changeset 2ef0ac749a14</a><span class="branchhead">default</span> </td>
221 225 </tr>
222 226 <tr class="parity0">
223 227 <td class="age">1970-01-01</td>
224 228 <td class="author">test</td>
225 229 <td class="description"><a href="/rev/2ef0ac749a14">base</a><span class="tag">1.0</span> </td>
226 230 </tr>
227 231
228 232 </table>
229 233
230 <div class="navigate">rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a> </div>
234 <div class="navigate">
235 <a href="/shortlog/2?revcount=30">less</a>
236 <a href="/shortlog/2?revcount=120">more</a>
237 | rev 2: <a href="/shortlog/2ef0ac749a14">(0)</a> <a href="/shortlog/tip">tip</a>
238 </div>
239
231 240 </div>
232 241 </div>
233 242
234 243
235 244
236 245 </body>
237 246 </html>
238 247
239 248 200 Script output follows
240 249
241 250 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
242 251 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
243 252 <head>
244 253 <link rel="icon" href="/static/hgicon.png" type="image/png" />
245 254 <meta name="robots" content="index, nofollow" />
246 255 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
247 256
248 257 <title>test: 2ef0ac749a14</title>
249 258 </head>
250 259 <body>
251 260 <div class="container">
252 261 <div class="menu">
253 262 <div class="logo">
254 263 <a href="http://mercurial.selenic.com/">
255 264 <img src="/static/hglogo.png" alt="mercurial" /></a>
256 265 </div>
257 266 <ul>
258 267 <li><a href="/shortlog/2ef0ac749a14">log</a></li>
259 268 <li><a href="/graph/2ef0ac749a14">graph</a></li>
260 269 <li><a href="/tags">tags</a></li>
261 270 <li><a href="/branches">branches</a></li>
262 271 </ul>
263 272 <ul>
264 273 <li class="active">changeset</li>
265 274 <li><a href="/raw-rev/2ef0ac749a14">raw</a></li>
266 275 <li><a href="/file/2ef0ac749a14">browse</a></li>
267 276 </ul>
268 277 <ul>
269 278
270 279 </ul>
271 280 </div>
272 281
273 282 <div class="main">
274 283
275 284 <h2><a href="/">test</a></h2>
276 285 <h3>changeset 0:2ef0ac749a14 <span class="tag">1.0</span> </h3>
277 286
278 287 <form class="search" action="/log">
279 288
280 289 <p><input name="rev" id="search1" type="text" size="30" /></p>
281 290 <div id="hint">find changesets by author, revision,
282 291 files, or words in the commit message</div>
283 292 </form>
284 293
285 294 <div class="description">base</div>
286 295
287 296 <table id="changesetEntry">
288 297 <tr>
289 298 <th class="author">author</th>
290 299 <td class="author">&#116;&#101;&#115;&#116;</td>
291 300 </tr>
292 301 <tr>
293 302 <th class="date">date</th>
294 303 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td></tr>
295 304 <tr>
296 305 <th class="author">parents</th>
297 306 <td class="author"></td>
298 307 </tr>
299 308 <tr>
300 309 <th class="author">children</th>
301 310 <td class="author"> <a href="/rev/a4f92ed23982">a4f92ed23982</a></td>
302 311 </tr>
303 312 <tr>
304 313 <th class="files">files</th>
305 314 <td class="files"><a href="/file/2ef0ac749a14/da/foo">da/foo</a> <a href="/file/2ef0ac749a14/foo">foo</a> </td>
306 315 </tr>
307 316 </table>
308 317
309 318 <div class="overflow">
310 319 <div class="sourcefirst"> line diff</div>
311 320
312 321 <div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1"> 1.1</a> <span class="minusline">--- /dev/null Thu Jan 01 00:00:00 1970 +0000
313 322 </span><a href="#l1.2" id="l1.2"> 1.2</a> <span class="plusline">+++ b/da/foo Thu Jan 01 00:00:00 1970 +0000
314 323 </span><a href="#l1.3" id="l1.3"> 1.3</a> <span class="atline">@@ -0,0 +1,1 @@
315 324 </span><a href="#l1.4" id="l1.4"> 1.4</a> <span class="plusline">+foo
316 325 </span></pre></div><div class="source bottomline parity1"><pre><a href="#l2.1" id="l2.1"> 2.1</a> <span class="minusline">--- /dev/null Thu Jan 01 00:00:00 1970 +0000
317 326 </span><a href="#l2.2" id="l2.2"> 2.2</a> <span class="plusline">+++ b/foo Thu Jan 01 00:00:00 1970 +0000
318 327 </span><a href="#l2.3" id="l2.3"> 2.3</a> <span class="atline">@@ -0,0 +1,1 @@
319 328 </span><a href="#l2.4" id="l2.4"> 2.4</a> <span class="plusline">+foo
320 329 </span></pre></div>
321 330 </div>
322 331
323 332 </div>
324 333 </div>
325 334
326 335
327 336 </body>
328 337 </html>
329 338
330 339 200 Script output follows
331 340
332 341
333 342 # HG changeset patch
334 343 # User test
335 344 # Date 0 0
336 345 # Node ID a4f92ed23982be056b9852de5dfe873eaac7f0de
337 346 # Parent 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
338 347 Added tag 1.0 for changeset 2ef0ac749a14
339 348
340 349 diff -r 2ef0ac749a14 -r a4f92ed23982 .hgtags
341 350 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
342 351 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
343 352 @@ -0,0 +1,1 @@
344 353 +2ef0ac749a14e4f57a5a822464a0902c6f7f448f 1.0
345 354
346 355 % File-related
347 356 200 Script output follows
348 357
349 358 foo
350 359 200 Script output follows
351 360
352 361
353 362 test@0: foo
354 363
355 364
356 365
357 366
358 367 200 Script output follows
359 368
360 369
361 370 drwxr-xr-x da
362 371 -rw-r--r-- 45 .hgtags
363 372 -rw-r--r-- 4 foo
364 373
365 374
366 375 200 Script output follows
367 376
368 377 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
369 378 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
370 379 <head>
371 380 <link rel="icon" href="/static/hgicon.png" type="image/png" />
372 381 <meta name="robots" content="index, nofollow" />
373 382 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
374 383
375 384 <title>test: a4f92ed23982 foo</title>
376 385 </head>
377 386 <body>
378 387
379 388 <div class="container">
380 389 <div class="menu">
381 390 <div class="logo">
382 391 <a href="http://mercurial.selenic.com/">
383 392 <img src="/static/hglogo.png" alt="mercurial" /></a>
384 393 </div>
385 394 <ul>
386 395 <li><a href="/shortlog/a4f92ed23982">log</a></li>
387 396 <li><a href="/graph/a4f92ed23982">graph</a></li>
388 397 <li><a href="/tags">tags</a></li>
389 398 <li><a href="/branches">branches</a></li>
390 399 </ul>
391 400 <ul>
392 401 <li><a href="/rev/a4f92ed23982">changeset</a></li>
393 402 <li><a href="/file/a4f92ed23982/">browse</a></li>
394 403 </ul>
395 404 <ul>
396 405 <li class="active">file</li>
397 406 <li><a href="/file/tip/foo">latest</a></li>
398 407 <li><a href="/diff/a4f92ed23982/foo">diff</a></li>
399 408 <li><a href="/annotate/a4f92ed23982/foo">annotate</a></li>
400 409 <li><a href="/log/a4f92ed23982/foo">file log</a></li>
401 410 <li><a href="/raw-file/a4f92ed23982/foo">raw</a></li>
402 411 </ul>
403 412 </div>
404 413
405 414 <div class="main">
406 415 <h2><a href="/">test</a></h2>
407 416 <h3>view foo @ 1:a4f92ed23982</h3>
408 417
409 418 <form class="search" action="/log">
410 419
411 420 <p><input name="rev" id="search1" type="text" size="30" /></p>
412 421 <div id="hint">find changesets by author, revision,
413 422 files, or words in the commit message</div>
414 423 </form>
415 424
416 425 <div class="description">Added tag 1.0 for changeset 2ef0ac749a14</div>
417 426
418 427 <table id="changesetEntry">
419 428 <tr>
420 429 <th class="author">author</th>
421 430 <td class="author">&#116;&#101;&#115;&#116;</td>
422 431 </tr>
423 432 <tr>
424 433 <th class="date">date</th>
425 434 <td class="date">Thu Jan 01 00:00:00 1970 +0000 (1970-01-01)</td>
426 435 </tr>
427 436 <tr>
428 437 <th class="author">parents</th>
429 438 <td class="author"></td>
430 439 </tr>
431 440 <tr>
432 441 <th class="author">children</th>
433 442 <td class="author"><a href="/file/1d22e65f027e/foo">1d22e65f027e</a> </td>
434 443 </tr>
435 444
436 445 </table>
437 446
438 447 <div class="overflow">
439 448 <div class="sourcefirst"> line source</div>
440 449
441 450 <div class="parity0 source"><a href="#l1" id="l1"> 1</a> foo
442 451 </div>
443 452 <div class="sourcelast"></div>
444 453 </div>
445 454 </div>
446 455 </div>
447 456
448 457
449 458
450 459 </body>
451 460 </html>
452 461
453 462 200 Script output follows
454 463
455 464
456 465 diff -r 000000000000 -r a4f92ed23982 foo
457 466 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
458 467 +++ b/foo Thu Jan 01 00:00:00 1970 +0000
459 468 @@ -0,0 +1,1 @@
460 469 +foo
461 470
462 471
463 472
464 473
465 474 % Overviews
466 475 200 Script output follows
467 476
468 477 tip 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
469 478 1.0 2ef0ac749a14e4f57a5a822464a0902c6f7f448f
470 479 200 Script output follows
471 480
472 481 stable 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe open
473 482 default a4f92ed23982be056b9852de5dfe873eaac7f0de inactive
474 483 200 Script output follows
475 484
476 485 <?xml version="1.0" encoding="ascii"?>
477 486 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
478 487 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
479 488 <head>
480 489 <link rel="icon" href="/static/hgicon.png" type="image/png" />
481 490 <meta name="robots" content="index, nofollow"/>
482 491 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
483 492
484 493
485 494 <title>test: Summary</title>
486 495 <link rel="alternate" type="application/atom+xml"
487 496 href="/atom-log" title="Atom feed for test"/>
488 497 <link rel="alternate" type="application/rss+xml"
489 498 href="/rss-log" title="RSS feed for test"/>
490 499 </head>
491 500 <body>
492 501
493 502 <div class="page_header">
494 503 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / summary
495 504
496 505 <form action="/log">
497 506 <input type="hidden" name="style" value="gitweb" />
498 507 <div class="search">
499 508 <input type="text" name="rev" />
500 509 </div>
501 510 </form>
502 511 </div>
503 512
504 513 <div class="page_nav">
505 514 summary |
506 515 <a href="/shortlog?style=gitweb">shortlog</a> |
507 516 <a href="/log?style=gitweb">changelog</a> |
508 517 <a href="/graph?style=gitweb">graph</a> |
509 518 <a href="/tags?style=gitweb">tags</a> |
510 519 <a href="/branches?style=gitweb">branches</a> |
511 520 <a href="/file/1d22e65f027e?style=gitweb">files</a>
512 521 <br/>
513 522 </div>
514 523
515 524 <div class="title">&nbsp;</div>
516 525 <table cellspacing="0">
517 526 <tr><td>description</td><td>unknown</td></tr>
518 527 <tr><td>owner</td><td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td></tr>
519 528 <tr><td>last change</td><td>Thu, 01 Jan 1970 00:00:00 +0000</td></tr>
520 529 </table>
521 530
522 531 <div><a class="title" href="/shortlog?style=gitweb">changes</a></div>
523 532 <table cellspacing="0">
524 533
525 534 <tr class="parity0">
526 535 <td class="age"><i>1970-01-01</i></td>
527 536 <td><i>test</i></td>
528 537 <td>
529 538 <a class="list" href="/rev/1d22e65f027e?style=gitweb">
530 539 <b>branch</b>
531 540 <span class="logtags"><span class="branchtag" title="stable">stable</span> <span class="tagtag" title="tip">tip</span> </span>
532 541 </a>
533 542 </td>
534 543 <td class="link" nowrap>
535 544 <a href="/rev/1d22e65f027e?style=gitweb">changeset</a> |
536 545 <a href="/file/1d22e65f027e?style=gitweb">files</a>
537 546 </td>
538 547 </tr>
539 548 <tr class="parity1">
540 549 <td class="age"><i>1970-01-01</i></td>
541 550 <td><i>test</i></td>
542 551 <td>
543 552 <a class="list" href="/rev/a4f92ed23982?style=gitweb">
544 553 <b>Added tag 1.0 for changeset 2ef0ac749a14</b>
545 554 <span class="logtags"><span class="branchtag" title="default">default</span> </span>
546 555 </a>
547 556 </td>
548 557 <td class="link" nowrap>
549 558 <a href="/rev/a4f92ed23982?style=gitweb">changeset</a> |
550 559 <a href="/file/a4f92ed23982?style=gitweb">files</a>
551 560 </td>
552 561 </tr>
553 562 <tr class="parity0">
554 563 <td class="age"><i>1970-01-01</i></td>
555 564 <td><i>test</i></td>
556 565 <td>
557 566 <a class="list" href="/rev/2ef0ac749a14?style=gitweb">
558 567 <b>base</b>
559 568 <span class="logtags"><span class="tagtag" title="1.0">1.0</span> </span>
560 569 </a>
561 570 </td>
562 571 <td class="link" nowrap>
563 572 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
564 573 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
565 574 </td>
566 575 </tr>
567 576 <tr class="light"><td colspan="4"><a class="list" href="/shortlog?style=gitweb">...</a></td></tr>
568 577 </table>
569 578
570 579 <div><a class="title" href="/tags?style=gitweb">tags</a></div>
571 580 <table cellspacing="0">
572 581
573 582 <tr class="parity0">
574 583 <td class="age"><i>1970-01-01</i></td>
575 584 <td><a class="list" href="/rev/2ef0ac749a14?style=gitweb"><b>1.0</b></a></td>
576 585 <td class="link">
577 586 <a href="/rev/2ef0ac749a14?style=gitweb">changeset</a> |
578 587 <a href="/log/2ef0ac749a14?style=gitweb">changelog</a> |
579 588 <a href="/file/2ef0ac749a14?style=gitweb">files</a>
580 589 </td>
581 590 </tr>
582 591 <tr class="light"><td colspan="3"><a class="list" href="/tags?style=gitweb">...</a></td></tr>
583 592 </table>
584 593
585 594 <div><a class="title" href="#">branches</a></div>
586 595 <table cellspacing="0">
587 596
588 597 <tr class="parity0">
589 598 <td class="age"><i>1970-01-01</i></td>
590 599 <td><a class="list" href="/shortlog/1d22e65f027e?style=gitweb"><b>1d22e65f027e</b></a></td>
591 600 <td class="">stable</td>
592 601 <td class="link">
593 602 <a href="/changeset/1d22e65f027e?style=gitweb">changeset</a> |
594 603 <a href="/log/1d22e65f027e?style=gitweb">changelog</a> |
595 604 <a href="/file/1d22e65f027e?style=gitweb">files</a>
596 605 </td>
597 606 </tr>
598 607 <tr class="parity1">
599 608 <td class="age"><i>1970-01-01</i></td>
600 609 <td><a class="list" href="/shortlog/a4f92ed23982?style=gitweb"><b>a4f92ed23982</b></a></td>
601 610 <td class="">default</td>
602 611 <td class="link">
603 612 <a href="/changeset/a4f92ed23982?style=gitweb">changeset</a> |
604 613 <a href="/log/a4f92ed23982?style=gitweb">changelog</a> |
605 614 <a href="/file/a4f92ed23982?style=gitweb">files</a>
606 615 </td>
607 616 </tr>
608 617 <tr class="light">
609 618 <td colspan="4"><a class="list" href="#">...</a></td>
610 619 </tr>
611 620 </table>
612 621 <div class="page_footer">
613 622 <div class="page_footer_text">test</div>
614 623 <div class="rss_logo">
615 624 <a href="/rss-log">RSS</a>
616 625 <a href="/atom-log">Atom</a>
617 626 </div>
618 627 <br />
619 628
620 629 </div>
621 630 </body>
622 631 </html>
623 632
624 633 200 Script output follows
625 634
626 635 <?xml version="1.0" encoding="ascii"?>
627 636 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
628 637 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
629 638 <head>
630 639 <link rel="icon" href="/static/hgicon.png" type="image/png" />
631 640 <meta name="robots" content="index, nofollow"/>
632 641 <link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
633 642
634 643
635 644 <title>test: Graph</title>
636 645 <link rel="alternate" type="application/atom+xml"
637 646 href="/atom-log" title="Atom feed for test"/>
638 647 <link rel="alternate" type="application/rss+xml"
639 648 href="/rss-log" title="RSS feed for test"/>
640 649 <!--[if IE]><script type="text/javascript" src="/static/excanvas.js"></script><![endif]-->
641 650 </head>
642 651 <body>
643 652
644 653 <div class="page_header">
645 654 <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / graph
646 655 </div>
647 656
648 657 <form action="/log">
649 658 <input type="hidden" name="style" value="gitweb" />
650 659 <div class="search">
651 660 <input type="text" name="rev" />
652 661 </div>
653 662 </form>
654 663 <div class="page_nav">
655 664 <a href="/summary?style=gitweb">summary</a> |
656 665 <a href="/shortlog?style=gitweb">shortlog</a> |
657 666 <a href="/log/2?style=gitweb">changelog</a> |
658 667 graph |
659 668 <a href="/tags?style=gitweb">tags</a> |
660 669 <a href="/branches?style=gitweb">branches</a> |
661 670 <a href="/file/1d22e65f027e?style=gitweb">files</a>
662 671 <br/>
663 672 <a href="/graph/2?style=gitweb&revcount=30">less</a>
664 673 <a href="/graph/2?style=gitweb&revcount=120">more</a>
665 674 | <a href="/graph/2ef0ac749a14?style=gitweb">(0)</a> <a href="/graph/2ef0ac749a14?style=gitweb">-2</a> <a href="/graph/tip?style=gitweb">tip</a> <br/>
666 675 </div>
667 676
668 677 <div class="title">&nbsp;</div>
669 678
670 679 <noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
671 680
672 681 <div id="wrapper">
673 682 <ul id="nodebgs"></ul>
674 683 <canvas id="graph" width="224" height="129"></canvas>
675 684 <ul id="graphnodes"></ul>
676 685 </div>
677 686
678 687 <script type="text/javascript" src="/static/graph.js"></script>
679 688 <script>
680 689 <!-- hide script content
681 690
682 691 var data = [["1d22e65f027e", [0, 1], [[0, 0, 1]], "branch", "test", "1970-01-01", ["stable", true], ["tip"]], ["a4f92ed23982", [0, 1], [[0, 0, 1]], "Added tag 1.0 for changeset 2ef0ac749a14", "test", "1970-01-01", ["default", true], []], ["2ef0ac749a14", [0, 1], [], "base", "test", "1970-01-01", ["default", false], ["1.0"]]];
683 692 var graph = new Graph();
684 693 graph.scale(39);
685 694
686 695 graph.edge = function(x0, y0, x1, y1, color) {
687 696
688 697 this.setColor(color, 0.0, 0.65);
689 698 this.ctx.beginPath();
690 699 this.ctx.moveTo(x0, y0);
691 700 this.ctx.lineTo(x1, y1);
692 701 this.ctx.stroke();
693 702
694 703 }
695 704
696 705 var revlink = '<li style="_STYLE"><span class="desc">';
697 706 revlink += '<a class="list" href="/rev/_NODEID?style=gitweb" title="_NODEID"><b>_DESC</b></a>';
698 707 revlink += '</span> _TAGS';
699 708 revlink += '<span class="info">_DATE ago, by _USER</span></li>';
700 709
701 710 graph.vertex = function(x, y, color, parity, cur) {
702 711
703 712 this.ctx.beginPath();
704 713 color = this.setColor(color, 0.25, 0.75);
705 714 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
706 715 this.ctx.fill();
707 716
708 717 var bg = '<li class="bg parity' + parity + '"></li>';
709 718 var left = (this.columns + 1) * this.bg_height;
710 719 var nstyle = 'padding-left: ' + left + 'px;';
711 720 var item = revlink.replace(/_STYLE/, nstyle);
712 721 item = item.replace(/_PARITY/, 'parity' + parity);
713 722 item = item.replace(/_NODEID/, cur[0]);
714 723 item = item.replace(/_NODEID/, cur[0]);
715 724 item = item.replace(/_DESC/, cur[3]);
716 725 item = item.replace(/_USER/, cur[4]);
717 726 item = item.replace(/_DATE/, cur[5]);
718 727
719 728 var tagspan = '';
720 729 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
721 730 tagspan = '<span class="logtags">';
722 731 if (cur[6][1]) {
723 732 tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
724 733 tagspan += cur[6][0] + '</span> ';
725 734 } else if (!cur[6][1] && cur[6][0] != 'default') {
726 735 tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
727 736 tagspan += cur[6][0] + '</span> ';
728 737 }
729 738 if (cur[7].length) {
730 739 for (var t in cur[7]) {
731 740 var tag = cur[7][t];
732 741 tagspan += '<span class="tagtag">' + tag + '</span> ';
733 742 }
734 743 }
735 744 tagspan += '</span>';
736 745 }
737 746
738 747 item = item.replace(/_TAGS/, tagspan);
739 748 return [bg, item];
740 749
741 750 }
742 751
743 752 graph.render(data);
744 753
745 754 // stop hiding script -->
746 755 </script>
747 756
748 757 <div class="page_nav">
749 758 <a href="/graph/2?style=gitweb&revcount=30">less</a>
750 759 <a href="/graph/2?style=gitweb&revcount=120">more</a>
751 760 | <a href="/graph/2ef0ac749a14?style=gitweb">(0)</a> <a href="/graph/2ef0ac749a14?style=gitweb">-2</a> <a href="/graph/tip?style=gitweb">tip</a>
752 761 </div>
753 762
754 763 <div class="page_footer">
755 764 <div class="page_footer_text">test</div>
756 765 <div class="rss_logo">
757 766 <a href="/rss-log">RSS</a>
758 767 <a href="/atom-log">Atom</a>
759 768 </div>
760 769 <br />
761 770
762 771 </div>
763 772 </body>
764 773 </html>
765 774
766 775 % capabilities
767 776 200 Script output follows
768 777
769 778 lookup changegroupsubset branchmap unbundle=HG10GZ,HG10BZ,HG10UN% heads
770 779 200 Script output follows
771 780
772 781 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
773 782 % lookup
774 783 200 Script output follows
775 784
776 785 0 'key'
777 786 % branches
778 787 200 Script output follows
779 788
780 789 1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe 2ef0ac749a14e4f57a5a822464a0902c6f7f448f 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
781 790 % changegroup
782 791 200 Script output follows
783 792
784 793 x\x9c\xbdTMHUA\x14\xbe\xa8\xf9\xec\xda&\x10\x11*\xb8\x88\x81\x99\xbef\xe6\xce\xbdw\xc6\xf2a\x16E\x1b\x11[%\x98\xcc\xaf\x8f\x8c\xf7\xc0\xf7\x82
785 794 4\x11KP2m\x95\xad*\xabE\x05AP\xd0\xc22Z\x14\xf9\x03\xb9j\xa3\x9b$\xa4MJ\xb4\x90\xc0\x9a\x9bO0\x10\xdf\x13\xa2\x81\x0f\x869g\xe6|\xe7\x9c\xef\x8ceY\xf7\xa2KO\xd2\xb7K\x16~\
786 795 \xe9\xad\x90w\x86\xab\x93W\x8e\xdf\xb0r\\Y\xee6(\xa2)\xf6\x95\xc6\x01\xe4\x1az\x80R\xe8kN\x98\xe7R\xa4\xa9K@\xe0!A\xb4k\xa7U*m\x03\x07\xd8\x92\x1d\xd2\xc9\xa4\x1d\xc2\xe6,\xa5\xcc+\x1f\xef\xafDgi\xef\xab\x1d\x1d\xb7\x9a\xe7[W\xfbc\x8f\xde-\xcd\xe7\xcaz\xb3\xbb\x19\xd3\x81\x10>c>\x08\x00"X\x11\xc2\x84@\xd2\xe7B*L\x00\x01P\x04R\xc3@\xbaB0\xdb8#\x83:\x83\xa2h\xbc=\xcd\xdaS\xe1Y,L\xd3\xa0\xf2\xa8\x94J:\xe6\xd8\x81Q\xe0\xe8d\xa7#\xe2,\xd1\xaeR*\xed \xa5\x01\x13\x01\xa6\x0cb\xe3;\xbe\xaf\xfcK[^wK\xe1N\xaf\xbbk\xe8B\xd1\xf4\xc1\x07\xb3\xab[\x10\xfdkmvwcB\xa6\xa4\xd4G\xc4D\xc2\x141\xad\x91\x10\x00\x08J\x81\xcb}\xee\t\xee+W\xba\x8a\x80\x90|\xd4\xa0\xd6\xa0\xd4T\xde\xe1\x9d,!\xe2\xb5\xa94\xe3\xe7\xd5\x9f\x06\x18\xcba\x03aP\xb8f\xcd\x04\x1a_\\9\xf1\xed\xe4\x9e\xe5\xa6\xd1\xd2\x9f\x03\xa7o\xae\x90H\xf3\xfb\xef\xffH3\xadk
787 796 \xb0\x90\x92\x88\xb9\x14"\x068\xc2\x1e@\x00\xbb\x8a)\xd3\'\x859
788 797 \xa8\x80\x84S \xa5\xbd-g\x13`\xe4\xdc\xc3H^\xdf\xe2\xc0TM\xc7\xf4BO\xcf\xde\xae\xe5\xae#\x1frM(K\x97`F\x19\x16s\x05GD\xb9\x01\xc1\x00+\x8c|\x9fp\xc11\xf0\x14\x00\x9cJ\x82<\xe0\x12\x9f\xc1\x90\xd0\xf5\xc8\x19>Pr\xaa\xeaW\xf5\xc4\xae\xd1\xfc\x17\xcf\'\x13u\xb1\x9e\xcdHnC\x0e\xcc`\xc8\xa0&\xac\x0e\xf1|\x8c\x10$\xc4\x8c\xa2p\x05`\xdc\x08 \x80\xc4\xd7Rr-\x94\x10\x102\xedi;\xf3f\xf1z\x16\x86\xdb\xd8d\xe5\xe7\x8b\xf5\x8d\rzp\xb2\xfe\xac\xf5\xf2\xd3\xfe\xfckws\xedt\x96b\xd5l\x1c\x0b\x85\xb5\x170\x8f\x11\x84\xb0\x8f\x19\xa0\x00\t_\x07\x1ac\xa2\xc3\x89Z\xe7\x96\xf9 \xccNFg\xc7F\xaa\x8a+\x9a\x9cc_\x17\x1b\x17\x9e]z38<\x97+\xb5,",\xc8\xc8?\\\x91\xff\x17.~U\x96\x97\xf5%\xdeN<\x8e\xf5\x97%\xe7^\xcfL\xed~\xda\x96k\xdc->\x86\x02\x83"\x96H\xa6\xe3\xaas=-\xeb7\xe5\xda\x8f\xbc
789 798 % stream_out
790 799 200 Script output follows
791 800
792 801 1
793 802 % failing unbundle, requires POST request
794 803 405 push requires POST request
795 804
796 805 0
797 806 push requires POST request
798 807 % Static files
799 808 200 Script output follows
800 809
801 810 a { text-decoration:none; }
802 811 .age { white-space:nowrap; }
803 812 .date { white-space:nowrap; }
804 813 .indexlinks { white-space:nowrap; }
805 814 .parity0 { background-color: #ddd; }
806 815 .parity1 { background-color: #eee; }
807 816 .lineno { width: 60px; color: #aaa; font-size: smaller;
808 817 text-align: right; }
809 818 .plusline { color: green; }
810 819 .minusline { color: red; }
811 820 .atline { color: purple; }
812 821 .annotate { font-size: smaller; text-align: right; padding-right: 1em; }
813 822 .buttons a {
814 823 background-color: #666;
815 824 padding: 2pt;
816 825 color: white;
817 826 font-family: sans;
818 827 font-weight: bold;
819 828 }
820 829 .navigate a {
821 830 background-color: #ccc;
822 831 padding: 2pt;
823 832 font-family: sans;
824 833 color: black;
825 834 }
826 835
827 836 .metatag {
828 837 background-color: #888;
829 838 color: white;
830 839 text-align: right;
831 840 }
832 841
833 842 /* Common */
834 843 pre { margin: 0; }
835 844
836 845 .logo {
837 846 float: right;
838 847 clear: right;
839 848 }
840 849
841 850 /* Changelog/Filelog entries */
842 851 .logEntry { width: 100%; }
843 852 .logEntry .age { width: 15%; }
844 853 .logEntry th { font-weight: normal; text-align: right; vertical-align: top; }
845 854 .logEntry th.age, .logEntry th.firstline { font-weight: bold; }
846 855 .logEntry th.firstline { text-align: left; width: inherit; }
847 856
848 857 /* Shortlog entries */
849 858 .slogEntry { width: 100%; }
850 859 .slogEntry .age { width: 8em; }
851 860 .slogEntry td { font-weight: normal; text-align: left; vertical-align: top; }
852 861 .slogEntry td.author { width: 15em; }
853 862
854 863 /* Tag entries */
855 864 #tagEntries { list-style: none; margin: 0; padding: 0; }
856 865 #tagEntries .tagEntry { list-style: none; margin: 0; padding: 0; }
857 866
858 867 /* Changeset entry */
859 868 #changesetEntry { }
860 869 #changesetEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
861 870 #changesetEntry th.files, #changesetEntry th.description { vertical-align: top; }
862 871
863 872 /* File diff view */
864 873 #filediffEntry { }
865 874 #filediffEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
866 875
867 876 /* Graph */
868 877 div#wrapper {
869 878 position: relative;
870 879 margin: 0;
871 880 padding: 0;
872 881 }
873 882
874 883 canvas {
875 884 position: absolute;
876 885 z-index: 5;
877 886 top: -0.6em;
878 887 margin: 0;
879 888 }
880 889
881 890 ul#nodebgs {
882 891 list-style: none inside none;
883 892 padding: 0;
884 893 margin: 0;
885 894 top: -0.7em;
886 895 }
887 896
888 897 ul#graphnodes li, ul#nodebgs li {
889 898 height: 39px;
890 899 }
891 900
892 901 ul#graphnodes {
893 902 position: absolute;
894 903 z-index: 10;
895 904 top: -0.85em;
896 905 list-style: none inside none;
897 906 padding: 0;
898 907 }
899 908
900 909 ul#graphnodes li .info {
901 910 display: block;
902 911 font-size: 70%;
903 912 position: relative;
904 913 top: -1px;
905 914 }
906 915 % ERRORS ENCOUNTERED
@@ -1,348 +1,366 b''
1 1 200 Script output follows
2 2
3 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
4 4 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
5 5 <head>
6 6 <link rel="icon" href="/static/hgicon.png" type="image/png" />
7 7 <meta name="robots" content="index, nofollow" />
8 8 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
9 9
10 10 <title>test: log</title>
11 11 <link rel="alternate" type="application/atom+xml"
12 12 href="/atom-log" title="Atom feed for test" />
13 13 <link rel="alternate" type="application/rss+xml"
14 14 href="/rss-log" title="RSS feed for test" />
15 15 </head>
16 16 <body>
17 17
18 18 <div class="container">
19 19 <div class="menu">
20 20 <div class="logo">
21 21 <a href="http://mercurial.selenic.com/">
22 22 <img src="/static/hglogo.png" alt="mercurial" /></a>
23 23 </div>
24 24 <ul>
25 25 <li class="active">log</li>
26 26 <li><a href="/graph/000000000000">graph</a></li>
27 27 <li><a href="/tags">tags</a></li>
28 28 <li><a href="/branches">branches</a></li>
29 29 </ul>
30 30 <ul>
31 31 <li><a href="/rev/000000000000">changeset</a></li>
32 32 <li><a href="/file/000000000000">browse</a></li>
33 33 </ul>
34 34 <ul>
35 35
36 36 </ul>
37 37 </div>
38 38
39 39 <div class="main">
40 40 <h2><a href="/">test</a></h2>
41 41 <h3>log</h3>
42 42
43 43 <form class="search" action="/log">
44 44
45 45 <p><input name="rev" id="search1" type="text" size="30" /></p>
46 46 <div id="hint">find changesets by author, revision,
47 47 files, or words in the commit message</div>
48 48 </form>
49 49
50 <div class="navigate">rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a> </div>
50 <div class="navigate">
51 <a href="/shortlog/-1?revcount=30">less</a>
52 <a href="/shortlog/-1?revcount=120">more</a>
53 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
54 </div>
51 55
52 56 <table class="bigtable">
53 57 <tr>
54 58 <th class="age">age</th>
55 59 <th class="author">author</th>
56 60 <th class="description">description</th>
57 61 </tr>
58 62
59 63 </table>
60 64
61 <div class="navigate">rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a> </div>
65 <div class="navigate">
66 <a href="/shortlog/-1?revcount=30">less</a>
67 <a href="/shortlog/-1?revcount=120">more</a>
68 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
69 </div>
70
62 71 </div>
63 72 </div>
64 73
65 74
66 75
67 76 </body>
68 77 </html>
69 78
70 79 200 Script output follows
71 80
72 81 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
73 82 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
74 83 <head>
75 84 <link rel="icon" href="/static/hgicon.png" type="image/png" />
76 85 <meta name="robots" content="index, nofollow" />
77 86 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
78 87
79 88 <title>test: log</title>
80 89 <link rel="alternate" type="application/atom+xml"
81 90 href="/atom-log" title="Atom feed for test" />
82 91 <link rel="alternate" type="application/rss+xml"
83 92 href="/rss-log" title="RSS feed for test" />
84 93 </head>
85 94 <body>
86 95
87 96 <div class="container">
88 97 <div class="menu">
89 98 <div class="logo">
90 99 <a href="http://mercurial.selenic.com/">
91 100 <img src="/static/hglogo.png" alt="mercurial" /></a>
92 101 </div>
93 102 <ul>
94 103 <li class="active">log</li>
95 104 <li><a href="/graph/000000000000">graph</a></li>
96 105 <li><a href="/tags">tags</a></li>
97 106 <li><a href="/branches">branches</a></li>
98 107 </ul>
99 108 <ul>
100 109 <li><a href="/rev/000000000000">changeset</a></li>
101 110 <li><a href="/file/000000000000">browse</a></li>
102 111 </ul>
103 112 <ul>
104 113
105 114 </ul>
106 115 </div>
107 116
108 117 <div class="main">
109 118 <h2><a href="/">test</a></h2>
110 119 <h3>log</h3>
111 120
112 121 <form class="search" action="/log">
113 122
114 123 <p><input name="rev" id="search1" type="text" size="30" /></p>
115 124 <div id="hint">find changesets by author, revision,
116 125 files, or words in the commit message</div>
117 126 </form>
118 127
119 <div class="navigate">rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a> </div>
128 <div class="navigate">
129 <a href="/shortlog/-1?revcount=5">less</a>
130 <a href="/shortlog/-1?revcount=20">more</a>
131 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
132 </div>
120 133
121 134 <table class="bigtable">
122 135 <tr>
123 136 <th class="age">age</th>
124 137 <th class="author">author</th>
125 138 <th class="description">description</th>
126 139 </tr>
127 140
128 141 </table>
129 142
130 <div class="navigate">rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a> </div>
143 <div class="navigate">
144 <a href="/shortlog/-1?revcount=5">less</a>
145 <a href="/shortlog/-1?revcount=20">more</a>
146 | rev -1: <a href="/shortlog/000000000000">(0)</a> <a href="/shortlog/tip">tip</a>
147 </div>
148
131 149 </div>
132 150 </div>
133 151
134 152
135 153
136 154 </body>
137 155 </html>
138 156
139 157 200 Script output follows
140 158
141 159 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
142 160 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
143 161 <head>
144 162 <link rel="icon" href="/static/hgicon.png" type="image/png" />
145 163 <meta name="robots" content="index, nofollow" />
146 164 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
147 165
148 166 <title>test: revision graph</title>
149 167 <link rel="alternate" type="application/atom+xml"
150 168 href="/atom-log" title="Atom feed for test: log" />
151 169 <link rel="alternate" type="application/rss+xml"
152 170 href="/rss-log" title="RSS feed for test: log" />
153 171 <!--[if IE]><script type="text/javascript" src="/static/excanvas.js"></script><![endif]-->
154 172 </head>
155 173 <body>
156 174
157 175 <div class="container">
158 176 <div class="menu">
159 177 <div class="logo">
160 178 <a href="http://mercurial.selenic.com/">
161 179 <img src="/static/hglogo.png" alt="mercurial" /></a>
162 180 </div>
163 181 <ul>
164 182 <li><a href="/shortlog/000000000000">log</a></li>
165 183 <li class="active">graph</li>
166 184 <li><a href="/tags">tags</a></li>
167 185 <li><a href="/branches">branches</a></li>
168 186 </ul>
169 187 <ul>
170 188 <li><a href="/rev/000000000000">changeset</a></li>
171 189 <li><a href="/file/000000000000">browse</a></li>
172 190 </ul>
173 191 </div>
174 192
175 193 <div class="main">
176 194 <h2><a href="/">test</a></h2>
177 195 <h3>graph</h3>
178 196
179 197 <form class="search" action="/log">
180 198
181 199 <p><input name="rev" id="search1" type="text" size="30" /></p>
182 200 <div id="hint">find changesets by author, revision,
183 201 files, or words in the commit message</div>
184 202 </form>
185 203
186 204 <div class="navigate">
187 205 <a href="/graph/-1?revcount=30">less</a>
188 206 <a href="/graph/-1?revcount=120">more</a>
189 207 | rev -1: <a href="/graph/000000000000">(0)</a> <a href="/graph/tip">tip</a>
190 208 </div>
191 209
192 210 <noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
193 211
194 212 <div id="wrapper">
195 213 <ul id="nodebgs"></ul>
196 214 <canvas id="graph" width="224" height="12"></canvas>
197 215 <ul id="graphnodes"></ul>
198 216 </div>
199 217
200 218 <script type="text/javascript" src="/static/graph.js"></script>
201 219 <script type="text/javascript">
202 220 <!-- hide script content
203 221
204 222 var data = [];
205 223 var graph = new Graph();
206 224 graph.scale(39);
207 225
208 226 graph.edge = function(x0, y0, x1, y1, color) {
209 227
210 228 this.setColor(color, 0.0, 0.65);
211 229 this.ctx.beginPath();
212 230 this.ctx.moveTo(x0, y0);
213 231 this.ctx.lineTo(x1, y1);
214 232 this.ctx.stroke();
215 233
216 234 }
217 235
218 236 var revlink = '<li style="_STYLE"><span class="desc">';
219 237 revlink += '<a href="/rev/_NODEID" title="_NODEID">_DESC</a>';
220 238 revlink += '</span>_TAGS<span class="info">_DATE ago, by _USER</span></li>';
221 239
222 240 graph.vertex = function(x, y, color, parity, cur) {
223 241
224 242 this.ctx.beginPath();
225 243 color = this.setColor(color, 0.25, 0.75);
226 244 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
227 245 this.ctx.fill();
228 246
229 247 var bg = '<li class="bg parity' + parity + '"></li>';
230 248 var left = (this.columns + 1) * this.bg_height;
231 249 var nstyle = 'padding-left: ' + left + 'px;';
232 250 var item = revlink.replace(/_STYLE/, nstyle);
233 251 item = item.replace(/_PARITY/, 'parity' + parity);
234 252 item = item.replace(/_NODEID/, cur[0]);
235 253 item = item.replace(/_NODEID/, cur[0]);
236 254 item = item.replace(/_DESC/, cur[3]);
237 255 item = item.replace(/_USER/, cur[4]);
238 256 item = item.replace(/_DATE/, cur[5]);
239 257
240 258 var tagspan = '';
241 259 if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
242 260 tagspan = '<span class="logtags">';
243 261 if (cur[6][1]) {
244 262 tagspan += '<span class="branchhead" title="' + cur[6][0] + '">';
245 263 tagspan += cur[6][0] + '</span> ';
246 264 } else if (!cur[6][1] && cur[6][0] != 'default') {
247 265 tagspan += '<span class="branchname" title="' + cur[6][0] + '">';
248 266 tagspan += cur[6][0] + '</span> ';
249 267 }
250 268 if (cur[7].length) {
251 269 for (var t in cur[7]) {
252 270 var tag = cur[7][t];
253 271 tagspan += '<span class="tag">' + tag + '</span> ';
254 272 }
255 273 }
256 274 tagspan += '</span>';
257 275 }
258 276
259 277 item = item.replace(/_TAGS/, tagspan);
260 278 return [bg, item];
261 279
262 280 }
263 281
264 282 graph.render(data);
265 283
266 284 // stop hiding script -->
267 285 </script>
268 286
269 287 <div class="navigate">
270 288 <a href="/graph/-1?revcount=30">less</a>
271 289 <a href="/graph/-1?revcount=120">more</a>
272 290 | rev -1: <a href="/graph/000000000000">(0)</a> <a href="/graph/tip">tip</a>
273 291 </div>
274 292
275 293 </div>
276 294 </div>
277 295
278 296
279 297
280 298 </body>
281 299 </html>
282 300
283 301 200 Script output follows
284 302
285 303 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
286 304 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
287 305 <head>
288 306 <link rel="icon" href="/static/hgicon.png" type="image/png" />
289 307 <meta name="robots" content="index, nofollow" />
290 308 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
291 309
292 310 <title>test: 000000000000 /</title>
293 311 </head>
294 312 <body>
295 313
296 314 <div class="container">
297 315 <div class="menu">
298 316 <div class="logo">
299 317 <a href="http://mercurial.selenic.com/">
300 318 <img src="/static/hglogo.png" alt="mercurial" /></a>
301 319 </div>
302 320 <ul>
303 321 <li><a href="/shortlog/000000000000">log</a></li>
304 322 <li><a href="/graph/000000000000">graph</a></li>
305 323 <li><a href="/tags">tags</a></li>
306 324 <li><a href="/branches">branches</a></li>
307 325 </ul>
308 326 <ul>
309 327 <li><a href="/rev/000000000000">changeset</a></li>
310 328 <li class="active">browse</li>
311 329 </ul>
312 330 <ul>
313 331
314 332 </ul>
315 333 </div>
316 334
317 335 <div class="main">
318 336 <h2><a href="/">test</a></h2>
319 337 <h3>directory / @ -1:000000000000 <span class="tag">tip</span> </h3>
320 338
321 339 <form class="search" action="/log">
322 340
323 341 <p><input name="rev" id="search1" type="text" size="30" /></p>
324 342 <div id="hint">find changesets by author, revision,
325 343 files, or words in the commit message</div>
326 344 </form>
327 345
328 346 <table class="bigtable">
329 347 <tr>
330 348 <th class="name">name</th>
331 349 <th class="size">size</th>
332 350 <th class="permissions">permissions</th>
333 351 </tr>
334 352 <tr class="fileline parity0">
335 353 <td class="name"><a href="/file/000000000000/">[up]</a></td>
336 354 <td class="size"></td>
337 355 <td class="permissions">drwxr-xr-x</td>
338 356 </tr>
339 357
340 358
341 359 </table>
342 360 </div>
343 361 </div>
344 362
345 363
346 364 </body>
347 365 </html>
348 366
@@ -1,569 +1,605 b''
1 1 adding b
2 2 adding a
3 3 adding a
4 4 changeset: 6:38d962e6234d
5 5 tag: tip
6 6 user: test
7 7 date: Thu Jan 01 00:00:00 1970 +0000
8 8 summary: change c
9 9
10 10 diff -r a3b6a9e4507e -r 38d962e6234d c
11 11 --- a/c Thu Jan 01 00:00:00 1970 +0000
12 12 +++ b/c Thu Jan 01 00:00:00 1970 +0000
13 13 @@ -1,1 +1,2 @@
14 14 b
15 15 +c
16 16
17 17 changeset: 5:a3b6a9e4507e
18 18 user: test
19 19 date: Thu Jan 01 00:00:00 1970 +0000
20 20 summary: mv b
21 21
22 22 diff -r 52e848cdcd88 -r a3b6a9e4507e b
23 23 --- a/b Thu Jan 01 00:00:00 1970 +0000
24 24 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
25 25 @@ -1,1 +0,0 @@
26 26 -b
27 27 diff -r 52e848cdcd88 -r a3b6a9e4507e c
28 28 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
29 29 +++ b/c Thu Jan 01 00:00:00 1970 +0000
30 30 @@ -0,0 +1,1 @@
31 31 +b
32 32
33 33 changeset: 4:52e848cdcd88
34 34 user: test
35 35 date: Thu Jan 01 00:00:00 1970 +0000
36 36 summary: del2 a
37 37
38 38 diff -r 01de2d66a28d -r 52e848cdcd88 a
39 39 --- a/a Thu Jan 01 00:00:00 1970 +0000
40 40 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
41 41 @@ -1,1 +0,0 @@
42 42 -b
43 43
44 44 changeset: 3:01de2d66a28d
45 45 user: test
46 46 date: Thu Jan 01 00:00:00 1970 +0000
47 47 summary: second a
48 48
49 49 diff -r be3ebcc91739 -r 01de2d66a28d a
50 50 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
51 51 +++ b/a Thu Jan 01 00:00:00 1970 +0000
52 52 @@ -0,0 +1,1 @@
53 53 +b
54 54
55 55 changeset: 2:be3ebcc91739
56 56 user: test
57 57 date: Thu Jan 01 00:00:00 1970 +0000
58 58 summary: del a
59 59
60 60 diff -r 5ed941583260 -r be3ebcc91739 a
61 61 --- a/a Thu Jan 01 00:00:00 1970 +0000
62 62 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
63 63 @@ -1,1 +0,0 @@
64 64 -a
65 65
66 66 changeset: 1:5ed941583260
67 67 user: test
68 68 date: Thu Jan 01 00:00:00 1970 +0000
69 69 summary: first a
70 70
71 71 diff -r 6563da9dcf87 -r 5ed941583260 a
72 72 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
73 73 +++ b/a Thu Jan 01 00:00:00 1970 +0000
74 74 @@ -0,0 +1,1 @@
75 75 +a
76 76
77 77 changeset: 0:6563da9dcf87
78 78 user: test
79 79 date: Thu Jan 01 00:00:00 1970 +0000
80 80 summary: b
81 81
82 82 diff -r 000000000000 -r 6563da9dcf87 b
83 83 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
84 84 +++ b/b Thu Jan 01 00:00:00 1970 +0000
85 85 @@ -0,0 +1,1 @@
86 86 +b
87 87
88 88 % tip - two revisions
89 89 200 Script output follows
90 90
91 91 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
92 92 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
93 93 <head>
94 94 <link rel="icon" href="/static/hgicon.png" type="image/png" />
95 95 <meta name="robots" content="index, nofollow" />
96 96 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
97 97
98 98 <title>test: a history</title>
99 99 <link rel="alternate" type="application/atom+xml"
100 100 href="/atom-log/tip/a" title="Atom feed for test:a" />
101 101 <link rel="alternate" type="application/rss+xml"
102 102 href="/rss-log/tip/a" title="RSS feed for test:a" />
103 103 </head>
104 104 <body>
105 105
106 106 <div class="container">
107 107 <div class="menu">
108 108 <div class="logo">
109 109 <a href="http://mercurial.selenic.com/">
110 110 <img src="/static/hglogo.png" alt="mercurial" /></a>
111 111 </div>
112 112 <ul>
113 113 <li><a href="/shortlog/01de2d66a28d">log</a></li>
114 114 <li><a href="/graph/01de2d66a28d">graph</a></li>
115 115 <li><a href="/tags">tags</a></li>
116 116 <li><a href="/branches">branches</a></li>
117 117 </ul>
118 118 <ul>
119 119 <li><a href="/rev/01de2d66a28d">changeset</a></li>
120 120 <li><a href="/file/01de2d66a28d">browse</a></li>
121 121 </ul>
122 122 <ul>
123 123 <li><a href="/file/01de2d66a28d/a">file</a></li>
124 124 <li><a href="/diff/01de2d66a28d/a">diff</a></li>
125 125 <li><a href="/annotate/01de2d66a28d/a">annotate</a></li>
126 126 <li class="active">file log</li>
127 127 <li><a href="/raw-file/01de2d66a28d/a">raw</a></li>
128 128 </ul>
129 129 </div>
130 130
131 131 <div class="main">
132 132 <h2><a href="/">test</a></h2>
133 133 <h3>log a</h3>
134 134
135 135 <form class="search" action="/log">
136 136
137 137 <p><input name="rev" id="search1" type="text" size="30" /></p>
138 138 <div id="hint">find changesets by author, revision,
139 139 files, or words in the commit message</div>
140 140 </form>
141 141
142 <div class="navigate"><a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
142 <div class="navigate">
143 <a href="/log/01de2d66a28d/a?revcount=30">less</a>
144 <a href="/log/01de2d66a28d/a?revcount=120">more</a>
145 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
143 146
144 147 <table class="bigtable">
145 148 <tr>
146 149 <th class="age">age</th>
147 150 <th class="author">author</th>
148 151 <th class="description">description</th>
149 152 </tr>
150 153 <tr class="parity0">
151 154 <td class="age">1970-01-01</td>
152 155 <td class="author">test</td>
153 156 <td class="description"><a href="/rev/01de2d66a28d">second a</a></td>
154 157 </tr>
155 158 <tr class="parity1">
156 159 <td class="age">1970-01-01</td>
157 160 <td class="author">test</td>
158 161 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
159 162 </tr>
160 163
161 164 </table>
162 165
166 <div class="navigate">
167 <a href="/log/01de2d66a28d/a?revcount=30">less</a>
168 <a href="/log/01de2d66a28d/a?revcount=120">more</a>
169 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a>
170 </div>
171
163 172 </div>
164 173 </div>
165 174
166 175
167 176
168 177 </body>
169 178 </html>
170 179
171 180 % second version - two revisions
172 181 200 Script output follows
173 182
174 183 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
175 184 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
176 185 <head>
177 186 <link rel="icon" href="/static/hgicon.png" type="image/png" />
178 187 <meta name="robots" content="index, nofollow" />
179 188 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
180 189
181 190 <title>test: a history</title>
182 191 <link rel="alternate" type="application/atom+xml"
183 192 href="/atom-log/tip/a" title="Atom feed for test:a" />
184 193 <link rel="alternate" type="application/rss+xml"
185 194 href="/rss-log/tip/a" title="RSS feed for test:a" />
186 195 </head>
187 196 <body>
188 197
189 198 <div class="container">
190 199 <div class="menu">
191 200 <div class="logo">
192 201 <a href="http://mercurial.selenic.com/">
193 202 <img src="/static/hglogo.png" alt="mercurial" /></a>
194 203 </div>
195 204 <ul>
196 205 <li><a href="/shortlog/01de2d66a28d">log</a></li>
197 206 <li><a href="/graph/01de2d66a28d">graph</a></li>
198 207 <li><a href="/tags">tags</a></li>
199 208 <li><a href="/branches">branches</a></li>
200 209 </ul>
201 210 <ul>
202 211 <li><a href="/rev/01de2d66a28d">changeset</a></li>
203 212 <li><a href="/file/01de2d66a28d">browse</a></li>
204 213 </ul>
205 214 <ul>
206 215 <li><a href="/file/01de2d66a28d/a">file</a></li>
207 216 <li><a href="/diff/01de2d66a28d/a">diff</a></li>
208 217 <li><a href="/annotate/01de2d66a28d/a">annotate</a></li>
209 218 <li class="active">file log</li>
210 219 <li><a href="/raw-file/01de2d66a28d/a">raw</a></li>
211 220 </ul>
212 221 </div>
213 222
214 223 <div class="main">
215 224 <h2><a href="/">test</a></h2>
216 225 <h3>log a</h3>
217 226
218 227 <form class="search" action="/log">
219 228
220 229 <p><input name="rev" id="search1" type="text" size="30" /></p>
221 230 <div id="hint">find changesets by author, revision,
222 231 files, or words in the commit message</div>
223 232 </form>
224 233
225 <div class="navigate"><a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
234 <div class="navigate">
235 <a href="/log/01de2d66a28d/a?revcount=30">less</a>
236 <a href="/log/01de2d66a28d/a?revcount=120">more</a>
237 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
226 238
227 239 <table class="bigtable">
228 240 <tr>
229 241 <th class="age">age</th>
230 242 <th class="author">author</th>
231 243 <th class="description">description</th>
232 244 </tr>
233 245 <tr class="parity0">
234 246 <td class="age">1970-01-01</td>
235 247 <td class="author">test</td>
236 248 <td class="description"><a href="/rev/01de2d66a28d">second a</a></td>
237 249 </tr>
238 250 <tr class="parity1">
239 251 <td class="age">1970-01-01</td>
240 252 <td class="author">test</td>
241 253 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
242 254 </tr>
243 255
244 256 </table>
245 257
258 <div class="navigate">
259 <a href="/log/01de2d66a28d/a?revcount=30">less</a>
260 <a href="/log/01de2d66a28d/a?revcount=120">more</a>
261 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a>
262 </div>
263
246 264 </div>
247 265 </div>
248 266
249 267
250 268
251 269 </body>
252 270 </html>
253 271
254 272 % first deleted - one revision
255 273 200 Script output follows
256 274
257 275 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
258 276 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
259 277 <head>
260 278 <link rel="icon" href="/static/hgicon.png" type="image/png" />
261 279 <meta name="robots" content="index, nofollow" />
262 280 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
263 281
264 282 <title>test: a history</title>
265 283 <link rel="alternate" type="application/atom+xml"
266 284 href="/atom-log/tip/a" title="Atom feed for test:a" />
267 285 <link rel="alternate" type="application/rss+xml"
268 286 href="/rss-log/tip/a" title="RSS feed for test:a" />
269 287 </head>
270 288 <body>
271 289
272 290 <div class="container">
273 291 <div class="menu">
274 292 <div class="logo">
275 293 <a href="http://mercurial.selenic.com/">
276 294 <img src="/static/hglogo.png" alt="mercurial" /></a>
277 295 </div>
278 296 <ul>
279 297 <li><a href="/shortlog/5ed941583260">log</a></li>
280 298 <li><a href="/graph/5ed941583260">graph</a></li>
281 299 <li><a href="/tags">tags</a></li>
282 300 <li><a href="/branches">branches</a></li>
283 301 </ul>
284 302 <ul>
285 303 <li><a href="/rev/5ed941583260">changeset</a></li>
286 304 <li><a href="/file/5ed941583260">browse</a></li>
287 305 </ul>
288 306 <ul>
289 307 <li><a href="/file/5ed941583260/a">file</a></li>
290 308 <li><a href="/diff/5ed941583260/a">diff</a></li>
291 309 <li><a href="/annotate/5ed941583260/a">annotate</a></li>
292 310 <li class="active">file log</li>
293 311 <li><a href="/raw-file/5ed941583260/a">raw</a></li>
294 312 </ul>
295 313 </div>
296 314
297 315 <div class="main">
298 316 <h2><a href="/">test</a></h2>
299 317 <h3>log a</h3>
300 318
301 319 <form class="search" action="/log">
302 320
303 321 <p><input name="rev" id="search1" type="text" size="30" /></p>
304 322 <div id="hint">find changesets by author, revision,
305 323 files, or words in the commit message</div>
306 324 </form>
307 325
308 <div class="navigate"><a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
326 <div class="navigate">
327 <a href="/log/5ed941583260/a?revcount=30">less</a>
328 <a href="/log/5ed941583260/a?revcount=120">more</a>
329 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
309 330
310 331 <table class="bigtable">
311 332 <tr>
312 333 <th class="age">age</th>
313 334 <th class="author">author</th>
314 335 <th class="description">description</th>
315 336 </tr>
316 337 <tr class="parity0">
317 338 <td class="age">1970-01-01</td>
318 339 <td class="author">test</td>
319 340 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
320 341 </tr>
321 342
322 343 </table>
323 344
345 <div class="navigate">
346 <a href="/log/5ed941583260/a?revcount=30">less</a>
347 <a href="/log/5ed941583260/a?revcount=120">more</a>
348 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a>
349 </div>
350
324 351 </div>
325 352 </div>
326 353
327 354
328 355
329 356 </body>
330 357 </html>
331 358
332 359 % first version - one revision
333 360 200 Script output follows
334 361
335 362 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
336 363 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
337 364 <head>
338 365 <link rel="icon" href="/static/hgicon.png" type="image/png" />
339 366 <meta name="robots" content="index, nofollow" />
340 367 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
341 368
342 369 <title>test: a history</title>
343 370 <link rel="alternate" type="application/atom+xml"
344 371 href="/atom-log/tip/a" title="Atom feed for test:a" />
345 372 <link rel="alternate" type="application/rss+xml"
346 373 href="/rss-log/tip/a" title="RSS feed for test:a" />
347 374 </head>
348 375 <body>
349 376
350 377 <div class="container">
351 378 <div class="menu">
352 379 <div class="logo">
353 380 <a href="http://mercurial.selenic.com/">
354 381 <img src="/static/hglogo.png" alt="mercurial" /></a>
355 382 </div>
356 383 <ul>
357 384 <li><a href="/shortlog/5ed941583260">log</a></li>
358 385 <li><a href="/graph/5ed941583260">graph</a></li>
359 386 <li><a href="/tags">tags</a></li>
360 387 <li><a href="/branches">branches</a></li>
361 388 </ul>
362 389 <ul>
363 390 <li><a href="/rev/5ed941583260">changeset</a></li>
364 391 <li><a href="/file/5ed941583260">browse</a></li>
365 392 </ul>
366 393 <ul>
367 394 <li><a href="/file/5ed941583260/a">file</a></li>
368 395 <li><a href="/diff/5ed941583260/a">diff</a></li>
369 396 <li><a href="/annotate/5ed941583260/a">annotate</a></li>
370 397 <li class="active">file log</li>
371 398 <li><a href="/raw-file/5ed941583260/a">raw</a></li>
372 399 </ul>
373 400 </div>
374 401
375 402 <div class="main">
376 403 <h2><a href="/">test</a></h2>
377 404 <h3>log a</h3>
378 405
379 406 <form class="search" action="/log">
380 407
381 408 <p><input name="rev" id="search1" type="text" size="30" /></p>
382 409 <div id="hint">find changesets by author, revision,
383 410 files, or words in the commit message</div>
384 411 </form>
385 412
386 <div class="navigate"><a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
413 <div class="navigate">
414 <a href="/log/5ed941583260/a?revcount=30">less</a>
415 <a href="/log/5ed941583260/a?revcount=120">more</a>
416 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
387 417
388 418 <table class="bigtable">
389 419 <tr>
390 420 <th class="age">age</th>
391 421 <th class="author">author</th>
392 422 <th class="description">description</th>
393 423 </tr>
394 424 <tr class="parity0">
395 425 <td class="age">1970-01-01</td>
396 426 <td class="author">test</td>
397 427 <td class="description"><a href="/rev/5ed941583260">first a</a></td>
398 428 </tr>
399 429
400 430 </table>
401 431
432 <div class="navigate">
433 <a href="/log/5ed941583260/a?revcount=30">less</a>
434 <a href="/log/5ed941583260/a?revcount=120">more</a>
435 | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a>
436 </div>
437
402 438 </div>
403 439 </div>
404 440
405 441
406 442
407 443 </body>
408 444 </html>
409 445
410 446 % before addition - error
411 447 404 Not Found
412 448
413 449 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
414 450 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
415 451 <head>
416 452 <link rel="icon" href="/static/hgicon.png" type="image/png" />
417 453 <meta name="robots" content="index, nofollow" />
418 454 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
419 455
420 456 <title>test: error</title>
421 457 </head>
422 458 <body>
423 459
424 460 <div class="container">
425 461 <div class="menu">
426 462 <div class="logo">
427 463 <a href="http://mercurial.selenic.com/">
428 464 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
429 465 </div>
430 466 <ul>
431 467 <li><a href="/shortlog">log</a></li>
432 468 <li><a href="/graph">graph</a></li>
433 469 <li><a href="/tags">tags</a></li>
434 470 <li><a href="/branches">branches</a></li>
435 471 </ul>
436 472 </div>
437 473
438 474 <div class="main">
439 475
440 476 <h2><a href="/">test</a></h2>
441 477 <h3>error</h3>
442 478
443 479 <form class="search" action="/log">
444 480
445 481 <p><input name="rev" id="search1" type="text" size="30"></p>
446 482 <div id="hint">find changesets by author, revision,
447 483 files, or words in the commit message</div>
448 484 </form>
449 485
450 486 <div class="description">
451 487 <p>
452 488 An error occurred while processing your request:
453 489 </p>
454 490 <p>
455 491 a@6563da9dcf87: not found in manifest
456 492 </p>
457 493 </div>
458 494 </div>
459 495 </div>
460 496
461 497
462 498
463 499 </body>
464 500 </html>
465 501
466 502 % should show base link, use spartan because it shows it
467 503 200 Script output follows
468 504
469 505 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
470 506 <html>
471 507 <head>
472 508 <link rel="icon" href="/static/hgicon.png" type="image/png">
473 509 <meta name="robots" content="index, nofollow" />
474 510 <link rel="stylesheet" href="/static/style.css" type="text/css" />
475 511
476 512 <title>test: c history</title>
477 513 <link rel="alternate" type="application/atom+xml"
478 514 href="/atom-log/tip/c" title="Atom feed for test:c">
479 515 <link rel="alternate" type="application/rss+xml"
480 516 href="/rss-log/tip/c" title="RSS feed for test:c">
481 517 </head>
482 518 <body>
483 519
484 520 <div class="buttons">
485 521 <a href="/log?style=spartan">changelog</a>
486 522 <a href="/shortlog?style=spartan">shortlog</a>
487 523 <a href="/graph?style=spartan">graph</a>
488 524 <a href="/tags?style=spartan">tags</a>
489 525 <a href="/branches?style=spartan">branches</a>
490 526 <a href="/file/38d962e6234d/c?style=spartan">file</a>
491 527 <a href="/annotate/38d962e6234d/c?style=spartan">annotate</a>
492 528 <a type="application/rss+xml" href="/rss-log/tip/c">rss</a>
493 529 <a type="application/atom+xml" href="/atom-log/tip/c" title="Atom feed for test:c">atom</a>
494 530 </div>
495 531
496 532 <h2>c revision history</h2>
497 533
498 534 <p>navigate: <small class="navigate"><a href="/log/a3b6a9e4507e/c?style=spartan">(0)</a> <a href="/log/tip/c?style=spartan">tip</a> </small></p>
499 535
500 536 <table class="logEntry parity0">
501 537 <tr>
502 538 <th class="age">1970-01-01:</th>
503 539 <th class="firstline"><a href="/rev/38d962e6234d?style=spartan">change c</a></th>
504 540 </tr>
505 541 <tr>
506 542 <th class="revision">revision 1:</td>
507 543 <td class="node">
508 544 <a href="/file/38d962e6234d/c?style=spartan">38d962e6234d</a>
509 545 <a href="/diff/38d962e6234d/c?style=spartan">(diff)</a>
510 546 <a href="/annotate/38d962e6234d/c?style=spartan">(annotate)</a>
511 547 </td>
512 548 </tr>
513 549
514 550 <tr>
515 551 <th class="author">author:</th>
516 552 <td class="author">&#116;&#101;&#115;&#116;</td>
517 553 </tr>
518 554 <tr>
519 555 <th class="date">date:</th>
520 556 <td class="date">Thu Jan 01 00:00:00 1970 +0000</td>
521 557 </tr>
522 558 </table>
523 559
524 560
525 561 <table class="logEntry parity1">
526 562 <tr>
527 563 <th class="age">1970-01-01:</th>
528 564 <th class="firstline"><a href="/rev/a3b6a9e4507e?style=spartan">mv b</a></th>
529 565 </tr>
530 566 <tr>
531 567 <th class="revision">revision 0:</td>
532 568 <td class="node">
533 569 <a href="/file/a3b6a9e4507e/c?style=spartan">a3b6a9e4507e</a>
534 570 <a href="/diff/a3b6a9e4507e/c?style=spartan">(diff)</a>
535 571 <a href="/annotate/a3b6a9e4507e/c?style=spartan">(annotate)</a>
536 572 </td>
537 573 </tr>
538 574
539 575 <tr>
540 576 <th>base:</th>
541 577 <td>
542 578 <a href="/file/1e88685f5dde/b?style=spartan">
543 579 b@1e88685f5dde
544 580 </a>
545 581 </td>
546 582 </tr>
547 583 <tr>
548 584 <th class="author">author:</th>
549 585 <td class="author">&#116;&#101;&#115;&#116;</td>
550 586 </tr>
551 587 <tr>
552 588 <th class="date">date:</th>
553 589 <td class="date">Thu Jan 01 00:00:00 1970 +0000</td>
554 590 </tr>
555 591 </table>
556 592
557 593
558 594
559 595
560 596
561 597 <div class="logo">
562 598 <a href="http://mercurial.selenic.com/">
563 599 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
564 600 </div>
565 601
566 602 </body>
567 603 </html>
568 604
569 605 % errors
General Comments 0
You need to be logged in to leave comments. Login now