diff -r 9de92a82b7cc buildbot/scheduler.py
--- a/buildbot/scheduler.py	Tue Jul 08 11:19:02 2008 -0400
+++ b/buildbot/scheduler.py	Tue Jul 08 11:28:53 2008 -0400
@@ -46,8 +46,8 @@
         # TODO: why can't id() return a positive number? %d is ugly.
         return "<Scheduler '%s' at %d>" % (self.name, id(self))
 
-    def submitBuildSet(self, bs):
-        self.parent.submitBuildSet(bs)
+    def submitBuildSet(self, bs, notifyScheduler=None):
+        self.parent.submitBuildSet(bs, notifyScheduler)
 
     def addChange(self, change):
         pass
@@ -55,9 +55,10 @@
 class BaseUpstreamScheduler(BaseScheduler):
     implements(interfaces.IUpstreamScheduler)
 
-    def __init__(self, name, properties={}):
+    def __init__(self, name, properties={}, notifyScheduler=None):
         BaseScheduler.__init__(self, name, properties)
         self.successWatchers = []
+        self.notifyScheduler = notifyScheduler
 
     def subscribeToSuccessfulBuilds(self, watcher):
         self.successWatchers.append(watcher)
@@ -67,7 +68,7 @@
     def submitBuildSet(self, bs):
         d = bs.waitUntilFinished()
         d.addCallback(self.buildSetFinished)
-        BaseScheduler.submitBuildSet(self, bs)
+        BaseScheduler.submitBuildSet(self, bs, self.notifyScheduler)
 
     def buildSetFinished(self, bss):
         if not self.running:
@@ -88,10 +89,10 @@
 
     fileIsImportant = None
     compare_attrs = ('name', 'treeStableTimer', 'builderNames', 'branch',
-                     'fileIsImportant', 'properties')
+                     'fileIsImportant', 'properties', 'notifyScheduler')
     
     def __init__(self, name, branch, treeStableTimer, builderNames,
-                 fileIsImportant=None, properties={}):
+                 fileIsImportant=None, properties={}, notifyScheduler=None):
         """
         @param name: the name of this Scheduler
         @param branch: The branch name that the Scheduler should pay
@@ -118,7 +119,7 @@
                            scheduler
         """
 
-        BaseUpstreamScheduler.__init__(self, name, properties)
+        BaseUpstreamScheduler.__init__(self, name, properties, notifyScheduler)
         self.treeStableTimer = treeStableTimer
         errmsg = ("The builderNames= argument to Scheduler must be a list "
                   "of Builder description names (i.e. the 'name' key of the "
@@ -210,10 +211,10 @@
     fileIsImportant = None
 
     compare_attrs = ('name', 'branches', 'treeStableTimer', 'builderNames',
-                     'fileIsImportant', 'properties')
+                     'fileIsImportant', 'properties', 'notifyScheduler')
 
     def __init__(self, name, branches, treeStableTimer, builderNames,
-                 fileIsImportant=None, properties={}):
+                 fileIsImportant=None, properties={}, notifyScheduler=None):
         """
         @param name: the name of this Scheduler
         @param branches: The branch names that the Scheduler should pay
@@ -260,6 +261,7 @@
         if fileIsImportant:
             assert callable(fileIsImportant)
             self.fileIsImportant = fileIsImportant
+        self.notifyScheduler = notifyScheduler
         self.schedulers = {} # one per branch
 
     def __repr__(self):
@@ -289,13 +291,21 @@
             s = self.schedulerFactory(name, branch,
                                       self.treeStableTimer,
                                       self.builderNames,
-                                      self.fileIsImportant)
+                                      self.fileIsImportant,
+                                      notifyScheduler=self.notifyScheduler)
             s.successWatchers = self.successWatchers
             s.setServiceParent(self)
             # TODO: does this result in schedulers that stack up forever?
             # When I make the persistify-pass, think about this some more.
             self.schedulers[branch] = s
         s.addChange(change)
+
+    # for some reason, the unittests don't pass unless AnyBranchScheduler has
+    # this method. if BaseUpstreamScheduler is modified in this way, they still
+    # fail. i suspect it has something to do with me not understanding
+    # twisted services enough
+    def submitBuildSet(self, bs, junk):
+        BaseUpstreamScheduler.submitBuildSet(self, bs)
 
 
 class Dependent(BaseUpstreamScheduler):

