]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
latest changelog
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 4 Apr 2013 22:23:36 +0000 (18:23 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 4 Apr 2013 22:23:36 +0000 (18:23 -0400)
docs/build/ext/changelog.py
setup.cfg

index 023d11818f793053949186bc65c8bb48801ea030..41a403ad0955fd78c7f9f6a3f8ef3bb1f6f2ebce 100644 (file)
@@ -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)
index 224088b277f9e7dc2f55dedc02c82d748cfa665e..65e8466417a8a1d939122952076e40a1d960f56f 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,5 +1,4 @@
 [egg_info]
-tag_build = dev
 
 
 [upload_docs]