]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
bitbake: Cleanup bitbake server init process to be clearer to follow
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 8 Jun 2011 08:34:12 +0000 (09:34 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 8 Jun 2011 10:37:26 +0000 (11:37 +0100)
Create a standard format server class instance with method calls
for each step in the server setup. There should be enough hooks
for each of the different server types.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
bitbake/bin/bitbake
bitbake/lib/bb/command.py
bitbake/lib/bb/cooker.py
bitbake/lib/bb/server/none.py
bitbake/lib/bb/server/xmlrpc.py

index acd086753fc9027cfef31da621c4efee906cf38d..8f2fece2caf7a2cd740ad336e9b1d153dd1f7e71 100755 (executable)
@@ -40,7 +40,7 @@ from bb import cooker
 from bb import ui
 from bb import server
 from bb.server import none
-#from bb.server import xmlrpc
+from bb.server import xmlrpc
 
 __version__ = "1.13.0"
 logger = logging.getLogger("BitBake")
@@ -173,9 +173,6 @@ Default BBFILES are the .bb files in the current directory.""")
 
     ui_main = get_ui(configuration)
 
-    #server = bb.server.xmlrpc
-    server = bb.server.none
-
     # Save a logfile for cooker into the current working directory. When the
     # server is daemonized this logfile will be truncated.
     cooker_logfile = os.path.join(os.getcwd(), "cooker.log")
@@ -192,21 +189,29 @@ Default BBFILES are the .bb files in the current directory.""")
     # of the UIs (e.g. for DISPLAY, etc.)
     bb.utils.clean_environment()
 
-    cooker = bb.cooker.BBCooker(configuration, server)
+    #server = bb.server.xmlrpc.BitBakeServer()
+    server = bb.server.none.BitBakeServer()
+
+    server.initServer()
+    idle = server.getServerIdleCB()
+
+    cooker = bb.cooker.BBCooker(configuration, idle)
     cooker.parseCommandLine()
 
-    serverinfo = server.BitbakeServerInfo(cooker.server)
+    server.addcooker(cooker)
+    server.saveConnectionDetails()
+    server.detach(cooker_logfile)
 
-    server.BitBakeServerFork(cooker, cooker.server, serverinfo, cooker_logfile)
+    # Should no longer need to ever reference cooker
     del cooker
 
     logger.removeHandler(handler)
 
     # Setup a connection to the server (cooker)
-    server_connection = server.BitBakeServerConnection(serverinfo)
+    server_connection = server.establishConnection()
 
     try:
-        return server.BitbakeUILauch().launch(serverinfo, ui_main, server_connection.connection, server_connection.events)
+        return server.launchUI(ui_main, server_connection.connection, server_connection.events)
     finally:
         server_connection.terminate()
 
index e83751a2fafee651ec9dec7ed6fb977dbefbc50f..9841e6874e1c07fb5b1cca2789a0ddab7a65fde2 100644 (file)
@@ -82,7 +82,7 @@ class Command:
             if command not in CommandsAsync.__dict__:
                 return "No such command"
             self.currentAsyncCommand = (command, commandline)
-            self.cooker.server.register_idle_function(self.cooker.runCommands, self.cooker)
+            self.cooker.server_registration_cb(self.cooker.runCommands, self.cooker)
             return True
         except:
             import traceback
index 8379d0caf1007d56d8bdc48b793a2c4ce8f25589..94495e1399276de84aefc2de0f44fc48bcd31434 100644 (file)
@@ -63,12 +63,11 @@ class BBCooker:
     Manages one bitbake build run
     """
 
-    def __init__(self, configuration, server):
+    def __init__(self, configuration, server_registration_cb):
         self.status = None
         self.appendlist = {}
 
-        if server:
-            self.server = server.BitBakeServer(self)
+        self.server_registration_cb = server_registration_cb
 
         self.configuration = configuration
 
@@ -109,7 +108,7 @@ class BBCooker:
 
         self.configuration.data = bb.data.init()
 
-        if not server:
+        if not self.server_registration_cb:
             bb.data.setVar("BB_WORKERCONTEXT", "1", self.configuration.data)
 
         bb.data.inheritFromOS(self.configuration.data)
@@ -831,7 +830,7 @@ class BBCooker:
                 return True
             return retval
 
-        self.server.register_idle_function(buildFileIdle, rq)
+        self.server_registration_cb(buildFileIdle, rq)
 
     def buildTargets(self, targets, task):
         """
@@ -890,7 +889,7 @@ class BBCooker:
 
         rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist)
 
-        self.server.register_idle_function(buildTargetsIdle, rq)
+        self.server_registration_cb(buildTargetsIdle, rq)
 
     def updateCache(self):
         if self.state == state.running:
index 45cda2f5f4cb872aa2e7bed12d06c020fa5ee068..6083631fe7702b4c37e8e828186293a911544d44 100644 (file)
@@ -36,8 +36,7 @@ DEBUG = False
 import inspect, select
 
 class BitBakeServerCommands():
-    def __init__(self, server, cooker):
-        self.cooker = cooker
+    def __init__(self, server):
         self.server = server
 
     def runCommand(self, command):
@@ -106,13 +105,17 @@ class BBUIEventQueue:
 def chldhandler(signum, stackframe):
     pass
 
