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

Unified Diff: master/skia_master_scripts/skia_build_step.py

Issue 316333002: display "latest GM failures" link in its own line under build step Base URL: https://skia.googlesource.com/buildbot.git@master
Patch Set: Created 6 years, 6 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
Index: master/skia_master_scripts/skia_build_step.py
diff --git a/master/skia_master_scripts/skia_build_step.py b/master/skia_master_scripts/skia_build_step.py
index 0efbccd08850ffa26c2e66587f18fb83dcbe61b6..f771e7792fb6496f33d7220d2f963be5829b3e90 100644
--- a/master/skia_master_scripts/skia_build_step.py
+++ b/master/skia_master_scripts/skia_build_step.py
@@ -16,14 +16,18 @@ class SkiaBuildStep(retcode_command.ReturnCodeCommand):
to by BuildStep.getProperty() are scoped for the entire duration of the build.
"""
def __init__(self, is_upload_step=False, is_rebaseline_step=False,
- get_props_from_stdout=None, exception_on_failure=False,
- **kwargs):
+ get_links_from_stdout=None, get_props_from_stdout=None,
+ exception_on_failure=False, **kwargs):
""" Instantiates a new SkiaBuildStep.
is_upload_step: boolean indicating whether this step should be skipped when
the buildbot is not performing uploads.
is_rebaseline_step: boolean indicating whether this step is required for
rebaseline-only builds.
+ get_links_from_stdout: optional dictionary. Keys are strings indicating
+ link text to set based on the output of this step. Values are
+ strings containing regular expressions for parsing the linked URL from
+ the output of the step.
get_props_from_stdout: optional dictionary. Keys are strings indicating
build properties to set based on the output of this step. Values are
strings containing regular expressions for parsing the property from
@@ -36,6 +40,7 @@ class SkiaBuildStep(retcode_command.ReturnCodeCommand):
"""
self._is_upload_step = is_upload_step
self._is_rebaseline_step = is_rebaseline_step
+ self._get_links_from_stdout = get_links_from_stdout
self._get_props_from_stdout = get_props_from_stdout
self._exception_on_failure = exception_on_failure
@@ -57,28 +62,41 @@ class SkiaBuildStep(retcode_command.ReturnCodeCommand):
""" Override of BuildStep's commandComplete method which allows us to parse
build properties from the output of this step. """
- # We make a best effort to parse the properties out of stdout, whether
- # the command succeeded or failed. If the command succeeded, we
- # definitely expect the property to be found in stdout--if not, raise
- # an exception.
- if self._get_props_from_stdout:
+ if self._get_props_from_stdout or self._get_links_from_stdout:
log = cmd.logs['stdio']
stdout = ''.join(log.getChunks([STDOUT], onlyText=True))
borenet 2014/06/06 12:10:34 This is probably a performance killer. Seems like
epoger 2014/06/09 13:33:29 I don't know how the chunks are split. It would n
self._changed_props = {}
- for prop, regex in self._get_props_from_stdout.iteritems():
- matches = re.search(regex, stdout)
- if not matches:
- if cmd.rc == 0:
- raise Exception('Unable to parse %s from stdout.' % prop)
- continue
- groups = matches.groups()
- if len(groups) != 1:
- if cmd.rc == 0:
- raise Exception('Multiple matches for "%s"' % regex)
- continue
- prop_value = groups[0]
- self.setProperty(prop, prop_value, ''.join(self.description))
- self._changed_props[prop] = prop_value
+
+ # We make a best effort to parse the properties out of stdout, whether
+ # the command succeeded or failed. If the command succeeded, we
+ # definitely expect the property to be found in stdout--if not, raise
+ # an exception.
+ if self._get_props_from_stdout:
+ for prop, regex in self._get_props_from_stdout.iteritems():
+ matches = re.search(regex, stdout)
+ if not matches:
+ if cmd.rc == 0:
+ raise Exception('Unable to parse %s from stdout.' % prop)
+ continue
+ groups = matches.groups()
+ if len(groups) != 1:
+ if cmd.rc == 0:
+ raise Exception('Multiple matches for "%s"' % regex)
+ continue
+ prop_value = groups[0]
+ self.setProperty(prop, prop_value, ''.join(self.description))
+ self._changed_props[prop] = prop_value
+
+ # If there might be URL links we want in stdout, look for them;
+ # their presence is optional, though, so we don't throw an exception
+ # if they are not found.
+ if self._get_links_from_stdout:
+ for name, regex in self._get_links_from_stdout.iteritems():
+ matches = re.search(regex, stdout)
+ if matches:
+ groups = matches.groups()
+ for url in groups:
+ self.addURL(name, url)
if (cmd.rc not in (0, retcode_command.ReturnCodeCommand.RETCODE_WARNINGS)
and self._exception_on_failure):

Powered by Google App Engine
This is Rietveld 408576698