| Index: tools/dartium/deploy_aar.py
|
| diff --git a/tools/dartium/deploy_aar.py b/tools/dartium/deploy_aar.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..d2841f452dd85523d01f28b80e88ff9fb430ca02
|
| --- /dev/null
|
| +++ b/tools/dartium/deploy_aar.py
|
| @@ -0,0 +1,140 @@
|
| +#!/usr/bin/env python
|
| +#
|
| +# Copyright (c) 2014 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 glob
|
| +import optparse
|
| +import os.path
|
| +import re
|
| +import subprocess
|
| +import sys
|
| +import utils
|
| +
|
| +# FIXME: integrate this helper script into the build instead of hardcoding
|
| +# these paths.
|
| +RESOURCE_AAR_PATTERN = 'content_shell_apk/resource_aar/*.aar'
|
| +CONTENT_SHELL_APK_AAR = 'content_shell_apk/content_shell_apk.aar'
|
| +
|
| +SRC_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
| +DART_DIR = os.path.join(SRC_PATH, 'dart')
|
| +CHROME_VERSION_PATH = os.path.join(SRC_PATH, 'chrome', 'VERSION')
|
| +
|
| +def main():
|
| + parser = optparse.OptionParser()
|
| + parser.add_option('--mode', dest='mode',
|
| + action='store', type='string',
|
| + help='Build mode (Debug or Release)')
|
| + parser.add_option('--repo', action='store', type='string',
|
| + help='Local Maven repository (defaults to ~/.m2)')
|
| + (options, args) = parser.parse_args()
|
| + mode = options.mode
|
| + version = GetVersion()
|
| + if not (mode in ['debug', 'release']):
|
| + raise Exception('Invalid build mode')
|
| +
|
| + mode = 'Debug' if mode == 'debug' else 'Release'
|
| +
|
| + build_root = os.path.join('out', mode)
|
| +
|
| + aars = glob.glob(os.path.join(build_root, RESOURCE_AAR_PATTERN))
|
| + aars.append(os.path.join(build_root, CONTENT_SHELL_APK_AAR))
|
| +
|
| + flags = [
|
| + '-DgroupId=org.dartlang',
|
| + '-Dversion=%s' % version,
|
| + '-Dpackaging=aar'
|
| + ]
|
| + if options.repo:
|
| + flags.append('-DlocalRepositoryPath=%s' % options.repo)
|
| +
|
| + for aar_file in aars:
|
| + artifact_id = os.path.splitext(os.path.basename(aar_file))[0]
|
| + cmd = [
|
| + 'mvn',
|
| + 'install:install-file',
|
| + '-Dfile=%s' % aar_file,
|
| + '-DartifactId=%s' % artifact_id,
|
| + ]
|
| + cmd.extend(flags)
|
| + utils.runCommand(cmd)
|
| +
|
| +def GetVersion():
|
| + version = GetChromeVersion()
|
| + return '%d.%d.%d-%05d-%06d' % (
|
| + version[0],
|
| + version[1],
|
| + version[2],
|
| + version[3],
|
| + GetDartSVNRevision())
|
| +
|
| +def GetChromeVersion():
|
| + version = []
|
| + for line in file(CHROME_VERSION_PATH).readlines():
|
| + version.append(int(line.strip().split('=')[1]))
|
| +
|
| + return version
|
| +
|
| +def GetDartSVNRevision():
|
| + # When building from tarball use tools/SVN_REVISION
|
| + svn_revision_file = os.path.join(DART_DIR, 'tools', 'SVN_REVISION')
|
| + try:
|
| + with open(svn_revision_file) as fd:
|
| + return int(fd.read())
|
| + except:
|
| + pass
|
| +
|
| + custom_env = dict(os.environ)
|
| + custom_env['LC_MESSAGES'] = 'en_GB'
|
| + p = subprocess.Popen(['svn', 'info'], stdout = subprocess.PIPE,
|
| + stderr = subprocess.STDOUT, shell = IsWindows(),
|
| + env = custom_env,
|
| + cwd = DART_DIR)
|
| + output, _ = p.communicate()
|
| + revision = ParseSvnInfoOutput(output)
|
| + if revision:
|
| + return int(revision)
|
| +
|
| + # Check for revision using git (Note: we can't use git-svn because in a
|
| + # pure-git checkout, "git-svn anyCommand" just hangs!). We look an arbitrary
|
| + # number of commits backwards (100) to get past any local commits.
|
| + p = subprocess.Popen(['git', 'log', '-100'], stdout = subprocess.PIPE,
|
| + stderr = subprocess.STDOUT, shell=IsWindows(), cwd = DART_DIR)
|
| + output, _ = p.communicate()
|
| + revision = ParseGitInfoOutput(output)
|
| + if revision:
|
| + return int(revision)
|
| +
|
| + # In the rare off-chance that git log -100 doesn't have a svn repo number,
|
| + # attempt to use "git svn info."
|
| + p = subprocess.Popen(['git', 'svn', 'info'], stdout = subprocess.PIPE,
|
| + stderr = subprocess.STDOUT, shell=IsWindows(), cwd = DART_DIR)
|
| + output, _ = p.communicate()
|
| + revision = ParseSvnInfoOutput(output)
|
| + if revision:
|
| + return int(revision)
|
| +
|
| + # Only fail on the buildbot in case of a SVN client version mismatch.
|
| + user = GetUserName()
|
| + return '0'
|
| +
|
| +def ParseGitInfoOutput(output):
|
| + """Given a git log, determine the latest corresponding svn revision."""
|
| + for line in output.split('\n'):
|
| + tokens = line.split()
|
| + if len(tokens) > 0 and tokens[0] == 'git-svn-id:':
|
| + return tokens[1].split('@')[1]
|
| + return None
|
| +
|
| +def ParseSvnInfoOutput(output):
|
| + revision_match = re.search('Last Changed Rev: (\d+)', output)
|
| + if revision_match:
|
| + return revision_match.group(1)
|
| + return None
|
| +
|
| +def IsWindows():
|
| + return (sys.platform=='win32')
|
| +
|
| +if __name__ == '__main__':
|
| + main()
|
|
|