def stepDone(self, result, step): """This method is called when the BuildStep completes. It is passed a status object from the BuildStep and is responsible for merging the Step's results into those of the overall Build.""" terminate = False text = None if type(result) == types.TupleType: result, text = result assert type(result) == type(SUCCESS) log.msg(" step '%s' complete: %s" % (step.name, Results[result])) self.results.append(result) if text: self.text.extend(text) if not self.remote: terminate = True possible_overall_result = result if result == FAILURE: if not step.flunkOnFailure: possible_overall_result = SUCCESS if step.warnOnFailure: possible_overall_result = WARNINGS if step.flunkOnFailure: possible_overall_result = FAILURE if step.haltOnFailure: terminate = True elif result == WARNINGS: if not step.warnOnWarnings: possible_overall_result = SUCCESS else: possible_overall_result = WARNINGS if step.flunkOnWarnings: possible_overall_result = FAILURE elif result in (EXCEPTION, RETRY): terminate = True # if we skipped this step, then don't adjust the build status if result != SKIPPED: self.result = worst_status(self.result, possible_overall_result) return terminate