mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
72 lines
2.4 KiB
Python
Executable File
72 lines
2.4 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# Copyright 2015 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import argparse
|
|
import os
|
|
import subprocess
|
|
import xml.etree.ElementTree as ET
|
|
|
|
|
|
MANIFEST_PREFACE = '''<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- Copyright 2015 The Chromium Authors. All rights reserved.
|
|
Use of this source code is governed by a BSD-style license that can be
|
|
found in the LICENSE file.
|
|
-->
|
|
'''
|
|
|
|
|
|
def increment_version(version):
|
|
pieces = version.split('.')
|
|
pieces[-1] = str(int(pieces[-1]) + 1)
|
|
return '.'.join(pieces)
|
|
|
|
|
|
def prepend_to_file(to_prepend, filepath):
|
|
with open(filepath, 'r+') as f:
|
|
content = f.read()
|
|
f.seek(0, 0)
|
|
f.write(to_prepend + content)
|
|
|
|
|
|
def update_manifest(manifest):
|
|
VERSION_CODE = '{http://schemas.android.com/apk/res/android}versionCode'
|
|
VERSION_NAME = '{http://schemas.android.com/apk/res/android}versionName'
|
|
tree = ET.parse(manifest)
|
|
root = tree.getroot()
|
|
package_name = root.get('package')
|
|
old_code = root.get(VERSION_CODE)
|
|
old_name = root.get(VERSION_NAME)
|
|
root.set(VERSION_CODE, increment_version(old_code))
|
|
root.set(VERSION_NAME, increment_version(old_name))
|
|
print "%20s %6s (%s) => %6s (%s)" % (package_name, old_name, old_code,
|
|
root.get(VERSION_NAME), root.get(VERSION_CODE))
|
|
# TODO(eseidel): This isn't smart enough to wrap/intent multi-attribute
|
|
# elements like <manifest> as is the typical AndroidManifiest.xml style
|
|
# we could write our own custom prettyprinter to do that?
|
|
tree.write(manifest)
|
|
prepend_to_file(MANIFEST_PREFACE, manifest)
|
|
return root.get(VERSION_NAME)
|
|
|
|
|
|
def main():
|
|
# Should chdir to the root directory.
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('manifest')
|
|
args = parser.parse_args()
|
|
|
|
# TODO(eseidel): Without this ET uses 'ns0' for 'android' which is wrong.
|
|
ET.register_namespace('android', 'http://schemas.android.com/apk/res/android')
|
|
|
|
new_version = update_manifest(args.manifest)
|
|
notes_dir = os.path.join(os.path.dirname(args.manifest), 'release_notes')
|
|
release_notes = os.path.join(notes_dir, '%s.txt' % new_version)
|
|
# FIXME: We could open an editor for the release notes and prepopulate
|
|
# it with the changes url like how we do for pubspec CHANGELOG.md files.
|
|
print "Please update %s in this commit." % release_notes
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|