Mercurial > piecrust2
comparison garcon/changelog.py @ 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 | 3ab6f7a3a2c7 |
children | 22cf13b86cc3 68f799dc4680 |
comparison
equal
deleted
inserted
replaced
796:3900169ac81b | 797:be8b233cc69a |
---|---|
7 | 7 |
8 | 8 |
9 hg_log_template = ("{if(tags, '>>{tags};{date|shortdate}\n')}" | 9 hg_log_template = ("{if(tags, '>>{tags};{date|shortdate}\n')}" |
10 "{desc|firstline}\n\n") | 10 "{desc|firstline}\n\n") |
11 | 11 |
12 re_add_tag_changeset = re.compile('^Added tag [^\s]+ for changeset [\w\d]+$') | |
13 re_merge_pr_changeset = re.compile('^Merge pull request') | |
14 re_tag = re.compile('^\d+\.\d+\.\d+([ab]\d+)?(rc\d+)?$') | 12 re_tag = re.compile('^\d+\.\d+\.\d+([ab]\d+)?(rc\d+)?$') |
15 re_change = re.compile('^(\w+):') | 13 re_change = re.compile('^(\w+):') |
16 re_clean_code_span = re.compile('([^\s])``([^\s]+)') | 14 re_clean_code_span = re.compile('([^\s])``([^\s]+)') |
17 | 15 |
18 category_commands = [ | 16 category_commands = [ |
19 'chef', 'bake', 'find', 'help', 'import', 'init', 'paths', 'plugin', | 17 'chef', 'bake', 'find', 'help', 'import', 'init', 'paths', 'plugin', |
20 'plugins', 'prepare', 'purge', 'root', 'routes', 'serve', | 18 'plugins', 'prepare', 'purge', 'root', 'routes', 'serve', |
21 'showconfig', 'showrecord', 'sources', 'theme', 'themes', 'admin', | 19 'showconfig', 'showrecord', 'sources', 'theme', 'themes', 'admin', |
22 'publish'] | 20 'publish'] |
23 category_core = [ | 21 category_core = [ |
24 'internal', 'bug', 'templating', 'formatting', 'performance', | 22 'internal', 'templating', 'formatting', 'performance', |
25 'data', 'config', 'rendering', 'render', 'debug', 'reporting', | 23 'data', 'config', 'rendering', 'render', 'debug', 'reporting', |
26 'linker', 'pagination', 'routing', 'caching', 'cli'] | 24 'linker', 'pagination', 'routing', 'caching', 'cli'] |
25 category_bugfixes = [ | |
26 'bug'] | |
27 category_project = ['build', 'cm', 'docs', 'tests', 'setup'] | 27 category_project = ['build', 'cm', 'docs', 'tests', 'setup'] |
28 categories = [ | 28 categories = [ |
29 ('commands', category_commands), | 29 ('commands', category_commands), |
30 ('core', category_core), | 30 ('core', category_core), |
31 ('bugfixes', category_bugfixes), | |
31 ('project', category_project), | 32 ('project', category_project), |
32 ('miscellaneous', None)] | 33 ('miscellaneous', None)] |
33 category_names = list(map(lambda i: i[0], categories)) | 34 category_names = list(map(lambda i: i[0], categories)) |
35 | |
36 re_add_tag_changeset = re.compile('^Added tag [^\s]+ for changeset [\w\d]+$') | |
37 re_merge_pr_changeset = re.compile('^Merge pull request') | |
38 re_merge_changes_changeset = re.compile('^Merge(d?) changes') | |
39 message_blacklist = [ | |
40 re_add_tag_changeset, | |
41 re_merge_pr_changeset, | |
42 re_merge_changes_changeset] | |
34 | 43 |
35 | 44 |
36 def generate(out_file, last=None): | 45 def generate(out_file, last=None): |
37 print("Generating %s" % out_file) | 46 print("Generating %s" % out_file) |
38 | 47 |
74 if re_tag.match(tags): | 83 if re_tag.match(tags): |
75 if current_version > 0: | 84 if current_version > 0: |
76 _write_version_changes( | 85 _write_version_changes( |
77 templates, | 86 templates, |
78 current_version, current_version_info, | 87 current_version, current_version_info, |
79 current_changes, fp) | 88 current_changes, fp, out_ext) |
80 | 89 |
81 current_version += 1 | 90 current_version += 1 |
82 current_version_info = tags, tag_date | 91 current_version_info = tags, tag_date |
83 current_changes = {} | 92 current_changes = {} |
84 in_desc = True | 93 in_desc = True |
87 continue | 96 continue |
88 | 97 |
89 if skip or current_version == 0: | 98 if skip or current_version == 0: |
90 continue | 99 continue |
91 | 100 |
92 if re_add_tag_changeset.match(line): | 101 for blre in message_blacklist: |
93 continue | 102 if blre.match(line): |
94 if re_merge_pr_changeset.match(line): | 103 skip = True |
104 break | |
105 | |
106 if skip: | |
95 continue | 107 continue |
96 | 108 |
97 m = re_change.match(line) | 109 m = re_change.match(line) |
98 if m: | 110 if m: |
99 ch_type = m.group(1) | 111 ch_type = m.group(1) |
111 | 123 |
112 if current_version > 0: | 124 if current_version > 0: |
113 _write_version_changes( | 125 _write_version_changes( |
114 templates, | 126 templates, |
115 current_version, current_version_info, | 127 current_version, current_version_info, |
116 current_changes, fp) | 128 current_changes, fp, out_ext) |
117 | 129 |
118 | 130 |
119 def _write_version_changes(templates, version, version_info, changes, fp): | 131 def _write_version_changes(templates, version, version_info, changes, fp, ext): |
120 tokens = { | 132 tokens = { |
121 'num': str(version), | 133 'num': str(version), |
122 'version': version_info[0], | 134 'version': version_info[0], |
123 'date': version_info[1]} | 135 'date': version_info[1]} |
124 tpl = _multi_replace(templates['version_title'], tokens) | 136 tpl = _multi_replace(templates['version_title'], tokens) |
134 'sub_num': str(i), | 146 'sub_num': str(i), |
135 'category': cat_name.title()} | 147 'category': cat_name.title()} |
136 tpl = _multi_replace(templates['category_title'], tokens) | 148 tpl = _multi_replace(templates['category_title'], tokens) |
137 fp.write(tpl) | 149 fp.write(tpl) |
138 | 150 |
151 msgs = list(sorted(msgs)) | |
139 for msg in msgs: | 152 for msg in msgs: |
140 msg = msg.replace('`', '``').rstrip('\n') | 153 if ext == '.rst': |
141 msg = re_clean_code_span.sub(r'\1`` \2', msg) | 154 msg = msg.replace('`', '``').rstrip('\n') |
155 msg = re_clean_code_span.sub(r'\1`` \2', msg) | |
142 fp.write('* ' + msg + '\n') | 156 fp.write('* ' + msg + '\n') |
143 | 157 |
144 | 158 |
145 def _multi_replace(s, tokens): | 159 def _multi_replace(s, tokens): |
146 for token in tokens: | 160 for token in tokens: |