From 3b28bc894e71df060d2895f506ed1958e43d6110 Mon Sep 17 00:00:00 2001 From: Guido Günther Date: Fri, 7 Nov 2008 18:49:45 +0100 Subject: add HTMLChangelog --- htmlchangelog.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++ templates/block.html | 8 +++++++ templates/cl.html | 21 ++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 htmlchangelog.py create mode 100644 templates/block.html create mode 100644 templates/cl.html diff --git a/htmlchangelog.py b/htmlchangelog.py new file mode 100644 index 0000000..4c13bdc --- /dev/null +++ b/htmlchangelog.py @@ -0,0 +1,60 @@ +# vim: set fileencoding=utf-8 : + +import re +import cgi +from genshi.template import TemplateLoader +import debian_bundle.changelog +import vcsbrowsers + +_TEMPLATEDIR='templates/' + +class HTMLChangelogFilter(object): + commit_id_re = re.compile(r"(?P\s+\*\s+\[)" + +r"(?P[a-fA-F0-9]{7,})" + +r"(?P\]\s+.*)") + + def __init__(self, vcsbrowser=None): + self.vcsbrowser=vcsbrowser + + def vcs_commit_filter(self, changes): + body = [] + for line in changes: + line = cgi.escape(line) + m = self.commit_id_re.match(line) + if m: + commitid = m.group('commitid') + link = '%s' % (self.vcsbrowser.commit(commitid), commitid) + body.append(m.group("s") + link + m.group("e")) + else: + body.append(line) + return "\n".join(body) + + def markup_block(self, block): + if self.vcsbrowser: + block.body = self.vcs_commit_filter(block.changes()) + else: + block.body = cgi.escape("\n".join(block.changes())) + return block + + +class HTMLChangelog(debian_bundle.changelog.Changelog): + def __init__(self, file=None, max_blocks=None, allow_empty_author=False, strict=True, templatedir=_TEMPLATEDIR, vcsbrowser=None): + debian_bundle.changelog.Changelog.__init__(self, file=file, max_blocks=max_blocks, + allow_empty_author=allow_empty_author, + strict=strict) + self.templatedir = templatedir + loader = TemplateLoader(self.templatedir) + self.html_tmpl = loader.load('cl.html') + self.block_tmpl = loader.load('block.html') + self.filter = HTMLChangelogFilter(vcsbrowser=vcsbrowser) + + def markup_block(self, block): + return self.block_tmpl.generate(block=self.filter.markup_block(block)) + + def stream(self): + title = u"Changelog for %s (%s)" % (self.get_package(), self.get_version()) + return self.html_tmpl.generate(title=title, blocks=self._blocks, markup_block=self.markup_block) + + def __str__(self): + return self.stream().render('xhtml', doctype='xhtml-strict') + diff --git a/templates/block.html b/templates/block.html new file mode 100644 index 0000000..1e06b7d --- /dev/null +++ b/templates/block.html @@ -0,0 +1,8 @@ +
+

${block.package} (${block._raw_version}) ${block.distributions}; urgency=${block.urgency}${block.urgency_comment}

+
${Markup(block.body)}
+

+ -- ${block.author} ${block._trailer_separator} ${block.date} +

+
diff --git a/templates/cl.html b/templates/cl.html new file mode 100644 index 0000000..293862f --- /dev/null +++ b/templates/cl.html @@ -0,0 +1,21 @@ + + + $title + + + + + + ${markup_block(block)} + + + + + + -- cgit v1.2.3