From 934c8b66fdd72eb7c908ff82600157750cb77db3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Allard?= Date: Wed, 26 Nov 2014 14:08:36 +0100 Subject: [PATCH 1/2] Teach the build to write the properties in the database --- master/buildbot/process/build.py | 13 ++++++++++++ .../buildbot/test/unit/test_process_build.py | 20 +++++++++++++++++++ master/docs/relnotes/index.rst | 2 ++ 3 files changed, 35 insertions(+) diff --git a/master/buildbot/process/build.py b/master/buildbot/process/build.py index a3b59899ffd..ec00a2cf9f4 100644 --- a/master/buildbot/process/build.py +++ b/master/buildbot/process/build.py @@ -403,9 +403,22 @@ def startNextStep(self): self.executedSteps.append(s) self.currentStep = s d = defer.maybeDeferred(s.startStep, self.conn) + d.addBoth(self._flushProperties) d.addCallback(self._stepDone, s) d.addErrback(self.buildException) + @defer.inlineCallbacks + def _flushProperties(self, results): + # `results` is just passed on to the next callback + props = interfaces.IProperties(self) + + properties = props.getProperties().asList() + for name, value, source in properties: + yield self.master.data.updates.setBuildProperty( + self.buildid, name, value, source) + + defer.returnValue(results) + def _stepDone(self, results, step): self.currentStep = None if self.finished: diff --git a/master/buildbot/test/unit/test_process_build.py b/master/buildbot/test/unit/test_process_build.py index 47f695d40ff..a647efb806f 100644 --- a/master/buildbot/test/unit/test_process_build.py +++ b/master/buildbot/test/unit/test_process_build.py @@ -633,6 +633,26 @@ def test_getSummaryStatistic(self): self.assertEqual(b.getSummaryStatistic('casualties', add), 11) self.assertEqual(b.getSummaryStatistic('casualties', add, 10), 21) + @defer.inlineCallbacks + def testflushProperties(self): + b = self.build + class FakeBuildStatus(Mock): + implements(interfaces.IProperties) + b.build_status = FakeBuildStatus() + class Properties(Mock): + def asList(self): + return [(u'p', 5, u'fake'), + (u'p2', ['abc', 9], u'mock')] + b.master.data.updates.setBuildProperty = Mock() + b.build_status.getProperties.return_value = Properties() + b.buildid = 42 + result = 'SUCCESS' + res = yield b._flushProperties(result) + self.assertEquals(res, result) + b.master.data.updates.setBuildProperty.assert_has_calls([ + call(42, u'p', 5, u'fake'), + call(42, u'p2', ['abc', 9], u'mock')]) + class TestMultipleSourceStamps(unittest.TestCase): diff --git a/master/docs/relnotes/index.rst b/master/docs/relnotes/index.rst index 05042d65af2..6d7a0f32c38 100644 --- a/master/docs/relnotes/index.rst +++ b/master/docs/relnotes/index.rst @@ -171,6 +171,8 @@ Fixes * Fixed SVN master-side source step: if a SVN operation fails, the repository end up in a situation when a manual intervention is required. Now if SVN reports such a situation during initial check, the checkout will be clobbered. +* The build properties are now stored in the database in the ``build_properties`` table. + Deprecations, Removals, and Non-Compatible Changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From b19dd1c31607ef9aa7dcd397ce95d9d574fc7edf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Allard?= Date: Wed, 26 Nov 2014 14:11:52 +0100 Subject: [PATCH 2/2] Make pep8 happy. --- master/buildbot/test/unit/test_process_build.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/master/buildbot/test/unit/test_process_build.py b/master/buildbot/test/unit/test_process_build.py index a647efb806f..f6a4238dd57 100644 --- a/master/buildbot/test/unit/test_process_build.py +++ b/master/buildbot/test/unit/test_process_build.py @@ -636,10 +636,13 @@ def test_getSummaryStatistic(self): @defer.inlineCallbacks def testflushProperties(self): b = self.build + class FakeBuildStatus(Mock): implements(interfaces.IProperties) b.build_status = FakeBuildStatus() + class Properties(Mock): + def asList(self): return [(u'p', 5, u'fake'), (u'p2', ['abc', 9], u'mock')]