Chromium Code Reviews| Index: gm/rebaseline_server/server.py |
| diff --git a/gm/rebaseline_server/server.py b/gm/rebaseline_server/server.py |
| index 6062aed641e1f9581ccc852eaf9f656265682bef..75bd041131affba31d9acb83f7ab5da3f4bd7c01 100755 |
| --- a/gm/rebaseline_server/server.py |
| +++ b/gm/rebaseline_server/server.py |
| @@ -262,6 +262,7 @@ class Server(object): |
| def __init__(self, |
| actuals_dir=DEFAULT_ACTUALS_DIR, |
| json_filename=DEFAULT_JSON_FILENAME, |
| + rietveld_issue=None, |
| gm_summaries_bucket=DEFAULT_GM_SUMMARIES_BUCKET, |
| port=DEFAULT_PORT, export=False, editable=True, |
| reload_seconds=0, config_pairs=None, builder_regex_list=None, |
| @@ -272,6 +273,8 @@ class Server(object): |
| actuals_dir: directory under which we will check out the latest actual |
| GM results |
| json_filename: basename of the JSON summary file to load for each builder |
| + rietveld_issue: download json_filename files from latest trybot runs on |
| + this codereview.chromium.org issue. |
| gm_summaries_bucket: Google Storage bucket to download json_filename |
| files from; if None or '', don't fetch new actual-results files |
| at all, just compare to whatever files are already in actuals_dir |
| @@ -294,6 +297,7 @@ class Server(object): |
| """ |
| self._actuals_dir = actuals_dir |
| self._json_filename = json_filename |
| + self._rietveld_issue = rietveld_issue |
| self._gm_summaries_bucket = gm_summaries_bucket |
| self._port = port |
| self._export = export |
| @@ -385,6 +389,44 @@ class Server(object): |
| with self.results_rlock: |
| if invalidate: |
| self._results = None |
| + |
| + if self._rietveld_issue: |
| + logging.info( |
| + 'Updating GM result summaries in %s from rietveld_issue %s ...' |
| + % (self._actuals_dir, self._rietveld_issue)) |
| + |
| + # Clean out actuals_dir first, in case some builders have gone away |
|
rmistry
2014/11/05 13:39:16
There is a lot of code duplication here with the s
bungeman-skia
2014/11/07 22:56:53
Done.
|
| + # since we last ran. |
| + if os.path.isdir(self._actuals_dir): |
| + shutil.rmtree(self._actuals_dir) |
| + |
| + # Get the list of actuals we care about. |
| + all_actuals = download_actuals.get_rietveld_actuals( |
| + self._rietveld_issue, self._json_filename) |
| + |
| + if self._builder_regex_list: |
| + matching_builders = [] |
| + for builder in all_actuals: |
| + for regex in self._builder_regex_list: |
| + if re.match(regex, builder): |
| + matching_builders.append(builder) |
| + break # go on to the next builder, no need to try more regexes |
| + else: |
| + matching_builders = all_actuals.keys() |
| + |
| + # Download the JSON file for each builder we care about. |
| + # |
| + # TODO(epoger): When this is a large number of builders, we would be |
| + # better off downloading them in parallel! |
| + for builder in matching_builders: |
| + self._gs.download_file( |
| + source_bucket=all_actuals[builder][0], |
| + source_path=all_actuals[builder][1], |
| + source_generation=all_actuals[builder][2], |
| + dest_path=os.path.join(self._actuals_dir, builder, |
| + self._json_filename), |
| + create_subdirs_if_needed=True) |
| + |
| if self._gm_summaries_bucket: |
| logging.info( |
| 'Updating GM result summaries in %s from gm_summaries_bucket %s ...' |
| @@ -899,6 +941,9 @@ def main(): |
| 'to access this server. WARNING: doing so will ' |
| 'allow users on other hosts to modify your ' |
| 'GM expectations, if combined with --editable.')) |
| + parser.add_argument('--rietveld_issue', |
| + help=('Download json_filename files from latest trybot' |
| + 'runs on this codereview.chromium.org issue.')) |
| parser.add_argument('--gm-summaries-bucket', |
| help=('Google Cloud Storage bucket to download ' |
| 'JSON_FILENAME files from. ' |
| @@ -939,6 +984,7 @@ def main(): |
| global _SERVER |
| _SERVER = Server(actuals_dir=args.actuals_dir, |
| json_filename=args.json_filename, |
| + rietveld_issue=args.rietveld_issue, |
| gm_summaries_bucket=args.gm_summaries_bucket, |
| port=args.port, export=args.export, editable=args.editable, |
| reload_seconds=args.reload, config_pairs=config_pairs, |