Index: sky/tools/roll_versions.py |
diff --git a/sky/tools/roll_versions.py b/sky/tools/roll_versions.py |
index 0108cca01565ab86e134d8b9ea9babefade710fd..ec9adc7afb5eb8617925b6aa0c0dd141f1080614 100755 |
--- a/sky/tools/roll_versions.py |
+++ b/sky/tools/roll_versions.py |
@@ -3,9 +3,12 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
+import os |
+import subprocess |
import yaml |
import xml.etree.ElementTree as ET |
+ |
PUBSPECS = [ |
'sky/sdk/pubspec.yaml', |
'mojo/public/dart/pubspec.yaml', |
@@ -38,6 +41,15 @@ def sort_dict(unsorted): |
return sorted_dict |
+def count_commits(start, end): |
+ return subprocess.check_output([ |
+ 'git', 'rev-list', '%s...%s' % (start, end)]).count('\n') |
+ |
+ |
+def last_commit_to(file_path): |
+ return subprocess.check_output(['git', 'log', '-1', '--format=%h', file_path]).strip() |
+ |
+ |
def update_pubspec(pubspec): |
# TODO(eseidel): This does not prserve any manual sort-order of the yaml. |
with open(pubspec, 'r') as stream: |
@@ -48,6 +60,20 @@ def update_pubspec(pubspec): |
with open(pubspec, 'w') as stream: |
yaml.dump(spec, stream=stream, default_flow_style=False) |
+ return spec['version'] |
+ |
+ |
+def update_changelog(changelog, pubspec, version): |
+ old = last_commit_to(pubspec) |
+ new = last_commit_to('.') |
+ url = "https://github.com/domokit/mojo/compare/%s...%s" % (old, new) |
+ count = count_commits(old, new) |
+ message = """## %s |
+ |
+ - %s changes: %s |
+ |
+""" % (version, count, url) |
+ prepend_to_file(message, changelog) |
def prepend_to_file(to_prepend, filepath): |
@@ -77,9 +103,13 @@ def update_manifest(manifest): |
def main(): |
+ # Should chdir to the root directory. |
+ |
print 'Pub packages:' |
for pubspec in PUBSPECS: |
- update_pubspec(pubspec) |
+ new_version = update_pubspec(pubspec) |
+ changelog = os.path.join(os.path.dirname(pubspec), 'CHANGELOG.md') |
+ update_changelog(changelog, pubspec, new_version) |
# TODO(eseidel): Without this ET uses 'ns0' for 'android' which is wrong. |
ET.register_namespace('android', 'http://schemas.android.com/apk/res/android') |