Ticket #296: moreSchedulerWatchers.diff

File moreSchedulerWatchers.diff, 2.5 kB (added by bhearsum, 7 months ago)

add more types of watchers for Schedulers

  • a/buildbot/scheduler.py

    old new  
    5353        pass 
    5454 
    5555class BaseUpstreamScheduler(BaseScheduler): 
    5656    implements(interfaces.IUpstreamScheduler) 
    5757 
    5858    def __init__(self, name, properties={}): 
    5959        BaseScheduler.__init__(self, name, properties) 
    6060        self.successWatchers = [] 
     61        self.failureWatchers = [] 
     62        self.startWatchers = [] 
    6163 
     64    # these two functions are superceded by the two below, but are being 
     65    # kept to accomodate existing code. 
     66    # TODO: remove them 
    6267    def subscribeToSuccessfulBuilds(self, watcher): 
    63         self.successWatchers.append(watcher) 
     68        self.subscribeToBuilds(watcher) 
    6469    def unsubscribeToSuccessfulBuilds(self, watcher): 
    65         self.successWatchers.remove(watcher) 
     70        self.unsubscribeToBuilds(watcher) 
     71 
     72    def subscribeToBuilds(self, watcher, start=False, success=True, 
     73                          failure=False): 
     74        if start: 
     75            self.startWatchers.append(watcher) 
     76        if success: 
     77            self.successWatchers.append(watcher) 
     78        if failure: 
     79            self.failureWatchers.append(watcher) 
     80         
     81    def unsubscribeToBuilds(self, watcher, start=False, success=True, 
     82                            failure=False): 
     83        if start: 
     84            self.startWatchers.remove(watcher) 
     85        if success: 
     86            self.successWatchers.remove(watcher) 
     87        if failure: 
     88            self.failureWatchers.remove(watcher) 
    6689 
    6790    def submitBuildSet(self, bs): 
    6891        d = bs.waitUntilFinished() 
    6992        d.addCallback(self.buildSetFinished) 
     93        for w in self.startWatchers: 
     94            w(bs.source) 
    7095        BaseScheduler.submitBuildSet(self, bs) 
    7196 
    7297    def buildSetFinished(self, bss): 
    7398        if not self.running: 
    7499            return 
     100        ss = bss.getSourceStamp() 
    75101        if bss.getResults() == builder.SUCCESS: 
    76             ss = bss.getSourceStamp() 
    77102            for w in self.successWatchers: 
     103                w(ss) 
     104        else: 
     105            for w in self.failureWatchers: 
    78106                w(ss) 
    79107 
    80108 
    81109class Scheduler(BaseUpstreamScheduler): 
    82110    """The default Scheduler class will run a build after some period of time 
    83111    called the C{treeStableTimer}, on a given set of Builders. It only pays 
    84112    attention to a single branch. You you can provide a C{fileIsImportant} 
    85113    function which will evaluate each Change to decide whether or not it