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

Make generate_buildbot_json load pyl files from arbitrary paths.

This change is to make the generate_buildbot_json script work for
downstream jsons.

Bug: 803245
Change-Id: I63180304d8bb0fe0b4061565e3ce925d02901a70
Reviewed-on: https://chromium-review.googlesource.com/938315Reviewed-by: default avatarJohn Budorick <jbudorick@chromium.org>
Commit-Queue: Zhiling Huang <hzl@chromium.org>
Cr-Commit-Position: refs/heads/master@{#541857}
parent 19ddca77
...@@ -201,9 +201,15 @@ class BBJSONGenerator(object): ...@@ -201,9 +201,15 @@ class BBJSONGenerator(object):
relative_path), 'wb') as fp: # pragma: no cover relative_path), 'wb') as fp: # pragma: no cover
fp.write(contents) # pragma: no cover fp.write(contents) # pragma: no cover
def pyl_file_path(self, filename):
if self.args and self.args.pyl_files_dir:
return os.path.join(self.args.pyl_files_dir, filename)
return filename
def load_pyl_file(self, filename): def load_pyl_file(self, filename):
try: try:
return ast.literal_eval(self.read_file(filename)) return ast.literal_eval(self.read_file(
self.pyl_file_path(filename)))
except (SyntaxError, ValueError) as e: # pragma: no cover except (SyntaxError, ValueError) as e: # pragma: no cover
raise BBGenErr('Failed to parse pyl file "%s": %s' % raise BBGenErr('Failed to parse pyl file "%s": %s' %
(filename, e)) # pragma: no cover (filename, e)) # pragma: no cover
...@@ -598,7 +604,8 @@ class BBJSONGenerator(object): ...@@ -598,7 +604,8 @@ class BBJSONGenerator(object):
for waterfall in self.waterfalls: for waterfall in self.waterfalls:
should_gen = not filters or waterfall['name'] in filters should_gen = not filters or waterfall['name'] in filters
if should_gen: if should_gen:
self.write_file(waterfall['name'] + suffix, file_path = waterfall['name'] + suffix
self.write_file(self.pyl_file_path(file_path),
self.generate_waterfall_json(waterfall)) self.generate_waterfall_json(waterfall))
def check_input_file_consistency(self): def check_input_file_consistency(self):
...@@ -660,7 +667,8 @@ class BBJSONGenerator(object): ...@@ -660,7 +667,8 @@ class BBJSONGenerator(object):
ungenerated_waterfalls = set() ungenerated_waterfalls = set()
for waterfall in self.waterfalls: for waterfall in self.waterfalls:
expected = self.generate_waterfall_json(waterfall) expected = self.generate_waterfall_json(waterfall)
current = self.read_file(waterfall['name'] + '.json') file_path = waterfall['name'] + '.json'
current = self.read_file(self.pyl_file_path(file_path))
if expected != current: if expected != current:
ungenerated_waterfalls.add(waterfall['name']) ungenerated_waterfalls.add(waterfall['name'])
if verbose: # pragma: no cover if verbose: # pragma: no cover
...@@ -693,6 +701,9 @@ class BBJSONGenerator(object): ...@@ -693,6 +701,9 @@ class BBJSONGenerator(object):
parser.add_argument( parser.add_argument(
'waterfall_filters', metavar='waterfalls', type=str, nargs='*', 'waterfall_filters', metavar='waterfalls', type=str, nargs='*',
help='Optional list of waterfalls to generate.') help='Optional list of waterfalls to generate.')
parser.add_argument(
'--pyl-files-dir', type=os.path.realpath,
help='Path to the directory containing the input .pyl files.')
self.args = parser.parse_args(argv) self.args = parser.parse_args(argv)
def main(self, argv): # pragma: no cover def main(self, argv): # pragma: no cover
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
"""Tests for generate_buildbot_json.py.""" """Tests for generate_buildbot_json.py."""
import argparse
import os
import unittest import unittest
import generate_buildbot_json import generate_buildbot_json
...@@ -1111,6 +1113,18 @@ class UnitTest(unittest.TestCase): ...@@ -1111,6 +1113,18 @@ class UnitTest(unittest.TestCase):
fbb.files['chromium.test.json'] = MULTI_DIMENSION_OUTPUT fbb.files['chromium.test.json'] = MULTI_DIMENSION_OUTPUT
fbb.check_output_file_consistency(verbose=True) fbb.check_output_file_consistency(verbose=True)
def test_relative_pyl_file_dir(self):
fbb = FakeBBGen(FOO_GTESTS_WATERFALL,
REUSING_TEST_WITH_DIFFERENT_NAME,
EMPTY_EXCEPTIONS)
fbb.args = argparse.Namespace(pyl_files_dir='relative/path/')
for file_name in list(fbb.files):
fbb.files[os.path.join('relative/path/', file_name)] = (
fbb.files.pop(file_name))
fbb.check_input_file_consistency()
fbb.files['relative/path/chromium.test.json'] = VARIATION_GTEST_OUTPUT
fbb.check_output_file_consistency(verbose=True)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
......
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