Commit 2cf1510e authored by Quinten Yearsley's avatar Quinten Yearsley Committed by Commit Bot

webkitpy git_cl: Handle build urls with unexpected formats

Bug: 732432
Change-Id: Id9b1ef6f89c03b3bddc2d3b5a4a8ed1d901dae98
Reviewed-on: https://chromium-review.googlesource.com/531664
Commit-Queue: Xianzhu Wang <wangxianzhu@chromium.org>
Reviewed-by: default avatarXianzhu Wang <wangxianzhu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#478732}
parent c76f7eb3
......@@ -104,17 +104,22 @@ class GitCL(object):
A dict mapping Build objects to TryJobSTatus objects, with
only the latest jobs included.
"""
try_results = self.try_job_results()
try_results = self.try_job_results(builder_names)
builds = try_results.keys()
if builder_names:
builds = [b for b in builds if b.builder_name in builder_names]
latest_builds = filter_latest_builds(builds)
return {b: s for b, s in try_results.items() if b in latest_builds}
def try_job_results(self):
def try_job_results(self, builder_names=None):
"""Returns a dict mapping Build objects to TryJobStatus objects."""
raw_results = self.fetch_raw_try_job_results()
return {self._build(r): self._try_job_status(r) for r in raw_results}
build_to_status = {}
for result in raw_results:
if builder_names and result['builder_name'] not in builder_names:
continue
build_to_status[self._build(result)] = self._try_job_status(result)
return build_to_status
def fetch_raw_try_job_results(self):
"""Requests results of try jobs for the current CL and the parsed JSON.
......@@ -139,6 +144,7 @@ class GitCL(object):
if url is None:
return Build(builder_name, None)
match = re.match(r'.*/builds/(\d+)?$', url)
assert match, '%s did not match expected format' % url
build_number = match.group(1)
assert build_number and build_number.isdigit()
return Build(builder_name, int(build_number))
......
......@@ -176,3 +176,21 @@ class GitCLTest(unittest.TestCase):
Build('builder-a', 100): TryJobStatus('COMPLETED', 'FAILURE'),
Build('builder-b', 200): TryJobStatus('COMPLETED', 'FAILURE'),
})
def test_try_job_results_no_build_number_in_url(self):
git_cl = GitCL(MockHost())
git_cl.fetch_raw_try_job_results = lambda: [
{
'builder_name': 'builder-a',
'status': 'COMPLETED',
'result': 'FAILURE',
'failure_reason': 'BUILD_FAILURE',
'url': 'https://luci-milo.appspot.com/swarming/task/36a767f405d9ee10',
},
]
# By default, we try to parse a build number from the URL, which
# fails for some URLs.
with self.assertRaisesRegexp(AssertionError, '36a767f405d9ee10 did not match'):
git_cl.try_job_results()
# If we explicitly don't care about that builder, then we ignore it.
self.assertEqual(git_cl.try_job_results(['other-builder']), {})
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