--- /dev/null
+
+
+import re
+from buildbot.steps.source import SVN
+from buildbot.steps.shell import ShellCommand
+from buildbot.steps.transfer import FileDownload
+
+from buildbot.status import builder
+from buildbot.status.builder import SUCCESS,FAILURE, EXCEPTION,WARNINGS
+
+from buildbot.process.properties import WithProperties
+
+
+# Define a new builder status
+# Configure return the exit code 77 when the target platform don't
+# bear ucontext functionnality. In this case the CustomConfigure returns
+# INCOMPATIBLE_PLATFORM.
+
+"""
+CustomConfigure class for master-side representation of the
+custom configure command. This class considers the error (exit code 77)
+that occurs when the platform target don't bear ucontext functionnality.
+"""
+class CustomConfigure(ShellCommand):
+
+ 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 sets self.incompatible
+ # in this case.
+
+ def evaluateCommand(self, cmd):
+ """Decide whether the command was SUCCESS, FAILURE or incompatible platform"""
+
+ if cmd.rc == 0:
+ return SUCCESS
+ elif cmd.rc == 77:
+ self.incompatible = True
+ return FAILURE
+ else:
+ return FAILURE
+
+ # Override getColor method. The method returns the text "blue" when platform is incompatible
+
+ def getColor(self, cmd, results):
+ assert results in (SUCCESS, WARNINGS, FAILURE)
+ if results == SUCCESS:
+ return "green"
+ elif results == WARNINGS:
+ return "orange"
+ elif self.incompatible:
+ return "blue"
+ else:
+ return "red"
+
+ # Override getText method. The method calls describe method
+ # with the text "failed {incompatible platform}" when the platform
+ # don't support ucontext functionnality.
+
+ def getText(self, cmd, results):
+ if results == SUCCESS:
+ return self.describe(True) + ["Configure success"]
+ elif results == WARNINGS:
+ return self.describe(True) + ["warnings"]
+ 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 []
+
+
+"""
+Cleanup the build dir, and setup a SVN revision in the waterfall afterward
+"""
+class CleanupCommand(ShellCommand):
+ name="cleanup"
+ descriptionDone="cleanup"
+ command=["bash","-c","rm -rf * .svn"]
+
+ def maybeGetText2(self,cmd,results):
+ if self.build.getProperty("revision") == None:
+ return ["Missing svn revision"]
+ return ["SVN r%s" % self.build.getProperty("revision")]
+
+"""
+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 r%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]