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")
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")
# 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()
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
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
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)
return True
return retval
- self.server.register_idle_function(buildFileIdle, rq)
+ self.server_registration_cb(buildFileIdle, rq)
def buildTargets(self, targets, task):
"""
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:
import inspect, select
class BitBakeServerCommands():
- def __init__(self, server, cooker):
- self.cooker = cooker
+ def __init__(self, server):
self.server = server
def runCommand(self, command):
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"""
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)
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)
+
return s
class BitBakeServerCommands():
- def __init__(self, server, cooker):
- self.cooker = cooker
+ def __init__(self, server):
self.server = server
def registerEventHandler(self, host, port):
"""
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
"""
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):
"""
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)
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)
+
+