Commit 66958462 authored by Zhiling Huang's avatar Zhiling Huang Committed by Commit Bot

Make mb take in multiple isolate maps.

Bug: 726431
Change-Id: Ia8b6e3ccbf2f66b1038c6a15be03899367859965
Reviewed-on: https://chromium-review.googlesource.com/896570Reviewed-by: default avatarJohn Budorick <jbudorick@chromium.org>
Commit-Queue: Zhiling Huang <hzl@chromium.org>
Cr-Commit-Position: refs/heads/master@{#534209}
parent c99f917c
......@@ -91,9 +91,11 @@ class MetaBuildWrapper(object):
help='path to config file '
'(default is %(default)s)')
subp.add_argument('-i', '--isolate-map-file', metavar='PATH',
default=self.default_isolate_map,
help='path to isolate map file '
'(default is %(default)s)')
'(default is %(default)s)',
default=[],
action='append',
dest='isolate_map_files')
subp.add_argument('-g', '--goma-dir',
help='path to goma directory')
subp.add_argument('--android-version-code',
......@@ -581,14 +583,26 @@ class MetaBuildWrapper(object):
self.mixins = contents['mixins']
def ReadIsolateMap(self):
if not self.Exists(self.args.isolate_map_file):
raise MBErr('isolate map file not found at %s' %
self.args.isolate_map_file)
try:
return ast.literal_eval(self.ReadFile(self.args.isolate_map_file))
except SyntaxError as e:
raise MBErr('Failed to parse isolate map file "%s": %s' %
(self.args.isolate_map_file, e))
if not self.args.isolate_map_files:
self.args.isolate_map_files = [self.default_isolate_map]
for f in self.args.isolate_map_files:
if not self.Exists(f):
raise MBErr('isolate map file not found at %s' % f)
isolate_maps = {}
for isolate_map in self.args.isolate_map_files:
try:
isolate_map = ast.literal_eval(self.ReadFile(isolate_map))
duplicates = set(isolate_map).intersection(isolate_maps)
if duplicates:
raise MBErr(
'Duplicate targets in isolate map files: %s.' %
', '.join(duplicates))
isolate_maps.update(isolate_map)
except SyntaxError as e:
raise MBErr(
'Failed to parse isolate map file "%s": %s' % (isolate_map, e))
return isolate_maps
def ConfigFromArgs(self):
if self.args.config:
......
......@@ -437,6 +437,75 @@ class UnitTest(unittest.TestCase):
mbw.files)
def test_multiple_isolate_maps(self):
files = {
'/tmp/swarming_targets': 'cc_perftests\n',
'/fake_src/testing/buildbot/gn_isolate_map.pyl': (
"{'cc_perftests': {"
" 'label': '//cc:cc_perftests',"
" 'type': 'raw',"
" 'args': [],"
"}}\n"
),
'/fake_src/testing/buildbot/gn_isolate_map2.pyl': (
"{'cc_perftests2': {"
" 'label': '//cc:cc_perftests',"
" 'type': 'raw',"
" 'args': [],"
"}}\n"
),
'c:\\fake_src\out\Default\cc_perftests.exe.runtime_deps': (
"cc_perftests\n"
),
}
mbw = self.fake_mbw(files=files, win32=True)
self.check(['gen',
'-c', 'debug_goma',
'--swarming-targets-file', '/tmp/swarming_targets',
'--isolate-map-file',
'/fake_src/testing/buildbot/gn_isolate_map.pyl',
'--isolate-map-file',
'/fake_src/testing/buildbot/gn_isolate_map2.pyl',
'//out/Default'], mbw=mbw, ret=0)
self.assertIn('c:\\fake_src\\out\\Default\\cc_perftests.isolate',
mbw.files)
self.assertIn('c:\\fake_src\\out\\Default\\cc_perftests.isolated.gen.json',
mbw.files)
def test_duplicate_isolate_maps(self):
files = {
'/tmp/swarming_targets': 'cc_perftests\n',
'/fake_src/testing/buildbot/gn_isolate_map.pyl': (
"{'cc_perftests': {"
" 'label': '//cc:cc_perftests',"
" 'type': 'raw',"
" 'args': [],"
"}}\n"
),
'/fake_src/testing/buildbot/gn_isolate_map2.pyl': (
"{'cc_perftests': {"
" 'label': '//cc:cc_perftests',"
" 'type': 'raw',"
" 'args': [],"
"}}\n"
),
'c:\\fake_src\out\Default\cc_perftests.exe.runtime_deps': (
"cc_perftests\n"
),
}
mbw = self.fake_mbw(files=files, win32=True)
# Check that passing duplicate targets into mb fails.
self.check(['gen',
'-c', 'debug_goma',
'--swarming-targets-file', '/tmp/swarming_targets',
'--isolate-map-file',
'/fake_src/testing/buildbot/gn_isolate_map.pyl',
'--isolate-map-file',
'/fake_src/testing/buildbot/gn_isolate_map2.pyl',
'//out/Default'], mbw=mbw, ret=1)
def test_isolate(self):
files = {
'/fake_src/out/Default/toolchain.ninja': "",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment