Ticket #100: builderWideEnvironnment-with-tests.diff
File builderWideEnvironnment-with-tests.diff, 6.6 KB (added by bhearsum, 13 years ago) |
---|
-
buildbot/process/base.py
RCS file: /cvsroot/buildbot/buildbot/buildbot/process/base.py,v retrieving revision 1.84 diff -u -r1.84 base.py
193 193 def setLocks(self, locks): 194 194 self.locks = locks 195 195 196 def setSlaveEnvironment(self, env): 197 self.slaveEnvironment = env 198 196 199 def getSourceStamp(self): 197 200 return self.source 198 201 -
buildbot/process/builder.py
RCS file: /cvsroot/buildbot/buildbot/buildbot/process/builder.py,v retrieving revision 1.54 diff -u -r1.54 builder.py
278 278 self.builddir = setup['builddir'] 279 279 self.buildFactory = setup['factory'] 280 280 self.locks = setup.get("locks", []) 281 self.env = setup.get('env', {}) 282 assert isinstance(self.env, dict) 281 283 if setup.has_key('periodicBuildTime'): 282 284 raise ValueError("periodicBuildTime can no longer be defined as" 283 285 " part of the Builder: use scheduler.Periodic" … … 587 589 build = self.buildFactory.newBuild(requests) 588 590 build.setBuilder(self) 589 591 build.setLocks(self.locks) 592 if len(self.env) > 0: 593 build.setSlaveEnvironment(self.env) 590 594 591 595 # start it 592 596 self.startBuild(build, sb) -
buildbot/steps/shell.py
RCS file: /cvsroot/buildbot/buildbot/buildbot/steps/shell.py,v retrieving revision 1.23 diff -u -r1.23 shell.py
133 133 return ["'%s" % words[0], "%s" % words[1], "...'"] 134 134 135 135 def setupEnvironment(self, cmd): 136 # XXX is this used? documented? replaced by properties? 137 # merge in anything from Build.slaveEnvironment . Earlier steps 138 # (perhaps ones which compile libraries or sub-projects that need to 139 # be referenced by later steps) can add keys to 140 # self.build.slaveEnvironment to affect later steps. 136 # merge in anything from Build.slaveEnvironment 137 # This can be set from a Builder-level environment, or from earlier 138 # BuildSteps. The latter method is deprecated and superceded by 139 # BuildProperties. 140 # Environment variables passed in by a BuildStep override 141 # those passed in at the Builder level. 141 142 properties = self.build.getProperties() 142 143 slaveEnv = self.build.slaveEnvironment 143 144 if slaveEnv: 144 145 if cmd.args['env'] is None: 145 146 cmd.args['env'] = {} 146 cmd.args['env'].update(properties.render(slaveEnv)) 147 fullSlaveEnv = slaveEnv.copy() 148 fullSlaveEnv = properties.render(fullSlaveEnv) 149 fullSlaveEnv.update(cmd.args['env']) 150 cmd.args['env'] = fullSlaveEnv 147 151 # note that each RemoteShellCommand gets its own copy of the 148 152 # dictionary, so we shouldn't be affecting anyone but ourselves. 149 153 -
buildbot/test/test_run.py
RCS file: /cvsroot/buildbot/buildbot/buildbot/test/test_run.py,v retrieving revision 1.56 diff -u -r1.56 test_run.py
843 843 # of the bug where I forgot to make Waterfall inherit from StatusReceiver 844 844 # such that buildSetSubmitted failed. 845 845 846 config_test_builder = config_base + """ 847 from buildbot.scheduler import Scheduler 848 c['schedulers'] = [Scheduler('quick', 'dummy', 0.1, ['dummy']), 849 Scheduler('quick2', 'dummy2', 0.1, ['dummy2']), 850 Scheduler('quick3', 'dummy3', 0.1, ['dummy3'])] 851 852 from buildbot.steps.shell import ShellCommand 853 f3 = factory.BuildFactory([ 854 s(ShellCommand, command="sleep 3", env={'blah':'blah'}) 855 ]) 856 857 c['builders'] = [{'name': 'dummy', 'slavename': 'bot1', 'env': {'foo':'bar'}, 858 'builddir': 'dummy', 'factory': f3}] 859 860 c['builders'].append({'name': 'dummy2', 'slavename': 'bot1', 861 'env': {'blah':'bar'}, 'builddir': 'dummy2', 862 'factory': f3}) 863 864 f4 = factory.BuildFactory([ 865 s(ShellCommand, command="sleep 3") 866 ]) 867 868 c['builders'].append({'name': 'dummy3', 'slavename': 'bot1', 869 'env': {'blah':'bar'}, 'builddir': 'dummy3', 870 'factory': f4}) 871 """ 872 873 class TestBuilder(RunMixin, unittest.TestCase): 874 def setUp(self): 875 RunMixin.setUp(self) 876 self.master.loadConfig(config_test_builder) 877 self.master.readConfig = True 878 self.master.startService() 879 self.connectSlave(builders=["dummy", "dummy2", "dummy3"]) 880 881 def doBuilderEnvTest(self, branch, cb): 882 c = changes.Change("bob", ["Makefile", "foo/bar.c"], "changed", 883 branch=branch) 884 self.master.change_svc.addChange(c) 885 886 d = defer.Deferred() 887 reactor.callLater(0.5, d.callback, None) 888 d.addCallback(cb) 889 890 return d 891 892 def testBuilderEnv(self): 893 return self.doBuilderEnvTest("dummy", self._testBuilderEnv1) 894 895 def _testBuilderEnv1(self, res): 896 b = self.master.botmaster.builders['dummy'] 897 build = b.building[0] 898 s = build.currentStep 899 self.failUnless('foo' in s.cmd.args['env']) 900 self.failUnlessEqual('bar', s.cmd.args['env']['foo']) 901 self.failUnless('blah' in s.cmd.args['env']) 902 self.failUnlessEqual('blah', s.cmd.args['env']['blah']) 903 904 def testBuilderEnvOverride(self): 905 return self.doBuilderEnvTest("dummy2", self._testBuilderEnvOverride1) 906 907 def _testBuilderEnvOverride1(self, res): 908 b = self.master.botmaster.builders['dummy2'] 909 build = b.building[0] 910 s = build.currentStep 911 self.failUnless('blah' in s.cmd.args['env']) 912 self.failUnlessEqual('blah', s.cmd.args['env']['blah']) 913 914 def testBuilderNoStepEnv(self): 915 return self.doBuilderEnvTest("dummy3", self._testBuilderNoStepEnv1) 916 917 def _testBuilderNoStepEnv1(self, res): 918 b = self.master.botmaster.builders['dummy3'] 919 build = b.building[0] 920 s = build.currentStep 921 self.failUnless('blah' in s.cmd.args['env']) 922 self.failUnlessEqual('bar', s.cmd.args['env']['blah'])