annotate util/generate_changelog.py @ 544:9a00e694b42c

cm: Changelog generator script.
author Ludovic Chabant <ludovic@chabant.com>
date Fri, 31 Jul 2015 23:35:07 -0700
parents
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