+import re
from buildbot.process import step
-from buildbot.process.step import ShellCommand
+from buildbot.process.step import ShellCommand, SVN
from buildbot.status import builder
from buildbot.status.builder import SUCCESS,FAILURE, EXCEPTION,WARNINGS
# bear ucontext functionnality. In this case the CustomConfigure returns
# INCOMPATIBLE_PLATFORM.
-INCOMPATIBLE_PLATFORM = EXCEPTION +1
-
"""
CustomConfigure class for master-side representation of the
custom configure command. This class considers the error (exit code 77)
name = "configure"
description = ["running configure"]
descriptionDone = [name]
+ incompatible = False
# Override evaluateCommand method to handle the case of platform that
- # don't support ucontext. The method returns INCOMPATIBLE_PLATFORM
+ # don't support ucontext. The method returns sets self.incompatible
# in this case.
def evaluateCommand(self, cmd):
- """Decide whether the command was SUCCESS, INCOMPATIBLE_PLATFORM,
- or FAILURE."""
+ """Decide whether the command was SUCCESS, FAILURE or incompatible platform"""
if cmd.rc == 0:
return SUCCESS
elif cmd.rc == 77:
- builder.Results.append('incompatible_platform')
- return INCOMPATIBLE_PLATFORM
+ self.incompatible = True
+ return FAILURE
else:
- return FAILURE
+ return FAILURE
- # Override getColor method. The method returns the text "yellow"
- # when the results parameter is INCOMPATIBLE_PLATFORM.
+ # Override getColor method. The method returns the text "blue" when platform is incompatible
def getColor(self, cmd, results):
- assert results in (SUCCESS, WARNINGS, FAILURE,INCOMPATIBLE_PLATFORM)
+ assert results in (SUCCESS, WARNINGS, FAILURE)
if results == SUCCESS:
return "green"
elif results == WARNINGS:
return "orange"
- elif results == INCOMPATIBLE_PLATFORM:
- return "bleu"
+ elif self.incompatible:
+ return "blue"
else:
return "red"
return self.describe(True) + ["Configure success"]
elif results == WARNINGS:
return self.describe(True) + ["warnings"]
- elif results == INCOMPATIBLE_PLATFORM:
+ elif self.incompatible:
return self.describe(True) + ["failed {incompatible platform}"]
else:
return self.describe(True) + ["failed"]
+ def maybeGetText2(self, cmd, results):
+ if results == SUCCESS:
+ pass
+ elif results == WARNINGS:
+ pass
+ elif self.incompatible:
+ return ["incompatible platform"]
+ else:
+ return self.describe(True) + ["failed"]
+ return []
+
-
+"""
+Just like a plain SVN, but displays the current revision in the waterfall afterall
+"""
+class CustomSVN(SVN):
+ def getText(self,cmd,results):
+ lines = cmd.logs['stdio'].getText()
+ r = re.search(' (\d+).',lines)
+ if results == SUCCESS and r:
+ return self.describe(True) + ["updated to %s" % r.group(1)]
+ elif results == SUCCESS:
+ return self.describe(True) + ["updated to some version"]
+ else:
+ return self.describe(True) + ["failed"]
+
+ def maybeGetText2(self,cmd,results):
+ lines = cmd.logs['stdio'].getText()
+ r = re.search(' (\d+).',lines)
+ if results == SUCCESS and r:
+ return ["SVN revision %s" % r.group(1)]
+ else:
+ return []
+
+"""
+CustomCheck class for master-side representation of the checkall results.
+This class stores and displays the amount of errors in the checks.
+"""
+class CustomCheck(ShellCommand):
+ name = "check"
+ description = ["running checks"]
+ descriptionDone = [name]
+
+
+ # Override per step getText method.
+ def getText(self, cmd, results):
+ lines = cmd.logs['stdio'].getText().split("\n")
+ re.compile('^FAIL:')
+ fail = len( filter(lambda line: re.search('^FAIL:', line), lines) )
+ re.compile('^XFAIL:')
+ xfail = len( filter(lambda line: re.search('^XFAIL:', line), lines) )
+ re.compile('^SKIP:')
+ skip = len( filter(lambda line: re.search('^SKIP:', line), lines) )
+ re.compile('^XPASS:')
+ xpass = len( filter(lambda line: re.search('^XPASS:', line), lines) )
+ re.compile('^PASS:')
+ passed = len( filter(lambda line: re.search('^PASS:', line), lines) )
+
+ res = ""
+ if fail != 0:
+ res += ("%d failed, " % fail)
+ if skip != 0:
+ res += ("%d skipped, " % skip)
+ if xpass != 0:
+ res += ("%d unexpected success, " % xpass)
+ if xfail != 0:
+ res += ("%d expected failure, " % xfail)
+ res += ("%d total" % (passed + fail + skip + xpass + xfail))
+
+ if results == SUCCESS:
+ return self.describe(True) + ["Success (%s)" % res]
+ elif results == WARNINGS:
+ return self.describe(True) + ["warnings"]
+ elif fail == 0:
+ return self.describe(True) + ["failed strangly"]
+ else:
+ return self.describe(True) + [res]
+
+ # Add some text to the top-column box
+ def getText2(self, cmd, results):
+ lines = cmd.logs['stdio'].getText().split("\n")
+ re.compile('^FAIL:')
+ fail = len( filter(lambda line: re.search('^FAIL:', line), lines) )
+ re.compile('^XFAIL:')
+ xfail = len( filter(lambda line: re.search('^XFAIL:', line), lines) )
+ re.compile('^SKIP:')
+ skip = len( filter(lambda line: re.search('^SKIP:', line), lines) )
+ re.compile('^XPASS:')
+ xpass = len( filter(lambda line: re.search('^XPASS:', line), lines) )
+ re.compile('^PASS:')
+ passed = len( filter(lambda line: re.search('^PASS:', line), lines) )
+
+ res = ""
+ if fail != 0:
+ res += ("%d failed, " % fail)
+ if skip != 0:
+ res += ("%d skipped, " % skip)
+ if xpass != 0:
+ res += ("%d unexpected success, " % xpass)
+ if xfail != 0:
+ res += ("%d expected failure, " % xfail)
+ res += ("%d total" % (passed + fail + skip + xpass + xfail))
+
+ if results == SUCCESS:
+ return ["All tests ok (%s)" % res]
+ elif results == WARNINGS:
+ return ["Warnings (%s)" % res]
+ elif fail == 0:
+ return ["Tests failed strangly"]
+ else:
+ return [res]