From 4066acfdd6477e59b00767c1c5607e4666e15d6d Mon Sep 17 00:00:00 2001 From: "Dustin J. Mitchell" Date: Fri, 3 Jul 2009 17:54:04 -0400 Subject: [PATCH] (refs #35) fix dependent scheduler re-checking: make calculation of upstream lazier --- buildbot/scheduler.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/buildbot/scheduler.py b/buildbot/scheduler.py index d111c66..313dee0 100644 --- a/buildbot/scheduler.py +++ b/buildbot/scheduler.py @@ -319,7 +319,8 @@ class Dependent(BaseUpstreamScheduler): def __init__(self, name, upstream, builderNames, properties={}): assert interfaces.IUpstreamScheduler.providedBy(upstream) BaseUpstreamScheduler.__init__(self, name, properties) - self.upstream = upstream + self.upstream_name = upstream.name + self.upstream = None self.builderNames = builderNames def listBuilderNames(self): @@ -327,15 +328,17 @@ class Dependent(BaseUpstreamScheduler): def getPendingBuildTimes(self): # report the upstream's value - return self.upstream.getPendingBuildTimes() + return self.getUpstreamScheduler().getPendingBuildTimes() def startService(self): service.MultiService.startService(self) + self.upstream = self.findUpstreamScheduler() self.upstream.subscribeToSuccessfulBuilds(self.upstreamBuilt) def stopService(self): d = service.MultiService.stopService(self) self.upstream.unsubscribeToSuccessfulBuilds(self.upstreamBuilt) + self.upstream = None return d def upstreamBuilt(self, ss): @@ -343,16 +346,23 @@ class Dependent(BaseUpstreamScheduler): properties=self.properties) self.submitBuildSet(bs) - def checkUpstreamScheduler(self): + def findUpstreamScheduler(self): # find our *active* upstream scheduler (which may not be self.upstream!) by name - up_name = self.upstream.name upstream = None for s in self.parent.allSchedulers(): - if s.name == up_name and interfaces.IUpstreamScheduler.providedBy(s): + if s.name == self.upstream_name and interfaces.IUpstreamScheduler.providedBy(s): upstream = s if not upstream: log.msg("ERROR: Couldn't find upstream scheduler of name <%s>" % - up_name) + self.upstream_name) + return upstream + + def checkUpstreamScheduler(self): + # if we don't already have an upstream, then there's nothing to worry about + if not self.upstream: + return + + upstream = self.findUpstreamScheduler() # if it's already correct, we're good to go if upstream is self.upstream: -- 2.11.4.GIT