changeset 797:be8b233cc69a

cm: Add a "Bugfixes" section to the CHANGELOG and order things alphabetically.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 07 Sep 2016 23:15:07 -0700
parents 3900169ac81b
children 6997ab31fc2d
files garcon/changelog.py
diffstat 1 files changed, 25 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/garcon/changelog.py	Wed Sep 07 23:14:36 2016 -0700
+++ b/garcon/changelog.py	Wed Sep 07 23:15:07 2016 -0700
@@ -9,8 +9,6 @@
 hg_log_template = ("{if(tags, '>>{tags};{date|shortdate}\n')}"
                    "{desc|firstline}\n\n")
 
-re_add_tag_changeset = re.compile('^Added tag [^\s]+ for changeset [\w\d]+$')
-re_merge_pr_changeset = re.compile('^Merge pull request')
 re_tag = re.compile('^\d+\.\d+\.\d+([ab]\d+)?(rc\d+)?$')
 re_change = re.compile('^(\w+):')
 re_clean_code_span = re.compile('([^\s])``([^\s]+)')
@@ -21,17 +19,28 @@
         'showconfig', 'showrecord', 'sources', 'theme', 'themes', 'admin',
         'publish']
 category_core = [
-        'internal', 'bug', 'templating', 'formatting', 'performance',
+        'internal', 'templating', 'formatting', 'performance',
         'data', 'config', 'rendering', 'render', 'debug', 'reporting',
         'linker', 'pagination', 'routing', 'caching', 'cli']
+category_bugfixes = [
+        'bug']
 category_project = ['build', 'cm', 'docs', 'tests', 'setup']
 categories = [
         ('commands', category_commands),
         ('core', category_core),
+        ('bugfixes', category_bugfixes),
         ('project', category_project),
         ('miscellaneous', None)]
 category_names = list(map(lambda i: i[0], categories))
 
+re_add_tag_changeset = re.compile('^Added tag [^\s]+ for changeset [\w\d]+$')
+re_merge_pr_changeset = re.compile('^Merge pull request')
+re_merge_changes_changeset = re.compile('^Merge(d?) changes')
+message_blacklist = [
+    re_add_tag_changeset,
+    re_merge_pr_changeset,
+    re_merge_changes_changeset]
+
 
 def generate(out_file, last=None):
     print("Generating %s" % out_file)
@@ -76,7 +85,7 @@
                         _write_version_changes(
                                 templates,
                                 current_version, current_version_info,
-                                current_changes, fp)
+                                current_changes, fp, out_ext)
 
                     current_version += 1
                     current_version_info = tags, tag_date
@@ -89,9 +98,12 @@
             if skip or current_version == 0:
                 continue
 
-            if re_add_tag_changeset.match(line):
-                continue
-            if re_merge_pr_changeset.match(line):
+            for blre in message_blacklist:
+                if blre.match(line):
+                    skip = True
+                    break
+
+            if skip:
                 continue
 
             m = re_change.match(line)
@@ -113,10 +125,10 @@
             _write_version_changes(
                     templates,
                     current_version, current_version_info,
-                    current_changes, fp)
+                    current_changes, fp, out_ext)
 
 
-def _write_version_changes(templates, version, version_info, changes, fp):
+def _write_version_changes(templates, version, version_info, changes, fp, ext):
     tokens = {
             'num': str(version),
             'version': version_info[0],
@@ -136,9 +148,11 @@
         tpl = _multi_replace(templates['category_title'], tokens)
         fp.write(tpl)
 
+        msgs = list(sorted(msgs))
         for msg in msgs:
-            msg = msg.replace('`', '``').rstrip('\n')
-            msg = re_clean_code_span.sub(r'\1`` \2', msg)
+            if ext == '.rst':
+                msg = msg.replace('`', '``').rstrip('\n')
+                msg = re_clean_code_span.sub(r'\1`` \2', msg)
             fp.write('* ' + msg + '\n')