From: Mike Bayer Date: Sun, 21 Oct 2012 22:36:17 +0000 (-0400) Subject: - add md5-hashed links to changelog entries X-Git-Tag: rel_0_8_0b1~33 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bd8ccf436cbf9e1250bb026ae2193bad47468984;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - add md5-hashed links to changelog entries --- diff --git a/doc/build/builder/changelog.py b/doc/build/builder/changelog.py index 1d24d486ca..023d11818f 100644 --- a/doc/build/builder/changelog.py +++ b/doc/build/builder/changelog.py @@ -5,6 +5,7 @@ from docutils import nodes import textwrap import itertools import collections +import md5 def _comma_list(text): return re.split(r"\s*,\s*", text.strip()) @@ -147,9 +148,19 @@ class ChangeLogDirective(EnvDirective, Directive): def _render_rec(self, rec, section, cat, append_sec): para = rec['node'].deepcopy() - #targetid = "%s-%d" % (self.type_, self.env.new_serialno(self.type_)) - #targetnode = nodes.target('', '', ids=[targetid]) - #para.insert(0, targetnode) + text = _text_rawsource_from_node(para) + if len(text) > 50: + targetid = "%s-%s" % (self.type_, + md5.md5(text[0:100].encode('ascii', 'ignore') + ).hexdigest()) + targetnode = nodes.target('', '', ids=[targetid]) + para.insert(0, targetnode) + permalink = nodes.reference('', '', + nodes.Text("(link)", "(link)"), + refid=targetid, + classes=['changeset-link'] + ) + para.append(permalink) insert_ticket = nodes.paragraph('') para.append(insert_ticket) @@ -224,6 +235,15 @@ class ChangeDirective(EnvDirective, Directive): return [] +def _text_rawsource_from_node(node): + src = [] + stack = [node] + while stack: + n = stack.pop(0) + if isinstance(n, nodes.Text): + src.append(n.rawsource) + stack.extend(n.children) + return "".join(src) def _rst2sphinx(text): return StringList( diff --git a/doc/build/static/docs.css b/doc/build/static/docs.css index a5a0cba8d1..1243c2a659 100644 --- a/doc/build/static/docs.css +++ b/doc/build/static/docs.css @@ -305,6 +305,14 @@ a.headerlink:hover { background-color: #900; } +/* changeset stuff */ + +#docs-container a.changeset-link { + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + /* docutils-specific elements */ th.field-name {