Mercurial > public > mercurial-scm > hg
comparison mercurial/hgweb.py @ 601:8865eb8ade99
Add globals to templater/fixup RSS
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Add globals to templater/fixup RSS
This removes a bunch of duplicate header() and footer() bits and makes
url and reponame available to all templates.
Fix up RSS bits to use url
Fix strftime call
manifest hash: 63e616e4c7f517a630d80429336817d64e900b68
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
iD8DBQFCyLlRywK+sNU5EO8RAj9IAJkBDzMQaOwRmF0q8tRmVRnzHCjShACfSTCj
dbfAWg1crv/mUuRZlWL6Tc4=
=Z331
-----END PGP SIGNATURE-----
author | mpm@selenic.com |
---|---|
date | Sun, 03 Jul 2005 20:21:37 -0800 |
parents | 11c379e23ad6 |
children | bc5d058e65e9 |
comparison
equal
deleted
inserted
replaced
600:11c379e23ad6 | 601:8865eb8ade99 |
---|---|
82 else: | 82 else: |
83 yield tmpl | 83 yield tmpl |
84 return | 84 return |
85 | 85 |
86 class templater: | 86 class templater: |
87 def __init__(self, mapfile, filters = {}): | 87 def __init__(self, mapfile, filters = {}, defaults = {}): |
88 self.cache = {} | 88 self.cache = {} |
89 self.map = {} | 89 self.map = {} |
90 self.base = os.path.dirname(mapfile) | 90 self.base = os.path.dirname(mapfile) |
91 self.filters = filters | 91 self.filters = filters |
92 self.defaults = defaults | |
92 | 93 |
93 for l in file(mapfile): | 94 for l in file(mapfile): |
94 m = re.match(r'(\S+)\s*=\s*"(.*)"$', l) | 95 m = re.match(r'(\S+)\s*=\s*"(.*)"$', l) |
95 if m: | 96 if m: |
96 self.cache[m.group(1)] = m.group(2) | 97 self.cache[m.group(1)] = m.group(2) |
100 self.map[m.group(1)] = os.path.join(self.base, m.group(2)) | 101 self.map[m.group(1)] = os.path.join(self.base, m.group(2)) |
101 else: | 102 else: |
102 raise "unknown map entry '%s'" % l | 103 raise "unknown map entry '%s'" % l |
103 | 104 |
104 def __call__(self, t, **map): | 105 def __call__(self, t, **map): |
106 m = self.defaults.copy() | |
107 m.update(map) | |
105 try: | 108 try: |
106 tmpl = self.cache[t] | 109 tmpl = self.cache[t] |
107 except KeyError: | 110 except KeyError: |
108 tmpl = self.cache[t] = file(self.map[t]).read() | 111 tmpl = self.cache[t] = file(self.map[t]).read() |
109 return template(tmpl, self.filters, **map) | 112 return template(tmpl, self.filters, **m) |
110 | 113 |
111 def rfc822date(x): | 114 def rfc822date(x): |
112 return strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime(x)) | 115 return time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime(x)) |
113 | 116 |
114 class hgweb: | 117 class hgweb: |
115 maxchanges = 10 | 118 maxchanges = 10 |
116 maxfiles = 10 | 119 maxfiles = 10 |
117 | 120 |
219 to = r.file(f).read(mmap1[f]) | 222 to = r.file(f).read(mmap1[f]) |
220 tn = None | 223 tn = None |
221 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f), f, tn) | 224 yield diffblock(mdiff.unidiff(to, date1, tn, date2, f), f, tn) |
222 | 225 |
223 def header(self): | 226 def header(self): |
224 port = os.environ["SERVER_PORT"] | 227 yield self.t("header") |
225 port = port != "80" and (":" + port) or "" | |
226 self.url = "http://%s%s%s" % \ | |
227 (os.environ["SERVER_NAME"], port, os.environ["REQUEST_URI"]) | |
228 | |
229 yield self.t("header", repo = self.reponame, url = self.url) | |
230 | 228 |
231 def footer(self): | 229 def footer(self): |
232 yield self.t("footer", repo = self.reponame) | 230 yield self.t("footer") |
233 | 231 |
234 def changelog(self, pos): | 232 def changelog(self, pos): |
235 def changenav(): | 233 def changenav(): |
236 def seq(factor = 1): | 234 def seq(factor = 1): |
237 yield 1 * factor | 235 yield 1 * factor |
288 start = max(0, pos - self.maxchanges + 1) | 286 start = max(0, pos - self.maxchanges + 1) |
289 end = min(count, start + self.maxchanges) | 287 end = min(count, start + self.maxchanges) |
290 pos = end - 1 | 288 pos = end - 1 |
291 | 289 |
292 yield self.t('changelog', | 290 yield self.t('changelog', |
293 header = self.header(), | |
294 footer = self.footer(), | |
295 repo = self.reponame, | |
296 changenav = changenav, | 291 changenav = changenav, |
297 manifest = hex(mf), | 292 manifest = hex(mf), |
298 rev = pos, changesets = count, entries = changelist) | 293 rev = pos, changesets = count, entries = changelist) |
299 | 294 |
300 def search(self, query): | 295 def search(self, query): |
346 | 341 |
347 cl = self.repo.changelog | 342 cl = self.repo.changelog |
348 mf = cl.read(cl.tip())[0] | 343 mf = cl.read(cl.tip())[0] |
349 | 344 |
350 yield self.t('search', | 345 yield self.t('search', |
351 header = self.header(), | |
352 footer = self.footer(), | |
353 query = query, | 346 query = query, |
354 repo = self.reponame, | |
355 manifest = hex(mf), | 347 manifest = hex(mf), |
356 entries = changelist) | 348 entries = changelist) |
357 | 349 |
358 def changeset(self, nodeid): | 350 def changeset(self, nodeid): |
359 n = bin(nodeid) | 351 n = bin(nodeid) |
370 | 362 |
371 def diff(): | 363 def diff(): |
372 yield self.diff(p1, n, changes[3]) | 364 yield self.diff(p1, n, changes[3]) |
373 | 365 |
374 yield self.t('changeset', | 366 yield self.t('changeset', |
375 header = self.header(), | |
376 footer = self.footer(), | |
377 repo = self.reponame, | |
378 diff = diff, | 367 diff = diff, |
379 rev = cl.rev(n), | 368 rev = cl.rev(n), |
380 node = nodeid, | 369 node = nodeid, |
381 parent = self.parents("changesetparent", | 370 parent = self.parents("changesetparent", |
382 cl.parents(n), cl.rev), | 371 cl.parents(n), cl.rev), |
418 parity = 1 - parity | 407 parity = 1 - parity |
419 | 408 |
420 yield l | 409 yield l |
421 | 410 |
422 yield self.t("filelog", | 411 yield self.t("filelog", |
423 header = self.header(), | |
424 footer = self.footer(), | |
425 repo = self.reponame, | |
426 file = f, | 412 file = f, |
427 filenode = filenode, | 413 filenode = filenode, |
428 entries = entries) | 414 entries = entries) |
429 | 415 |
430 def filerevision(self, f, node): | 416 def filerevision(self, f, node): |
443 yield self.t("fileline", line = t, | 429 yield self.t("fileline", line = t, |
444 linenumber = "% 6d" % (l + 1), | 430 linenumber = "% 6d" % (l + 1), |
445 parity = l & 1) | 431 parity = l & 1) |
446 | 432 |
447 yield self.t("filerevision", file = f, | 433 yield self.t("filerevision", file = f, |
448 header = self.header(), | |
449 footer = self.footer(), | |
450 repo = self.reponame, | |
451 filenode = node, | 434 filenode = node, |
452 path = up(f), | 435 path = up(f), |
453 text = lines(), | 436 text = lines(), |
454 rev = changerev, | 437 rev = changerev, |
455 node = hex(cn), | 438 node = hex(cn), |
506 author = name, | 489 author = name, |
507 file = f, | 490 file = f, |
508 line = l) | 491 line = l) |
509 | 492 |
510 yield self.t("fileannotate", | 493 yield self.t("fileannotate", |
511 header = self.header(), | |
512 footer = self.footer(), | |
513 repo = self.reponame, | |
514 file = f, | 494 file = f, |
515 filenode = node, | 495 filenode = node, |
516 annotate = annotate, | 496 annotate = annotate, |
517 path = up(f), | 497 path = up(f), |
518 rev = changerev, | 498 rev = changerev, |
566 path = os.path.join(path, f), | 546 path = os.path.join(path, f), |
567 manifest = mnode, basename = f[:-1]) | 547 manifest = mnode, basename = f[:-1]) |
568 parity = 1 - parity | 548 parity = 1 - parity |
569 | 549 |
570 yield self.t("manifest", | 550 yield self.t("manifest", |
571 header = self.header(), | |
572 footer = self.footer(), | |
573 repo = self.reponame, | |
574 manifest = mnode, | 551 manifest = mnode, |
575 rev = rev, | 552 rev = rev, |
576 node = hex(node), | 553 node = hex(node), |
577 path = path, | 554 path = path, |
578 up = up(path), | 555 up = up(path), |
593 tag = k, | 570 tag = k, |
594 node = hex(n)) | 571 node = hex(n)) |
595 parity = 1 - parity | 572 parity = 1 - parity |
596 | 573 |
597 yield self.t("tags", | 574 yield self.t("tags", |
598 header = self.header(), | |
599 footer = self.footer(), | |
600 repo = self.reponame, | |
601 manifest = hex(mf), | 575 manifest = hex(mf), |
602 entries = entries) | 576 entries = entries) |
603 | 577 |
604 def filediff(self, file, changeset): | 578 def filediff(self, file, changeset): |
605 n = bin(changeset) | 579 n = bin(changeset) |
610 | 584 |
611 def diff(): | 585 def diff(): |
612 yield self.diff(p1, n, file) | 586 yield self.diff(p1, n, file) |
613 | 587 |
614 yield self.t("filediff", | 588 yield self.t("filediff", |
615 header = self.header(), | |
616 footer = self.footer(), | |
617 repo = self.reponame, | |
618 file = file, | 589 file = file, |
619 filenode = hex(mf.get(file, nullid)), | 590 filenode = hex(mf.get(file, nullid)), |
620 node = changeset, | 591 node = changeset, |
621 rev = self.repo.changelog.rev(n), | 592 rev = self.repo.changelog.rev(n), |
622 parent = self.parents("filediffparent", | 593 parent = self.parents("filediffparent", |
635 if args.has_key('style'): | 606 if args.has_key('style'): |
636 b = os.path.basename("map-" + args['style'][0]) | 607 b = os.path.basename("map-" + args['style'][0]) |
637 p = os.path.join(self.templates, b) | 608 p = os.path.join(self.templates, b) |
638 if os.path.isfile(p): m = p | 609 if os.path.isfile(p): m = p |
639 | 610 |
640 self.t = templater(m, self.filters) | 611 port = os.environ["SERVER_PORT"] |
612 port = port != "80" and (":" + port) or "" | |
613 url = "http://%s%s%s" % \ | |
614 (os.environ["SERVER_NAME"], port, os.environ["REQUEST_URI"]) | |
615 | |
616 self.t = templater(m, self.filters, | |
617 {"url":url, | |
618 "repo":self.reponame, | |
619 "header":self.header(), | |
620 "footer":self.footer(), | |
621 }) | |
641 | 622 |
642 if not args.has_key('cmd') or args['cmd'][0] == 'changelog': | 623 if not args.has_key('cmd') or args['cmd'][0] == 'changelog': |
643 c = self.repo.changelog.count() - 1 | 624 c = self.repo.changelog.count() - 1 |
644 hi = c | 625 hi = c |
645 if args.has_key('rev'): | 626 if args.has_key('rev'): |