-class BitBakeServer():
+class BitBakeNoneServer():
     # remove this when you're done with debugging
     # allow_reuse_address = True
 
-    def __init__(self, cooker):
+    def __init__(self):
         self._idlefuns = {}
-        self.commands = BitBakeServerCommands(self, cooker)
+        self.commands = BitBakeServerCommands(self)
+
+    def addcooker(self, cooker):
+        self.cooker = cooker
+        self.commands.cooker = cooker
 
     def register_idle_function(self, function, data):
         """Register a function to be called while the server is idle"""
@@ -157,25 +160,10 @@ class BitBakeServer():
             except:
                 pass
 
-class BitbakeServerInfo():
-    def __init__(self, server):
-        self.server = server
-        self.commands = server.commands
-
-class BitBakeServerFork():
-    def __init__(self, cooker, server, serverinfo, logfile):
-        serverinfo.logfile = logfile
-        serverinfo.cooker = cooker
-        serverinfo.server = server
-
-class BitbakeUILauch():
-    def launch(self, serverinfo, uifunc, *args):
-        return bb.cooker.server_main(serverinfo.cooker, uifunc, *args)
-
 class BitBakeServerConnection():
-    def __init__(self, serverinfo):
-        self.server = serverinfo.server
-        self.connection = serverinfo.commands
+    def __init__(self, server):
+        self.server = server.server
+        self.connection = self.server.commands
         self.events = bb.server.none.BBUIEventQueue(self.server)
         for event in bb.event.ui_queue:
             self.events.queue_event(event)
@@ -189,3 +177,28 @@ class BitBakeServerConnection():
             self.connection.terminateServer()
         except:
             pass
+
+class BitBakeServer(object):
+    def initServer(self):
+        self.server = BitBakeNoneServer()
+
+    def addcooker(self, cooker):
+        self.cooker = cooker
+        self.server.addcooker(cooker)
+
+    def getServerIdleCB(self):
+        return self.server.register_idle_function
+
+    def saveConnectionDetails(self):
+        return
+
+    def detach(self, cooker_logfile):
+        self.logfile = cooker_logfile
+
+    def establishConnection(self):
+        self.connection = BitBakeServerConnection(self)
+        return self.connection
+
+    def launchUI(self, uifunc, *args):
+        return bb.cooker.server_main(self.cooker, uifunc, *args)
+
index e7b60108749e803a329ae75be6a8cb9a8abb83d3..4a16f9d525dc094ba631abc54eec8506d0eef664 100644 (file)
@@ -122,8 +122,7 @@ def _create_server(host, port):
     return s
 
 class BitBakeServerCommands():
-    def __init__(self, server, cooker):
-        self.cooker = cooker
+    def __init__(self, server):
         self.server = server
 
     def registerEventHandler(self, host, port):
@@ -160,11 +159,11 @@ class BitBakeServerCommands():
         """
         return True
 
-class BitBakeServer(SimpleXMLRPCServer):
+class BitBakeXMLRPCServer(SimpleXMLRPCServer):
     # remove this when you're done with debugging
     # allow_reuse_address = True
 
-    def __init__(self, cooker, interface = ("localhost", 0)):
+    def __init__(self, interface = ("localhost", 0)):
         """
         Constructor
         """
@@ -174,9 +173,12 @@ class BitBakeServer(SimpleXMLRPCServer):
         self._idlefuns = {}
         self.host, self.port = self.socket.getsockname()
         #self.register_introspection_functions()
-        commands = BitBakeServerCommands(self, cooker)
-        self.autoregister_all_functions(commands, "")
+        self.commands = BitBakeServerCommands(self)
+        self.autoregister_all_functions(self.commands, "")
+
+    def addcooker(self, cooker):
         self.cooker = cooker
+        self.commands.cooker = cooker
 
     def autoregister_all_functions(self, context, prefix):
         """
@@ -244,14 +246,6 @@ class BitbakeServerInfo():
         self.host = server.host
         self.port = server.port
 
-class BitBakeServerFork():
-    def __init__(self, cooker, server, serverinfo, logfile):
-        daemonize.createDaemon(server.serve_forever, logfile)
-
-class BitbakeUILauch():
-    def launch(self, serverinfo, uifunc, *args):
-        return uifunc(*args)
-
 class BitBakeServerConnection():
     def __init__(self, serverinfo):
         self.connection = _create_server(serverinfo.host, serverinfo.port)
@@ -271,3 +265,31 @@ class BitBakeServerConnection():
             self.connection.terminateServer()
         except:
             pass
+
+class BitBakeServer(object):
+    def initServer(self):
+        self.server = BitBakeXMLRPCServer()
+
+    def addcooker(self, cooker):
+        self.cooker = cooker
+        self.server.addcooker(cooker)
+
+    def getServerIdleCB(self):
+        return self.server.register_idle_function
+
+    def saveConnectionDetails(self): 
+        self.serverinfo = BitbakeServerInfo(self.server)
+
+    def detach(self, cooker_logfile):
+        daemonize.createDaemon(self.server.serve_forever, cooker_logfile)
+        del self.cooker
+        del self.server
+
+    def establishConnection(self):
+        self.connection = BitBakeServerConnection(self.serverinfo)
+        return self.connection
+
+    def launchUI(self, uifunc, *args):
+        return uifunc(*args)
+
+