# HG changeset patch # User jake@edge2.net # Date 1116732714 25200 # Node ID c0faf50822eaa9ea08c17a9617242d0541ecb8b8 # Parent 13d609f8d8302993a8c93f88d74c01529ebabef2 change template to a generator add write call to output generator diff -r 13d609f8d830 -r c0faf50822ea mercurial/hgweb.py --- a/mercurial/hgweb.py Sat May 21 16:21:16 2005 -0700 +++ b/mercurial/hgweb.py Sat May 21 20:31:54 2005 -0700 @@ -25,26 +25,32 @@ def httphdr(type): print 'Content-type: %s\n' % type +def write(*things): + for thing in things: + if hasattr(thing, "__iter__"): + for part in thing: + write(part) + else: + sys.stdout.write(str(thing)) + class template: def __init__(self, tmpl_dir): self.tmpl_dir = tmpl_dir def do_page(self, tmpl_fn, **map): - out = [] txt = file(os.path.join(self.tmpl_dir, tmpl_fn)).read() while txt: m = re.search(r"#([a-zA-Z0-9]+)#", txt) if m: - out.append(txt[:m.start(0)]) + yield txt[:m.start(0)] v = map.get(m.group(1), "") if callable(v): - for y in v(**map): out.append(y) + for y in v(**map): yield y else: - out.append(str(v)) + yield v txt = txt[m.end(0):] else: - out.append(txt) + yield txt txt = '' - return ''.join(out) class page: def __init__(self, tmpl_dir = "", type="text/html", title="Mercurial Web", @@ -52,7 +58,7 @@ self.tmpl = template(tmpl_dir) print 'Content-type: %s; charset=%s\n' % (type, charset) - print self.tmpl.do_page('htmlstart.tmpl', title = title) + write(self.tmpl.do_page('htmlstart.tmpl', title = title)) def endpage(self): print '' @@ -84,7 +90,7 @@ page.__init__(self, tmpl_dir) self.repo = repo self.numchanges = numchanges - print self.tmpl.do_page('changestitle.tmpl', reponame=reponame) + write(self.tmpl.do_page('changestitle.tmpl', reponame=reponame)) def content(self, hi=None): cl = [] @@ -135,10 +141,10 @@ for f in changes[3]: files.append('%s  ' \ % (hn, f, cgi.escape(f))) - print self.tmpl.do_page('change_table.tmpl', + write(self.tmpl.do_page('change_table.tmpl', author=obfuscate(changes[1]), desc=nl2br(cgi.escape(changes[4])), date=datestr, - files=' '.join(files), revnum=i, revnode=hn) + files=' '.join(files), revnum=i, revnode=hn)) class checkin(page): def __init__(self, repo, tmpl_dir, nodestr): @@ -164,12 +170,12 @@ if i2 != -1: p2link = '%s' % (h2, h2) - print self.tmpl.do_page('checkin.tmpl', revnum=i, revnode=self.nodestr, + write(self.tmpl.do_page('checkin.tmpl', revnum=i, revnode=self.nodestr, p1num=i1, p1node=h1, p2num=i2, p2node=h2, p2link=p2link, mfnum=self.repo.manifest.rev(changes[0]), mfnode=hg.hex(changes[0]), author=obfuscate(changes[1]), desc=nl2br(cgi.escape(changes[4])), date=datestr, - files=' '.join(files)) + files=' '.join(files))) (c, a, d) = self.repo.diffrevs(parents[0], self.node) change = self.repo.changelog.read(parents[0]) @@ -215,9 +221,9 @@ mf = self.repo.manifest.read(self.node) fns = mf.keys() fns.sort() - print self.tmpl.do_page('mftitle.tmpl', node = self.nodestr) + write(self.tmpl.do_page('mftitle.tmpl', node = self.nodestr)) for f in fns: - print self.tmpl.do_page('mfentry.tmpl', fn=f, node=hg.hex(mf[f])) + write(self.tmpl.do_page('mfentry.tmpl', fn=f, node=hg.hex(mf[f]))) class histpage(page): def __init__(self, repo, tmpl_dir, fn): @@ -250,10 +256,10 @@ if i2 != -1: p2entry = '  %d:%s' \ % (i2, h2, self.fn, h2 ), - print self.tmpl.do_page('hist_ent.tmpl', author=obfuscate(changes[1]), + write(self.tmpl.do_page('hist_ent.tmpl', author=obfuscate(changes[1]), csnode=cs, desc=nl2br(cgi.escape(changes[4])), date = datestr, fn=self.fn, revnode=h, p1num = i1, - p1node=h1, p2entry=p2entry) + p1node=h1, p2entry=p2entry)) class hgweb: repo_path = "."