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, |