diff --git a/master/buildbot/status/github.py b/master/buildbot/status/github.py index dd08b854c79..6d05bef90b5 100644 --- a/master/buildbot/status/github.py +++ b/master/buildbot/status/github.py @@ -31,6 +31,49 @@ from buildbot.status.builder import FAILURE from buildbot.status.builder import SUCCESS +_STATE_MAP = { + SUCCESS: 'success', + FAILURE: 'failure', +} + + +def _getGitHubState(results): + """ + Convert Buildbot states into GitHub states. + """ + # GitHub defines `success`, `failure` and `error` states. + # We explicitly map success and failure. Any other BuildBot status + # is converted to `error`. + return _STATE_MAP.get(results, 'error') + + +def _timeDeltaToHumanReadable(start, end): + """ + Return a string of human readable time delta. + """ + start_date = datetime.fromtimestamp(start) + end_date = datetime.fromtimestamp(end) + delta = end_date - start_date + + result = [] + if delta.days > 0: + result.append('%d days' % (delta.days,)) + if delta.seconds > 0: + hours = delta.seconds / 3600 + if hours > 0: + result.append('%d hours' % (hours,)) + minutes = (delta.seconds - hours * 3600) / 60 + if minutes: + result.append('%d minutes' % (minutes,)) + seconds = delta.seconds % 60 + if seconds > 0: + result.append('%d seconds' % (seconds,)) + + if result: + return ', '.join(result) + else: + return 'super fast' + class GitHubStatus(StatusReceiverMultiService): """ @@ -128,9 +171,9 @@ def _sendFinishStatus(self, builderName, build, results): if not status: defer.returnValue(None) - state = self._getGitHubState(results) + state = _getGitHubState(results) (startTime, endTime) = build.getTimes() - duration = self._timeDeltaToHumanReadable(startTime, endTime) + duration = _timeDeltaToHumanReadable(startTime, endTime) description = yield build.render(self._endDescription) status.update({ @@ -145,33 +188,6 @@ def _sendFinishStatus(self, builderName, build, results): result = yield self._sendGitHubStatus(status) defer.returnValue(result) - def _timeDeltaToHumanReadable(self, start, end): - """ - Return a string of human readable time delta. - """ - start_date = datetime.fromtimestamp(start) - end_date = datetime.fromtimestamp(end) - delta = end_date - start_date - - result = [] - if delta.days > 0: - result.append('%d days' % (delta.days,)) - if delta.seconds > 0: - hours = delta.seconds / 3600 - if hours > 0: - result.append('%d hours' % (hours,)) - minutes = (delta.seconds - hours * 3600) / 60 - if minutes: - result.append('%d minutes' % (minutes,)) - seconds = delta.seconds % 60 - if seconds > 0: - result.append('%d seconds' % (seconds,)) - result = ', '.join(result) - if not result: - return 'super fast' - else: - return result - @defer.inlineCallbacks def _getGitHubRepoProperties(self, build): """ @@ -199,23 +215,6 @@ def _getGitHubRepoProperties(self, build): } defer.returnValue(result) - def _getGitHubState(self, results): - """ - Convert Buildbot states into GitHub states. - """ - # GitHub defines `success`, `failure` and `error` states. - # We explicitly map success and failure. Any other BuildBot status - # is converted to `error`. - state_map = { - SUCCESS: 'success', - FAILURE: 'failure', - } - - try: - return state_map[results] - except KeyError: - return 'error' - def _sendGitHubStatus(self, status): """ Send status to GitHub API. diff --git a/master/buildbot/test/unit/test_status_github.py b/master/buildbot/test/unit/test_status_github.py index d81dc46860a..20ae62b4470 100644 --- a/master/buildbot/test/unit/test_status_github.py +++ b/master/buildbot/test/unit/test_status_github.py @@ -35,6 +35,8 @@ txgithub = None else: from buildbot.status.github import GitHubStatus + from buildbot.status.github import _timeDeltaToHumanReadable + from buildbot.status.github import _getGitHubState from buildbot.test.fake.fakebuild import FakeBuild from buildbot.test.util import logging @@ -330,31 +332,31 @@ def test_timeDeltaToHumanReadable(self): """ It will return a human readable time difference. """ - result = self.status._timeDeltaToHumanReadable(1, 1) + result = _timeDeltaToHumanReadable(1, 1) self.assertEqual('super fast', result) - result = self.status._timeDeltaToHumanReadable(1, 2) + result = _timeDeltaToHumanReadable(1, 2) self.assertEqual('1 seconds', result) - result = self.status._timeDeltaToHumanReadable(1, 61) + result = _timeDeltaToHumanReadable(1, 61) self.assertEqual('1 minutes', result) - result = self.status._timeDeltaToHumanReadable(1, 62) + result = _timeDeltaToHumanReadable(1, 62) self.assertEqual('1 minutes, 1 seconds', result) - result = self.status._timeDeltaToHumanReadable(1, 60 * 60 + 1) + result = _timeDeltaToHumanReadable(1, 60 * 60 + 1) self.assertEqual('1 hours', result) - result = self.status._timeDeltaToHumanReadable(1, 60 * 60 + 61) + result = _timeDeltaToHumanReadable(1, 60 * 60 + 61) self.assertEqual('1 hours, 1 minutes', result) - result = self.status._timeDeltaToHumanReadable(1, 60 * 60 + 62) + result = _timeDeltaToHumanReadable(1, 60 * 60 + 62) self.assertEqual('1 hours, 1 minutes, 1 seconds', result) - result = self.status._timeDeltaToHumanReadable(1, 24 * 60 * 60 + 1) + result = _timeDeltaToHumanReadable(1, 24 * 60 * 60 + 1) self.assertEqual('1 days', result) - result = self.status._timeDeltaToHumanReadable(1, 24 * 60 * 60 + 2) + result = _timeDeltaToHumanReadable(1, 24 * 60 * 60 + 2) self.assertEqual('1 days, 1 seconds', result) def test_getGitHubRepoProperties_skip_no_sha(self): @@ -421,14 +423,9 @@ def test_getGitHubState(self): _getGitHubState will try to translate BuildBot status into GitHub status. For unknown values will fallback to 'error'. """ - self.assertEqual( - 'success', self.status._getGitHubState(SUCCESS)) - - self.assertEqual( - 'failure', self.status._getGitHubState(FAILURE)) - - self.assertEqual( - 'error', self.status._getGitHubState('anything-else')) + self.assertEqual('success', _getGitHubState(SUCCESS)) + self.assertEqual('failure', _getGitHubState(FAILURE)) + self.assertEqual('error', _getGitHubState('anything-else')) def test_sendGitHubStatus_success(self): """