Show More
@@ -84,11 +84,12 b' def template(tmpl, filters = {}, **map):' | |||||
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) | |
@@ -102,14 +103,16 b' class templater:' | |||||
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, **m |
|
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 | |
@@ -221,15 +224,10 b' class hgweb:' | |||||
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" |
|
230 | yield self.t("footer") | |
233 |
|
231 | |||
234 | def changelog(self, pos): |
|
232 | def changelog(self, pos): | |
235 | def changenav(): |
|
233 | def changenav(): | |
@@ -290,9 +288,6 b' class hgweb:' | |||||
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) | |
@@ -348,10 +343,7 b' class hgweb:' | |||||
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 | |||
@@ -372,9 +364,6 b' class hgweb:' | |||||
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, | |
@@ -420,9 +409,6 b' class hgweb:' | |||||
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) | |
@@ -445,9 +431,6 b' class hgweb:' | |||||
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(), | |
@@ -508,9 +491,6 b' class hgweb:' | |||||
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, | |
@@ -568,9 +548,6 b' class hgweb:' | |||||
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), | |
@@ -595,9 +572,6 b' class hgweb:' | |||||
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 | |||
@@ -612,9 +586,6 b' class hgweb:' | |||||
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, | |
@@ -637,7 +608,17 b' class hgweb:' | |||||
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 |
@@ -1,6 +1,6 b'' | |||||
1 | <item> |
|
1 | <item> | |
2 | <title>#desc|firstline|escape#</title> |
|
2 | <title>#desc|firstline|escape#</title> | |
3 |
<link> |
|
3 | <link>#url#?cmd=changeset;node=#node#"</link> | |
4 | <description>#desc|escape|addbreaks#</description> |
|
4 | <description>#desc|escape|addbreaks#</description> | |
5 | <author>#author|obfuscate#</author> |
|
5 | <author>#author|obfuscate#</author> | |
6 | <pubDate>#date|rfc822date#</pubDate> |
|
6 | <pubDate>#date|rfc822date#</pubDate> |
@@ -1,6 +1,6 b'' | |||||
1 | <item> |
|
1 | <item> | |
2 | <title>#desc|firstline|escape#</title> |
|
2 | <title>#desc|firstline|escape#</title> | |
3 |
<link> |
|
3 | <link>#url#?cmd=file;file=#file#;filenode=#filenode#"</link> | |
4 | <description>#desc|escape|addbreaks#</description> |
|
4 | <description>#desc|escape|addbreaks#</description> | |
5 | <author>#author|obfuscate#</author> |
|
5 | <author>#author|obfuscate#</author> | |
6 | <pubDate>#date|rfc822date#</pubDate>> |
|
6 | <pubDate>#date|rfc822date#</pubDate>> |
General Comments 0
You need to be logged in to leave comments.
Login now