OSDN Git Service

4d6a1c461c305bd3e9410d2dec303558d4b85b9d
[newslash/newslash.git] / misc / make_changelog.py
1 #!/usr/bin/python
2 import json
3 import sys
4 import re
5 import commands
6 import datetime
7
8 CHANGELOG_FORMAT=ur"""newslash ({describe}) unstable; urgency=low
9
10 {changes}
11
12  -- {packager}  {date}
13 """
14 CHANGES_FORMAT=ur"""  * {subject} ({committer}, {date})"""
15 PACKAGER="Hiromichi MATSUSHIMA <hirom@osdn.jp>"
16
17 def get_desc(hs):
18     cmd = "git describe --tags " + hs
19     rs = commands.getoutput(cmd)
20     rs = re.sub(r'^(\D+)', '', rs)
21     return rs
22
23 def main():
24     counter = 0
25     logs = []
26     item = {}
27
28     for l in sys.stdin:
29         l = l.strip()
30         if counter == 0:
31             item["hash"] = l
32         elif counter == 1:
33             item["subject"] = l
34         elif counter == 2:
35             item["date"] = l
36         elif counter == 3:
37             item["committer"] = l
38         elif counter == 4:
39             item["email"] = l
40         counter += 1
41         if re.match(r'^\s*$', l):
42             counter = 0
43             logs.append(item)
44             item = {}
45     if counter != 0:
46         logs.append(item)
47
48     output_changelog(logs)
49
50 def _output_item(target, changes):
51     data = {}
52     data["describe"] = get_desc((target["hash"].split())[0])
53     data["date"] = target["date"]
54     data["changes"] = "\n".join(changes)
55     data["packager"] = PACKAGER
56     print CHANGELOG_FORMAT.format(**data)
57
58 def output_changelog(logs):
59     changes = []
60     target = logs[0]
61     for item in logs:
62         t = item["hash"].split()
63         commit = t[0]
64         tag = ""
65         m = re.match(r"\(tags/([^~]*)(~.*)?\)", t[1])
66         if m:
67             if not m.group(2):
68                 tag = m.group(1)
69
70         if tag:
71             _output_item(target, changes)
72             changes = []
73             target = item
74         changes.append(CHANGES_FORMAT.format(**item))
75
76     _output_item(target, changes)
77     
78 if __name__ == '__main__':
79     main()