| Index: third_party/gsutil/third_party/boto/scripts/git-release-notes.py
|
| diff --git a/third_party/gsutil/third_party/boto/scripts/git-release-notes.py b/third_party/gsutil/third_party/boto/scripts/git-release-notes.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..5b6faaaf2190f278920f9b9688515723535c8c13
|
| --- /dev/null
|
| +++ b/third_party/gsutil/third_party/boto/scripts/git-release-notes.py
|
| @@ -0,0 +1,75 @@
|
| +#!/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
|
| +))
|
|
|