Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(241)

Side by Side Diff: build/check_sdk_extras_version.py

Issue 1152203003: Add script to validate installed Android SDK packages (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: make the minimum version requirement more explicit Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright 2015 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 '''Checks the status of an Android SDK package.
7
8 Verifies the given package has been installed from the Android SDK Manager and
9 that its version is at least the minimum version required by the project
10 configuration.
11 '''
12
13 import argparse
14 import json
15 import os
16 import re
17 import sys
18
19
20 COLORAMA_ROOT = os.path.join(os.path.dirname(__file__),
21 os.pardir, 'third_party', 'colorama', 'src')
22
23 sys.path.append(COLORAMA_ROOT)
24 import colorama
25
26
27 UDPATE_SCRIPT_PATH = 'build/install-android-sdks.sh'
28
29 SDK_EXTRAS_JSON_FILE = os.path.join(os.path.dirname(__file__),
30 'android_sdk_extras.json')
31
32 PACKAGE_VERSION_PATTERN = r'^Pkg\.Revision=(?P<version>\d+).*$'
33
34 PKG_NOT_FOUND_MSG = ('Error while checking Android SDK extras versions. '
35 'Could not find the "{package_id}" package in '
36 '{checked_location}. Please run {script} to download it.')
37 UPDATE_NEEDED_MSG = ('Error while checking Android SDK extras versions. '
38 'Version {minimum_version} or greater is required for the '
39 'package "{package_id}". Version {actual_version} found. '
40 'Please run {script} to update it.')
41 REQUIRED_VERSION_ERROR_MSG = ('Error while checking Android SDK extras '
42 'versions. '
43 'Could not retrieve the required version for '
44 'package "{package_id}".')
45
46
47 def main():
48 parser = argparse.ArgumentParser(description=__doc__)
49 parser.add_argument('--package-id',
50 help=('id of the package to check for. The list of '
51 'available packages and their ids can be obtained '
52 'by running '
53 'third_party/android_tools/sdk/tools/android list '
54 'sdk --extended'))
55 parser.add_argument('--package-location',
56 help='path to the package\'s expected install location.',
57 metavar='DIR')
58 parser.add_argument('--stamp',
59 help=('if specified, a stamp file will be created at the '
60 'provided location.'),
61 metavar='FILE')
62
63 args = parser.parse_args()
64
65 minimum_version = GetRequiredMinimumVersion(args.package_id)
66 CheckPackageVersion(args.package_id, args.package_location, minimum_version)
67
68 # Create the stamp file.
69 if args.stamp:
70 with open(args.stamp, 'a'):
71 os.utime(args.stamp, None)
72
73 sys.exit(0)
74
75 def ExitError(msg):
76 sys.exit(colorama.Fore.MAGENTA + colorama.Style.BRIGHT + msg +
77 colorama.Fore.RESET)
78
79
80 def GetRequiredMinimumVersion(package_id):
81 with open(SDK_EXTRAS_JSON_FILE, 'r') as json_file:
82 packages = json.load(json_file)
83
84 for package in packages:
85 if package['package_id'] == package_id:
86 return int(package['version'].split('.')[0])
87
88 ExitError(REQUIRED_VERSION_ERROR_MSG.format(package_id=package_id))
89
90
91 def CheckPackageVersion(pkg_id, location, minimum_version):
92 version_file_path = os.path.join(location, 'source.properties')
93 # Extracts the version of the package described by the property file. We only
94 # care about the major version number here.
95 version_pattern = re.compile(PACKAGE_VERSION_PATTERN, re.MULTILINE)
96
97 if not os.path.isfile(version_file_path):
98 ExitError(PKG_NOT_FOUND_MSG.format(
99 package_id=pkg_id,
100 checked_location=location,
101 script=UDPATE_SCRIPT_PATH))
102
103 with open(version_file_path, 'r') as f:
104 match = version_pattern.search(f.read())
105
106 if not match:
107 ExitError(PKG_NOT_FOUND_MSG.format(
108 package_id=pkg_id,
109 checked_location=location,
110 script=UDPATE_SCRIPT_PATH))
111
112 pkg_version = int(match.group('version'))
113 if pkg_version < minimum_version:
114 ExitError(UPDATE_NEEDED_MSG.format(
115 package_id=pkg_id,
116 minimum_version=minimum_version,
117 actual_version=pkg_version,
118 script=UDPATE_SCRIPT_PATH))
119
120 # Everything looks ok, print nothing.
121
122
123 if __name__ == '__main__':
124 main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698