blob: 5b6faaaf2190f278920f9b9688515723535c8c13 [file] [log] [blame]
#!/usr/bin/env python
import datetime
import re
import subprocess
RELEASE = re.compile(r'[0-9]+\.[0-9]+\.[0-9]+')
ISSUE = re.compile(r'#([0-9]+)')
REVLIST = 'git rev-list develop --abbrev-commit --format="parents %p%n%B%n~~~" --max-count=200 develop'
TEMPLATE = """
boto v{version}
===========
:date: {date}
Description goes here.
Changes
-------
{changes}
"""
revisions = subprocess.check_output(REVLIST, shell=True, stderr=subprocess.STDOUT)
commit_list = []
for hunk in revisions.split('~~~')[:-1]:
lines = hunk.strip().splitlines()
commit = lines[0].split(' ', 1)[1]
parents = lines[1].split(' ', 1)[1].split(' ')
message = ' '.join(lines[2:])
# print(commit, parents)
if RELEASE.search(message):
print('Found release commit, stopping:')
print(message)
break
if len(parents) > 1:
commit_list.append([commit, message])
removals = [
re.compile(r'merge pull request #[0-9]+ from [a-z0-9/_-]+', re.I),
re.compile(r"merge branch '[a-z0-9/_-]+' into [a-z0-9/_-]+", re.I),
re.compile(r'fix(es)? [#0-9, ]+.?', re.I)
]
changes = ''
for commit, message in commit_list:
append = []
issues = set()
for issue in ISSUE.findall(message):
if issue not in issues:
append.append(':issue:`{issue}`'.format(issue=issue))
issues.add(issue)
append.append(':sha:`{commit}`'.format(commit=commit))
append = ' (' + ', '.join(append) + ')'
original = message
for removal in removals:
message = removal.sub('', message)
message = message.strip()
if not message:
message = original.strip()
changes += '* ' + message + append + '\n'
print(TEMPLATE.format(
version='?.?.?',
date=datetime.datetime.now().strftime('%Y/%m/%d'),
changes=changes
))