import textwrap
import itertools
import collections
+import md5
def _comma_list(text):
return re.split(r"\s*,\s*", text.strip())
topsection.append(nodes.Text("no release date"))
return topsection
+
def _render_rec(self, rec, section, cat, append_sec):
para = rec['node'].deepcopy()
+
+ 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)
- for i, ticket in enumerate(rec['tickets']):
- if i > 0:
- insert_ticket.append(nodes.Text(", ", ", "))
- else:
- insert_ticket.append(nodes.Text(" ", " "))
- refuri = self.env.config.changelog_render_ticket
- if refuri is not None:
- refuri = refuri % ticket
- insert_ticket.append(
- nodes.reference('', '',
- nodes.Text("#%s" % ticket, "#%s" % ticket),
- refuri=refuri
- )
- )
- else:
- insert_ticket.append(
- nodes.Text("#%s" % ticket, "#%s" % ticket)
- )
+ i = 0
+ for collection, render, prefix in (
+ (rec['tickets'], self.env.config.changelog_render_ticket, "#%s"),
+ (rec['pullreq'], self.env.config.changelog_render_pullreq,
+ "pull request %s"),
+ (rec['changeset'], self.env.config.changelog_render_changeset, "r%s"),
+ ):
+ for refname in collection:
+ if i > 0:
+ insert_ticket.append(nodes.Text(", ", ", "))
+ else:
+ insert_ticket.append(nodes.Text(" ", " "))
+ i += 1
+ if render is not None:
+ refuri = render % refname
+ node = nodes.reference('', '',
+ nodes.Text(prefix % refname, prefix % refname),
+ refuri=refuri
+ )
+ else:
+ node = nodes.Text(prefix % refname, prefix % refname)
+ insert_ticket.append(node)
if rec['tags']:
tag_node = nodes.strong('',
rec = {
'tags': set(_comma_list(content.get('tags', ''))).difference(['']),
'tickets': set(_comma_list(content.get('tickets', ''))).difference(['']),
+ 'pullreq': set(_comma_list(content.get('pullreq', ''))).difference(['']),
+ 'changeset': set(_comma_list(content.get('changeset', ''))).difference(['']),
'node': p,
'type': self.type_,
"title": content.get("title", None)
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(
None,
'env'
)
+ app.add_config_value("changelog_render_pullreq",
+ None,
+ 'env'
+ )
+ app.add_config_value("changelog_render_changeset",
+ None,
+ 'env'
+ )