Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1375)

Unified Diff: third_party/WebKit/Tools/Scripts/webkitpy/common/net/rietveld.py

Issue 2439693003: rebaseline-cl: Don't trigger new try jobs for builders that already have jobs started. (Closed)
Patch Set: Revert latest_try_job_results to only return a list of Builds again (simpler) Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Tools/Scripts/webkitpy/common/net/rietveld_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Tools/Scripts/webkitpy/common/net/rietveld.py
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/rietveld.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/rietveld.py
index 1d01b2a07f7f99276b4d4085a1203e9ef80705a2..ba4ef1ef5c0e4505819f7118c75f13bb0f6bc1ed 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/rietveld.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/rietveld.py
@@ -20,7 +20,7 @@ class Rietveld(object):
def __init__(self, web):
self.web = web
- def latest_try_job_results(self, issue_number, builder_names=None, patchset_number=None):
+ def latest_try_jobs(self, issue_number, builder_names=None, patchset_number=None):
"""Returns a list of Build objects for builds on the latest patchset.
Args:
@@ -30,8 +30,8 @@ class Rietveld(object):
patchset_number: If given, a specific patchset will be used instead of the latest one.
Returns:
- A dict mapping Build objects to result dicts for the latest build
- for each builder on the latest patchset.
+ A list of Build objects, where Build objects for completed jobs have a build number,
+ and Build objects for pending jobs have no build number.
"""
try:
if patchset_number:
@@ -40,18 +40,22 @@ class Rietveld(object):
url = self._latest_patchset_url(issue_number)
patchset_data = self._get_json(url)
except (urllib2.URLError, ValueError):
- return {}
-
- def build(job):
- return Build(builder_name=job['builder'], build_number=job['buildnumber'])
-
- results = {build(job): job for job in patchset_data['try_job_results']}
+ return []
+
+ builds = []
+ for result_dict in patchset_data['try_job_results']:
+ build = Build(result_dict['builder'], result_dict['buildnumber'])
+ # Normally, a value of -1 or 6 in the "result" field indicates the job is
+ # started or pending, and the "buildnumber" field is null.
+ if build.build_number and result_dict['result'] in (-1, 6):
+ _log.warning('Build %s has result %d, but unexpectedly has a build number.', build, result_dict['result'])
+ build.build_number = None
+ builds.append(build)
if builder_names is not None:
- results = {b: result for b, result in results.iteritems() if b.builder_name in builder_names}
+ builds = [b for b in builds if b.builder_name in builder_names]
- latest_builds = self._filter_latest_builds(list(results))
- return {b: result for b, result in results.iteritems() if b in latest_builds}
+ return self._filter_latest_builds(builds)
def _filter_latest_builds(self, builds):
"""Filters out a collection of Build objects to include only the latest for each builder.
@@ -60,19 +64,17 @@ class Rietveld(object):
jobs: A list of Build objects.
Returns:
- A list of Build objects that contains only the latest build for each builder.
+ A list of Build objects; only one Build object per builder name. If there are only
+ Builds with no build number, then one is kept; if there are Builds with build numbers,
+ then the one with the highest build number is kept.
"""
- builder_to_highest_number = {}
+ builder_to_latest_build = {}
for build in builds:
- if build.build_number > builder_to_highest_number.get(build.builder_name, 0):
- builder_to_highest_number[build.builder_name] = build.build_number
-
- def is_latest_build(build):
- if build.builder_name not in builder_to_highest_number:
- return False
- return builder_to_highest_number[build.builder_name] == build.build_number
-
- return [b for b in builds if is_latest_build(b)]
+ if build.builder_name not in builder_to_latest_build:
+ builder_to_latest_build[build.builder_name] = build
+ elif build.build_number > builder_to_latest_build[build.builder_name].build_number:
+ builder_to_latest_build[build.builder_name] = build
+ return sorted(builder_to_latest_build.values())
def changed_files(self, issue_number):
"""Lists the files included in a CL, or None if this can't be determined.
« no previous file with comments | « no previous file | third_party/WebKit/Tools/Scripts/webkitpy/common/net/rietveld_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698