Trees | Indices | Help |
|
---|
|
1 # ***** BEGIN LICENSE BLOCK ***** 2 # Version: MPL 1.1/GPL 2.0/LGPL 2.1 3 # 4 # The contents of this file are subject to the Mozilla Public License Version 5 # 1.1 (the "License"); you may not use this file except in compliance with 6 # the License. You may obtain a copy of the License at 7 # http://www.mozilla.org/MPL/ 8 # 9 # Software distributed under the License is distributed on an "AS IS" basis, 10 # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 11 # for the specific language governing rights and limitations under the 12 # License. 13 # 14 # The Original Code is Mozilla-specific Buildbot steps. 15 # 16 # The Initial Developer of the Original Code is 17 # Mozilla Foundation. 18 # Portions created by the Initial Developer are Copyright (C) 2009 19 # the Initial Developer. All Rights Reserved. 20 # 21 # Contributor(s): 22 # Brian Warner <warner@lothar.com> 23 # 24 # Alternatively, the contents of this file may be used under the terms of 25 # either the GNU General Public License Version 2 or later (the "GPL"), or 26 # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), 27 # in which case the provisions of the GPL or the LGPL are applicable instead 28 # of those above. If you wish to allow use of your version of this file only 29 # under the terms of either the GPL or the LGPL, and not to allow others to 30 # use your version of this file under the terms of the MPL, indicate your 31 # decision by deleting the provisions above and replace them with the notice 32 # and other provisions required by the GPL or the LGPL. If you do not delete 33 # the provisions above, a recipient may use your version of this file under 34 # the terms of any one of the MPL, the GPL or the LGPL. 35 # 36 # ***** END LICENSE BLOCK ***** 37 38 from twisted.internet import reactor, defer 39 from buildbot.schedulers import base 40 from buildbot.process.properties import Properties 4143 """This scheduler doesn't do anything until it is triggered by a Trigger 44 step in a factory. In general, that step will not complete until all of 45 the builds that I fire have finished. 46 """ 47 48 compare_attrs = ('name', 'builderNames', 'properties')7550 base.BaseScheduler.__init__(self, name, builderNames, properties) 51 self._waiters = {} 52 self.reason = "Triggerable(%s)" % name5355 """Trigger this scheduler. Returns a deferred that will fire when the 56 buildset is finished. 57 """ 58 59 # properties for this buildset are composed of our own properties, 60 # potentially overridden by anything from the triggering build 61 props = Properties() 62 props.updateFromProperties(self.properties) 63 if set_props: 64 props.updateFromProperties(set_props) 65 66 d = self.parent.db.runInteraction(self._trigger, ss, props) 67 # this returns a Deferred that fires when the buildset is complete, 68 # with the buildset results (SUCCESS or FAILURE). This Deferred is 69 # not persistent: if the master is bounced, the "upstream" build (the 70 # one which used steps.trigger.Trigger) will disappear anyways. 71 def _done(res): 72 return res[0] # chain the Deferred73 d.addCallback(_done) 74 return d77 db = self.parent.db 78 ssid = db.get_sourcestampid(ss, t) 79 bsid = self.create_buildset(ssid, self.reason, t, props) 80 self._waiters[bsid] = d = defer.Deferred() 81 db.scheduler_subscribe_to_buildset(self.schedulerid, bsid, t) 82 reactor.callFromThread(self.parent.master.triggerSlaveManager) 83 return (d,) # apparently you can't return Deferreds from runInteraction8486 # this exists just to notify triggerers that the builds they 87 # triggered are now done, i.e. if buildbot.steps.trigger.Trigger is 88 # called with waitForFinish=True. 89 d = self.parent.db.runInteraction(self._run) 90 return d92 db = self.parent.db 93 res = db.scheduler_get_subscribed_buildsets(self.schedulerid, t) 94 # this returns bsid,ssid,results for all of our active subscriptions 95 for (bsid,ssid,complete,results) in res: 96 if complete: 97 d = self._waiters.pop(bsid, None) 98 if d: 99 reactor.callFromThread(d.callback, results) 100 db.scheduler_unsubscribe_buildset(self.schedulerid, bsid, t) 101 return None102
Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Fri Oct 29 10:00:45 2010 | http://epydoc.sourceforge.net |