annotate util/generate_changelog.py @ 550:6f216c1ab6b1

bake: Add a flag to know which record entries got collapsed from last run. This makes it possible to find entries for things that were actually baked during the current run, as opposed to skipped because they were "clean".
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 04 Aug 2015 21:22:30 -0700
parents 9a00e694b42c
children 442cf576ae25
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
544
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 import os
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 import os.path
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3 import re
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 import sys
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 import subprocess
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 hg_log_template = ("{if(tags, '>>{tags};{date|shortdate}\n')}"
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9 "{desc|firstline}\n\n")
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11 re_add_tag_changeset = re.compile('^Added tag [^\s]+ for changeset [\w\d]+$')
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 re_merge_pr_changeset = re.compile('^Merge pull request')
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13 re_tag = re.compile('^\d+\.\d+\.\d+([ab]\d+)?(rc\d+)?$')
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 re_change = re.compile('^(\w+):')
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 re_clean_code_span = re.compile('([^\s])``([^\s]+)')
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 category_commands = [
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 'chef', 'bake', 'find', 'help', 'import', 'init', 'paths', 'plugin',
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 'plugins', 'prepare', 'purge', 'root', 'routes', 'serve',
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 'showconfig', 'showrecord', 'sources', 'theme', 'themes']
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 category_core = [
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 'internal', 'bug', 'templating', 'formatting', 'performance',
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 'data', 'config', 'rendering', 'render', 'debug', 'reporting',
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 'linker', 'pagination', 'routing', 'caching']
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25 category_project = ['build', 'cm', 'docs', 'tests', 'setup']
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 categories = [
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27 ('commands', category_commands),
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 ('core', category_core),
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29 ('project', category_project),
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 ('miscellaneous', None)]
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 category_names = list(map(lambda i: i[0], categories))
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34 def generate():
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35 out_file = 'CHANGELOG.rst'
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36 if len(sys.argv) > 1:
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37 out_file = sys.argv[1]
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39 print("Generating %s" % out_file)
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41 if not os.path.exists('.hg'):
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42 raise Exception("You must run this script from the root of a "
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43 "Mercurial clone of the PieCrust repository.")
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 hglog = subprocess.check_output([
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45 'hg', 'log',
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46 '--rev', 'reverse(::master)',
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47 '--template', hg_log_template])
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 hglog = hglog.decode('utf8')
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 templates = _get_templates()
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52 with open(out_file, 'w') as fp:
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 fp.write(templates['header'])
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55 skip = False
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 in_desc = False
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57 current_version = 0
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58 current_version_info = None
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 current_changes = None
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 for line in hglog.splitlines():
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 if line == '':
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62 skip = False
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 in_desc = False
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64 continue
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 if not in_desc and line.startswith('>>'):
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67 tags, tag_date = line[2:].split(';')
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68 if re_tag.match(tags):
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69 if current_version > 0:
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70 _write_version_changes(
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
71 templates,
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
72 current_version, current_version_info,
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73 current_changes, fp)
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75 current_version += 1
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
76 current_version_info = tags, tag_date
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
77 current_changes = {}
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
78 in_desc = True
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
79 else:
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
80 skip = True
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
81 continue
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
82
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
83 if skip or current_version == 0:
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
84 continue
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86 if re_add_tag_changeset.match(line):
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
87 continue
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
88 if re_merge_pr_changeset.match(line):
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89 continue
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
90
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
91 m = re_change.match(line)
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
92 if m:
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
93 ch_type = m.group(1)
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
94 for cat_name, ch_types in categories:
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
95 if ch_types is None or ch_type in ch_types:
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
96 msgs = current_changes.setdefault(cat_name, [])
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
97 msgs.append(line)
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98 break
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99 else:
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
100 assert False, ("Change '%s' should have gone in the "
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
101 "misc. bucket." % line)
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
102 else:
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
103 msgs = current_changes.setdefault('miscellaneous', [])
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
104 msgs.append(line)
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
105
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
106 if current_version > 0:
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
107 _write_version_changes(
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
108 templates,
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
109 current_version, current_version_info,
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
110 current_changes, fp)
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
111
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
112
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
113 def _write_version_changes(templates, version, version_info, changes, fp):
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
114 tokens = {
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
115 'num': str(version),
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
116 'version': version_info[0],
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
117 'date': version_info[1]}
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
118 tpl = _multi_replace(templates['version_title'], tokens)
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
119 fp.write(tpl)
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
120
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
121 for i, cat_name in enumerate(category_names):
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
122 msgs = changes.get(cat_name)
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
123 if not msgs:
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
124 continue
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
125
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
126 tokens = {
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
127 'sub_num': str(i),
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
128 'category': cat_name.title()}
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
129 tpl = _multi_replace(templates['category_title'], tokens)
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
130 fp.write(tpl)
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
131
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
132 for msg in msgs:
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
133 msg = msg.replace('`', '``').rstrip('\n')
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
134 msg = re_clean_code_span.sub(r'\1`` \2', msg)
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
135 fp.write('* ' + msg + '\n')
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
136
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
137
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
138 def _multi_replace(s, tokens):
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
139 for token in tokens:
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
140 s = s.replace('%%%s%%' % token, tokens[token])
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
141 return s
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
142
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
143
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
144 def _get_templates():
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
145 tpl_dir = os.path.join(os.path.dirname(__file__), 'changelog')
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
146 tpls = {}
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
147 for name in os.listdir(tpl_dir):
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
148 tpl = _get_template(os.path.join(tpl_dir, name))
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
149 name_no_ext, _ = os.path.splitext(name)
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
150 tpls[name_no_ext] = tpl
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
151 return tpls
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
152
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
153
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
154 def _get_template(filename):
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
155 with open(filename, 'r', encoding='utf8') as fp:
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
156 return fp.read()
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
157
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
158
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
159 if __name__ == '__main__':
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
160 generate()
9a00e694b42c cm: Changelog generator script.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
161