summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-04-04 18:23:36 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-04-04 18:23:36 -0400
commitcc9aa8e8ac082821f70e88343e94b07c51b69127 (patch)
tree8de0750e5c85247a8887f6fd5b522cb051ba8309
parente731d8bf4c100530f2a9321f489b3e77dad50a37 (diff)
downloadalembic-cc9aa8e8ac082821f70e88343e94b07c51b69127.tar.gz
latest changelog
-rw-r--r--docs/build/ext/changelog.py79
-rw-r--r--setup.cfg1
2 files changed, 53 insertions, 27 deletions
diff --git a/docs/build/ext/changelog.py b/docs/build/ext/changelog.py
index 023d118..41a403a 100644
--- a/docs/build/ext/changelog.py
+++ b/docs/build/ext/changelog.py
@@ -1,7 +1,7 @@
import re
from sphinx.util.compat import Directive
from docutils.statemachine import StringList
-from docutils import nodes
+from docutils import nodes, utils
import textwrap
import itertools
import collections
@@ -56,15 +56,16 @@ class ChangeLogDirective(EnvDirective, Directive):
bysection[(compound, inner_tag)].append(rec)
all_sections.add(compound)
break
-
- intersect = rec['tags'].intersection(self.sections)
- if intersect:
- sec = intersect.pop()
- bysection[(sec, inner_tag)].append(rec)
- all_sections.add(sec)
- continue
-
- bysection[(self.default_section, inner_tag)].append(rec)
+ else:
+ intersect = rec['tags'].intersection(self.sections)
+ if intersect:
+ for sec in rec['sorted_tags']:
+ if sec in intersect:
+ bysection[(sec, inner_tag)].append(rec)
+ all_sections.add(sec)
+ break
+ else:
+ bysection[(self.default_section, inner_tag)].append(rec)
return bysection, all_sections
@classmethod
@@ -85,7 +86,7 @@ class ChangeLogDirective(EnvDirective, Directive):
changes = self.changes(self.env)
output = []
- version = self._parsed_content.get('version', '')
+ self.version = version = self._parsed_content.get('version', '')
id_prefix = "%s-%s" % (self.type_, version)
topsection = self._run_top(id_prefix)
output.append(topsection)
@@ -119,7 +120,6 @@ class ChangeLogDirective(EnvDirective, Directive):
for cat in self.inner_tag_sort:
for rec in bysection[(section, cat)]:
rec["id"] = "%s-%s" % (id_prefix, next(counter))
-
self._render_rec(rec, section, cat, append_sec)
if append_sec.children:
@@ -142,6 +142,16 @@ class ChangeLogDirective(EnvDirective, Directive):
self._parsed_content['released']))
else:
topsection.append(nodes.Text("no release date"))
+
+ intro_para = nodes.paragraph('', '')
+ for len_, text in enumerate(self._parsed_content['text']):
+ if ".. change::" in text:
+ break
+ if len_:
+ self.state.nested_parse(self._parsed_content['text'][0:len_], 0,
+ intro_para)
+ topsection.append(intro_para)
+
return topsection
@@ -149,18 +159,19 @@ class ChangeLogDirective(EnvDirective, Directive):
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)
+
+ to_hash = "%s %s" % (self.version, text[0:100])
+ targetid = "%s-%s" % (self.type_,
+ md5.md5(to_hash.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)
@@ -217,14 +228,16 @@ class ChangeDirective(EnvDirective, Directive):
def run(self):
content = _parse_content(self.content)
p = nodes.paragraph('', '',)
+ sorted_tags = _comma_list(content.get('tags', ''))
rec = {
- 'tags': set(_comma_list(content.get('tags', ''))).difference(['']),
+ 'tags': set(sorted_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)
+ "title": content.get("title", None),
+ 'sorted_tags': sorted_tags
}
if "declarative" in rec['tags']:
@@ -250,6 +263,19 @@ def _rst2sphinx(text):
[line.strip() for line in textwrap.dedent(text).split("\n")]
)
+
+def make_ticket_link(name, rawtext, text, lineno, inliner,
+ options={}, content=[]):
+ env = inliner.document.settings.env
+ render_ticket = env.config.changelog_render_ticket or "%s"
+ prefix = "#%s"
+ if render_ticket:
+ ref = render_ticket % text
+ node = nodes.reference(rawtext, prefix % text, refuri=ref, **options)
+ else:
+ node = nodes.Text(prefix % text, prefix % text)
+ return [node], []
+
def setup(app):
app.add_directive('changelog', ChangeLogDirective)
app.add_directive('change', ChangeDirective)
@@ -267,3 +293,4 @@ def setup(app):
None,
'env'
)
+ app.add_role('ticket', make_ticket_link)
diff --git a/setup.cfg b/setup.cfg
index 224088b..65e8466 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,5 +1,4 @@
[egg_info]
-tag_build = dev
[upload_docs]