diff for duplicates of <1306526949.1747.8.camel@vorpal> diff --git a/a/2.hdr b/a/2.hdr deleted file mode 100644 index e7ce97c..0000000 --- a/a/2.hdr +++ /dev/null @@ -1,6 +0,0 @@ -Content-Disposition: attachment;\r - filename="0001-server-add-updated-fixed-xmlrpc-server-from-Poky.patch"\r -Content-Type: text/x-patch;\r - name="0001-server-add-updated-fixed-xmlrpc-server-from-Poky.patch";\r - charset="UTF-8"\r -Content-Transfer-Encoding: 7bit\r diff --git a/a/2.txt b/a/2.txt deleted file mode 100644 index 16573c7..0000000 --- a/a/2.txt +++ /dev/null @@ -1,292 +0,0 @@ -From 4c0915842cd578e67fc9cc85d24538e419a47af8 Mon Sep 17 00:00:00 2001 -From: Joshua Lock <josh@linux.intel.com> -Date: Fri, 27 May 2011 13:03:55 -0700 -Subject: [PATCH 1/2] server: add updated/fixed xmlrpc server from Poky - -Signed-off-by: Joshua Lock <josh@linux.intel.com> ---- - lib/bb/server/xmlrpc.py | 273 +++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 273 insertions(+), 0 deletions(-) - create mode 100644 lib/bb/server/xmlrpc.py - -diff --git a/lib/bb/server/xmlrpc.py b/lib/bb/server/xmlrpc.py -new file mode 100644 -index 0000000..c43c6cd ---- /dev/null -+++ b/lib/bb/server/xmlrpc.py -@@ -0,0 +1,273 @@ -+# -+# BitBake XMLRPC Server -+# -+# Copyright (C) 2006 - 2007 Michael 'Mickey' Lauer -+# Copyright (C) 2006 - 2008 Richard Purdie -+# -+# This program is free software; you can redistribute it and/or modify -+# it under the terms of the GNU General Public License version 2 as -+# published by the Free Software Foundation. -+# -+# This program is distributed in the hope that it will be useful, -+# but WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+# GNU General Public License for more details. -+# -+# You should have received a copy of the GNU General Public License along -+# with this program; if not, write to the Free Software Foundation, Inc., -+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -+ -+""" -+ This module implements an xmlrpc server for BitBake. -+ -+ Use this by deriving a class from BitBakeXMLRPCServer and then adding -+ methods which you want to "export" via XMLRPC. If the methods have the -+ prefix xmlrpc_, then registering those function will happen automatically, -+ if not, you need to call register_function. -+ -+ Use register_idle_function() to add a function which the xmlrpc server -+ calls from within server_forever when no requests are pending. Make sure -+ that those functions are non-blocking or else you will introduce latency -+ in the server's main loop. -+""" -+ -+import bb -+import xmlrpclib, sys -+from bb import daemonize -+from bb.ui import uievent -+ -+DEBUG = False -+ -+from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler -+import inspect, select -+ -+if sys.hexversion < 0x020600F0: -+ print("Sorry, python 2.6 or later is required for bitbake's XMLRPC mode") -+ sys.exit(1) -+ -+## -+# The xmlrpclib.Transport class has undergone various changes in Python 2.7 -+# which break BitBake's XMLRPC implementation. -+# To work around this we subclass Transport and have a copy/paste of method -+# implementations from Python 2.6.6's xmlrpclib. -+# -+# Upstream Python bug is #8194 (http://bugs.python.org/issue8194) -+# This bug is relevant for Python 2.7.0 and 2.7.1 but was fixed for -+# Python > 2.7.2 -+## -+ -+class BBTransport(xmlrpclib.Transport): -+ def request(self, host, handler, request_body, verbose=0): -+ h = self.make_connection(host) -+ if verbose: -+ h.set_debuglevel(1) -+ -+ self.send_request(h, handler, request_body) -+ self.send_host(h, host) -+ self.send_user_agent(h) -+ self.send_content(h, request_body) -+ -+ errcode, errmsg, headers = h.getreply() -+ -+ if errcode != 200: -+ raise ProtocolError( -+ host + handler, -+ errcode, errmsg, -+ headers -+ ) -+ -+ self.verbose = verbose -+ -+ try: -+ sock = h._conn.sock -+ except AttributeError: -+ sock = None -+ -+ return self._parse_response(h.getfile(), sock) -+ -+ def make_connection(self, host): -+ import httplib -+ host, extra_headers, x509 = self.get_host_info(host) -+ return httplib.HTTP(host) -+ -+ def _parse_response(self, file, sock): -+ p, u = self.getparser() -+ -+ while 1: -+ if sock: -+ response = sock.recv(1024) -+ else: -+ response = file.read(1024) -+ if not response: -+ break -+ if self.verbose: -+ print "body:", repr(response) -+ p.feed(response) -+ -+ file.close() -+ p.close() -+ -+ return u.close() -+ -+def _create_server(host, port): -+ # Python 2.7.0 and 2.7.1 have a buggy Transport implementation -+ # For those versions of Python, and only those versions, use our -+ # own copy/paste BBTransport class. -+ if (2, 7, 0) <= sys.version_info < (2, 7, 2): -+ t = BBTransport() -+ s = xmlrpclib.Server("http://%s:%d/" % (host, port), transport=t, allow_none=True) -+ else: -+ s = xmlrpclib.Server("http://%s:%d/" % (host, port), allow_none=True) -+ -+ return s -+ -+class BitBakeServerCommands(): -+ def __init__(self, server, cooker): -+ self.cooker = cooker -+ self.server = server -+ -+ def registerEventHandler(self, host, port): -+ """ -+ Register a remote UI Event Handler -+ """ -+ s = _create_server(host, port) -+ -+ return bb.event.register_UIHhandler(s) -+ -+ def unregisterEventHandler(self, handlerNum): -+ """ -+ Unregister a remote UI Event Handler -+ """ -+ return bb.event.unregister_UIHhandler(handlerNum) -+ -+ def runCommand(self, command): -+ """ -+ Run a cooker command on the server -+ """ -+ return self.cooker.command.runCommand(command) -+ -+ def terminateServer(self): -+ """ -+ Trigger the server to quit -+ """ -+ self.server.quit = True -+ print("Server (cooker) exiting") -+ return -+ -+ def ping(self): -+ """ -+ Dummy method which can be used to check the server is still alive -+ """ -+ return True -+ -+class BitBakeServer(SimpleXMLRPCServer): -+ # remove this when you're done with debugging -+ # allow_reuse_address = True -+ -+ def __init__(self, cooker, interface = ("localhost", 0)): -+ """ -+ Constructor -+ """ -+ SimpleXMLRPCServer.__init__(self, interface, -+ requestHandler=SimpleXMLRPCRequestHandler, -+ logRequests=False, allow_none=True) -+ self._idlefuns = {} -+ self.host, self.port = self.socket.getsockname() -+ #self.register_introspection_functions() -+ commands = BitBakeServerCommands(self, cooker) -+ self.autoregister_all_functions(commands, "") -+ self.cooker = cooker -+ -+ def autoregister_all_functions(self, context, prefix): -+ """ -+ Convenience method for registering all functions in the scope -+ of this class that start with a common prefix -+ """ -+ methodlist = inspect.getmembers(context, inspect.ismethod) -+ for name, method in methodlist: -+ if name.startswith(prefix): -+ self.register_function(method, name[len(prefix):]) -+ -+ def register_idle_function(self, function, data): -+ """Register a function to be called while the server is idle""" -+ assert hasattr(function, '__call__') -+ self._idlefuns[function] = data -+ -+ def serve_forever(self): -+ bb.cooker.server_main(self.cooker, self._serve_forever) -+ -+ def _serve_forever(self): -+ """ -+ Serve Requests. Overloaded to honor a quit command -+ """ -+ self.quit = False -+ self.timeout = 0 # Run Idle calls for our first callback -+ while not self.quit: -+ #print "Idle queue length %s" % len(self._idlefuns) -+ self.handle_request() -+ #print "Idle timeout, running idle functions" -+ nextsleep = None -+ for function, data in self._idlefuns.items(): -+ try: -+ retval = function(self, data, False) -+ if retval is False: -+ del self._idlefuns[function] -+ elif retval is True: -+ nextsleep = 0 -+ elif nextsleep is 0: -+ continue -+ elif nextsleep is None: -+ nextsleep = retval -+ elif retval < nextsleep: -+ nextsleep = retval -+ except SystemExit: -+ raise -+ except: -+ import traceback -+ traceback.print_exc() -+ pass -+ if nextsleep is None and len(self._idlefuns) > 0: -+ nextsleep = 0 -+ self.timeout = nextsleep -+ # Tell idle functions we're exiting -+ for function, data in self._idlefuns.items(): -+ try: -+ retval = function(self, data, True) -+ except: -+ pass -+ -+ self.server_close() -+ return -+ -+class BitbakeServerInfo(): -+ def __init__(self, server): -+ 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.events = uievent.BBUIEventQueue(self.connection) -+ for event in bb.event.ui_queue: -+ self.events.queue_event(event) -+ -+ def terminate(self): -+ # Don't wait for server indefinitely -+ import socket -+ socket.setdefaulttimeout(2) -+ try: -+ self.events.system_quit() -+ except: -+ pass -+ try: -+ self.connection.terminateServer() -+ except: -+ pass --- -1.7.5.1 diff --git a/a/3.hdr b/a/3.hdr deleted file mode 100644 index 3060d1c..0000000 --- a/a/3.hdr +++ /dev/null @@ -1,7 +0,0 @@ -Content-Disposition: attachment;\r - filename*0=0002-uievent-fix-queueing-of-events-for-xmlrpc-before-UI-.pat;\r - filename*1=ch\r -Content-Type: text/x-patch;\r - name="0002-uievent-fix-queueing-of-events-for-xmlrpc-before-UI-.patch";\r - charset="UTF-8"\r -Content-Transfer-Encoding: 7bit\r diff --git a/a/3.txt b/a/3.txt deleted file mode 100644 index 1d2176a..0000000 --- a/a/3.txt +++ /dev/null @@ -1,48 +0,0 @@ -From 1618318f0a30847b08c158e7ac82f9043126144e Mon Sep 17 00:00:00 2001 -From: Joshua Lock <josh@linux.intel.com> -Date: Fri, 27 May 2011 13:04:44 -0700 -Subject: [PATCH 2/2] uievent: fix queueing of events for xmlrpc before UI has - loaded - -The change to Queue up events before the UI is spawned broke the xmlrpc -server because the uievent implementation of BBUIEventQueue expects pickled -strings for its queue_event() method. -This is because the RPC exposed event.send() method must accept pickled -strings, but for xmlrpc event.send() is just mapped to queue_event(). Work -around this by adding a send_event method which unpickles strings and hands -them off to queue_event() which can then be used for the remapping. - -Signed-off-by: Joshua Lock <josh@linux.intel.com> ---- - lib/bb/ui/uievent.py | 7 +++++-- - 1 files changed, 5 insertions(+), 2 deletions(-) - -diff --git a/lib/bb/ui/uievent.py b/lib/bb/ui/uievent.py -index b404805..2fef4e4 100644 ---- a/lib/bb/ui/uievent.py -+++ b/lib/bb/ui/uievent.py -@@ -63,17 +63,20 @@ class BBUIEventQueue: - - def queue_event(self, event): - self.eventQueueLock.acquire() -- self.eventQueue.append(pickle.loads(event)) -+ self.eventQueue.append(event) - self.eventQueueNotify.set() - self.eventQueueLock.release() - -+ def send_event(self, event): -+ self.queue_event(pickle.loads(event)) -+ - def startCallbackHandler(self): - - server = UIXMLRPCServer() - self.host, self.port = server.socket.getsockname() - - server.register_function( self.system_quit, "event.quit" ) -- server.register_function( self.queue_event, "event.send" ) -+ server.register_function( self.send_event, "event.send" ) - server.socket.settimeout(1) - - self.EventHandle = self.BBServer.registerEventHandler(self.host, self.port) --- -1.7.5.1 diff --git a/a/content_digest b/N1/content_digest index c25cb56..6548ee8 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -2,7 +2,7 @@ "ref\01306515635.27470.284.camel@rex\0" "ref\07DC6724C-BF20-4EA1-A87D-32FBEEECDA3B@dominion.thruhere.net\0" "From\0Joshua Lock <josh@linux.intel.com>\0" - "Subject\0Re: [OE-core] [PATCH 00/11] Add PR service and integrate PKGV/PKGR from OE\0" + "Subject\0Re: [PATCH 00/11] Add PR service and integrate PKGV/PKGR from OE\0" "Date\0Fri, 27 May 2011 13:09:06 -0700\0" "To\0openembedded-core@lists.openembedded.org\0" "Cc\0bitbake-devel@lists.openembedded.org\0" @@ -102,351 +102,5 @@ "Joshua Lock\n" " Yocto Project Build Monkey\n" Intel Open Source Technology Centre - "\01:2\0" - "fn\00001-server-add-updated-fixed-xmlrpc-server-from-Poky.patch\0" - "b\0" - "From 4c0915842cd578e67fc9cc85d24538e419a47af8 Mon Sep 17 00:00:00 2001\n" - "From: Joshua Lock <josh@linux.intel.com>\n" - "Date: Fri, 27 May 2011 13:03:55 -0700\n" - "Subject: [PATCH 1/2] server: add updated/fixed xmlrpc server from Poky\n" - "\n" - "Signed-off-by: Joshua Lock <josh@linux.intel.com>\n" - "---\n" - " lib/bb/server/xmlrpc.py | 273 +++++++++++++++++++++++++++++++++++++++++++++++\n" - " 1 files changed, 273 insertions(+), 0 deletions(-)\n" - " create mode 100644 lib/bb/server/xmlrpc.py\n" - "\n" - "diff --git a/lib/bb/server/xmlrpc.py b/lib/bb/server/xmlrpc.py\n" - "new file mode 100644\n" - "index 0000000..c43c6cd\n" - "--- /dev/null\n" - "+++ b/lib/bb/server/xmlrpc.py\n" - "@@ -0,0 +1,273 @@\n" - "+#\n" - "+# BitBake XMLRPC Server\n" - "+#\n" - "+# Copyright (C) 2006 - 2007 Michael 'Mickey' Lauer\n" - "+# Copyright (C) 2006 - 2008 Richard Purdie\n" - "+#\n" - "+# This program is free software; you can redistribute it and/or modify\n" - "+# it under the terms of the GNU General Public License version 2 as\n" - "+# published by the Free Software Foundation.\n" - "+#\n" - "+# This program is distributed in the hope that it will be useful,\n" - "+# but WITHOUT ANY WARRANTY; without even the implied warranty of\n" - "+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" - "+# GNU General Public License for more details.\n" - "+#\n" - "+# You should have received a copy of the GNU General Public License along\n" - "+# with this program; if not, write to the Free Software Foundation, Inc.,\n" - "+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n" - "+\n" - "+\"\"\"\n" - "+ This module implements an xmlrpc server for BitBake.\n" - "+\n" - "+ Use this by deriving a class from BitBakeXMLRPCServer and then adding\n" - "+ methods which you want to \"export\" via XMLRPC. If the methods have the\n" - "+ prefix xmlrpc_, then registering those function will happen automatically,\n" - "+ if not, you need to call register_function.\n" - "+\n" - "+ Use register_idle_function() to add a function which the xmlrpc server\n" - "+ calls from within server_forever when no requests are pending. Make sure\n" - "+ that those functions are non-blocking or else you will introduce latency\n" - "+ in the server's main loop.\n" - "+\"\"\"\n" - "+\n" - "+import bb\n" - "+import xmlrpclib, sys\n" - "+from bb import daemonize\n" - "+from bb.ui import uievent\n" - "+\n" - "+DEBUG = False\n" - "+\n" - "+from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler\n" - "+import inspect, select\n" - "+\n" - "+if sys.hexversion < 0x020600F0:\n" - "+ print(\"Sorry, python 2.6 or later is required for bitbake's XMLRPC mode\")\n" - "+ sys.exit(1)\n" - "+\n" - "+##\n" - "+# The xmlrpclib.Transport class has undergone various changes in Python 2.7\n" - "+# which break BitBake's XMLRPC implementation.\n" - "+# To work around this we subclass Transport and have a copy/paste of method\n" - "+# implementations from Python 2.6.6's xmlrpclib.\n" - "+#\n" - "+# Upstream Python bug is #8194 (http://bugs.python.org/issue8194)\n" - "+# This bug is relevant for Python 2.7.0 and 2.7.1 but was fixed for\n" - "+# Python > 2.7.2\n" - "+##\n" - "+\n" - "+class BBTransport(xmlrpclib.Transport):\n" - "+ def request(self, host, handler, request_body, verbose=0):\n" - "+ h = self.make_connection(host)\n" - "+ if verbose:\n" - "+ h.set_debuglevel(1)\n" - "+\n" - "+ self.send_request(h, handler, request_body)\n" - "+ self.send_host(h, host)\n" - "+ self.send_user_agent(h)\n" - "+ self.send_content(h, request_body)\n" - "+\n" - "+ errcode, errmsg, headers = h.getreply()\n" - "+\n" - "+ if errcode != 200:\n" - "+ raise ProtocolError(\n" - "+ host + handler,\n" - "+ errcode, errmsg,\n" - "+ headers\n" - "+ )\n" - "+\n" - "+ self.verbose = verbose\n" - "+\n" - "+ try:\n" - "+ sock = h._conn.sock\n" - "+ except AttributeError:\n" - "+ sock = None\n" - "+\n" - "+ return self._parse_response(h.getfile(), sock)\n" - "+\n" - "+ def make_connection(self, host):\n" - "+ import httplib\n" - "+ host, extra_headers, x509 = self.get_host_info(host)\n" - "+ return httplib.HTTP(host)\n" - "+\n" - "+ def _parse_response(self, file, sock):\n" - "+ p, u = self.getparser()\n" - "+\n" - "+ while 1:\n" - "+ if sock:\n" - "+ response = sock.recv(1024)\n" - "+ else:\n" - "+ response = file.read(1024)\n" - "+ if not response:\n" - "+ break\n" - "+ if self.verbose:\n" - "+ print \"body:\", repr(response)\n" - "+ p.feed(response)\n" - "+\n" - "+ file.close()\n" - "+ p.close()\n" - "+\n" - "+ return u.close()\n" - "+\n" - "+def _create_server(host, port):\n" - "+ # Python 2.7.0 and 2.7.1 have a buggy Transport implementation\n" - "+ # For those versions of Python, and only those versions, use our\n" - "+ # own copy/paste BBTransport class.\n" - "+ if (2, 7, 0) <= sys.version_info < (2, 7, 2):\n" - "+ t = BBTransport()\n" - "+ s = xmlrpclib.Server(\"http://%s:%d/\" % (host, port), transport=t, allow_none=True)\n" - "+ else:\n" - "+ s = xmlrpclib.Server(\"http://%s:%d/\" % (host, port), allow_none=True)\n" - "+\n" - "+ return s\n" - "+\n" - "+class BitBakeServerCommands():\n" - "+ def __init__(self, server, cooker):\n" - "+ self.cooker = cooker\n" - "+ self.server = server\n" - "+\n" - "+ def registerEventHandler(self, host, port):\n" - "+ \"\"\"\n" - "+ Register a remote UI Event Handler\n" - "+ \"\"\"\n" - "+ s = _create_server(host, port)\n" - "+\n" - "+ return bb.event.register_UIHhandler(s)\n" - "+\n" - "+ def unregisterEventHandler(self, handlerNum):\n" - "+ \"\"\"\n" - "+ Unregister a remote UI Event Handler\n" - "+ \"\"\"\n" - "+ return bb.event.unregister_UIHhandler(handlerNum)\n" - "+\n" - "+ def runCommand(self, command):\n" - "+ \"\"\"\n" - "+ Run a cooker command on the server\n" - "+ \"\"\"\n" - "+ return self.cooker.command.runCommand(command)\n" - "+\n" - "+ def terminateServer(self):\n" - "+ \"\"\"\n" - "+ Trigger the server to quit\n" - "+ \"\"\"\n" - "+ self.server.quit = True\n" - "+ print(\"Server (cooker) exiting\")\n" - "+ return\n" - "+\n" - "+ def ping(self):\n" - "+ \"\"\"\n" - "+ Dummy method which can be used to check the server is still alive\n" - "+ \"\"\"\n" - "+ return True\n" - "+\n" - "+class BitBakeServer(SimpleXMLRPCServer):\n" - "+ # remove this when you're done with debugging\n" - "+ # allow_reuse_address = True\n" - "+\n" - "+ def __init__(self, cooker, interface = (\"localhost\", 0)):\n" - "+ \"\"\"\n" - "+ Constructor\n" - "+ \"\"\"\n" - "+ SimpleXMLRPCServer.__init__(self, interface,\n" - "+ requestHandler=SimpleXMLRPCRequestHandler,\n" - "+ logRequests=False, allow_none=True)\n" - "+ self._idlefuns = {}\n" - "+ self.host, self.port = self.socket.getsockname()\n" - "+ #self.register_introspection_functions()\n" - "+ commands = BitBakeServerCommands(self, cooker)\n" - "+ self.autoregister_all_functions(commands, \"\")\n" - "+ self.cooker = cooker\n" - "+\n" - "+ def autoregister_all_functions(self, context, prefix):\n" - "+ \"\"\"\n" - "+ Convenience method for registering all functions in the scope\n" - "+ of this class that start with a common prefix\n" - "+ \"\"\"\n" - "+ methodlist = inspect.getmembers(context, inspect.ismethod)\n" - "+ for name, method in methodlist:\n" - "+ if name.startswith(prefix):\n" - "+ self.register_function(method, name[len(prefix):])\n" - "+\n" - "+ def register_idle_function(self, function, data):\n" - "+ \"\"\"Register a function to be called while the server is idle\"\"\"\n" - "+ assert hasattr(function, '__call__')\n" - "+ self._idlefuns[function] = data\n" - "+\n" - "+ def serve_forever(self):\n" - "+ bb.cooker.server_main(self.cooker, self._serve_forever)\n" - "+\n" - "+ def _serve_forever(self):\n" - "+ \"\"\"\n" - "+ Serve Requests. Overloaded to honor a quit command\n" - "+ \"\"\"\n" - "+ self.quit = False\n" - "+ self.timeout = 0 # Run Idle calls for our first callback\n" - "+ while not self.quit:\n" - "+ #print \"Idle queue length %s\" % len(self._idlefuns)\n" - "+ self.handle_request()\n" - "+ #print \"Idle timeout, running idle functions\"\n" - "+ nextsleep = None\n" - "+ for function, data in self._idlefuns.items():\n" - "+ try:\n" - "+ retval = function(self, data, False)\n" - "+ if retval is False:\n" - "+ del self._idlefuns[function]\n" - "+ elif retval is True:\n" - "+ nextsleep = 0\n" - "+ elif nextsleep is 0:\n" - "+ continue\n" - "+ elif nextsleep is None:\n" - "+ nextsleep = retval\n" - "+ elif retval < nextsleep:\n" - "+ nextsleep = retval\n" - "+ except SystemExit:\n" - "+ raise\n" - "+ except:\n" - "+ import traceback\n" - "+ traceback.print_exc()\n" - "+ pass\n" - "+ if nextsleep is None and len(self._idlefuns) > 0:\n" - "+ nextsleep = 0\n" - "+ self.timeout = nextsleep\n" - "+ # Tell idle functions we're exiting\n" - "+ for function, data in self._idlefuns.items():\n" - "+ try:\n" - "+ retval = function(self, data, True)\n" - "+ except:\n" - "+ pass\n" - "+\n" - "+ self.server_close()\n" - "+ return\n" - "+\n" - "+class BitbakeServerInfo():\n" - "+ def __init__(self, server):\n" - "+ self.host = server.host\n" - "+ self.port = server.port\n" - "+\n" - "+class BitBakeServerFork():\n" - "+ def __init__(self, cooker, server, serverinfo, logfile):\n" - "+ daemonize.createDaemon(server.serve_forever, logfile)\n" - "+\n" - "+class BitbakeUILauch():\n" - "+ def launch(self, serverinfo, uifunc, *args):\n" - "+ return uifunc(*args)\n" - "+\n" - "+class BitBakeServerConnection():\n" - "+ def __init__(self, serverinfo):\n" - "+ self.connection = _create_server(serverinfo.host, serverinfo.port)\n" - "+ self.events = uievent.BBUIEventQueue(self.connection)\n" - "+ for event in bb.event.ui_queue:\n" - "+ self.events.queue_event(event)\n" - "+\n" - "+ def terminate(self):\n" - "+ # Don't wait for server indefinitely\n" - "+ import socket\n" - "+ socket.setdefaulttimeout(2)\n" - "+ try:\n" - "+ self.events.system_quit()\n" - "+ except:\n" - "+ pass\n" - "+ try:\n" - "+ self.connection.terminateServer()\n" - "+ except:\n" - "+ pass\n" - "-- \n" - 1.7.5.1 - "\01:3\0" - "fn\00002-uievent-fix-queueing-of-events-for-xmlrpc-before-UI-.patch\0" - "b\0" - "From 1618318f0a30847b08c158e7ac82f9043126144e Mon Sep 17 00:00:00 2001\n" - "From: Joshua Lock <josh@linux.intel.com>\n" - "Date: Fri, 27 May 2011 13:04:44 -0700\n" - "Subject: [PATCH 2/2] uievent: fix queueing of events for xmlrpc before UI has\n" - " loaded\n" - "\n" - "The change to Queue up events before the UI is spawned broke the xmlrpc\n" - "server because the uievent implementation of BBUIEventQueue expects pickled\n" - "strings for its queue_event() method.\n" - "This is because the RPC exposed event.send() method must accept pickled\n" - "strings, but for xmlrpc event.send() is just mapped to queue_event(). Work\n" - "around this by adding a send_event method which unpickles strings and hands\n" - "them off to queue_event() which can then be used for the remapping.\n" - "\n" - "Signed-off-by: Joshua Lock <josh@linux.intel.com>\n" - "---\n" - " lib/bb/ui/uievent.py | 7 +++++--\n" - " 1 files changed, 5 insertions(+), 2 deletions(-)\n" - "\n" - "diff --git a/lib/bb/ui/uievent.py b/lib/bb/ui/uievent.py\n" - "index b404805..2fef4e4 100644\n" - "--- a/lib/bb/ui/uievent.py\n" - "+++ b/lib/bb/ui/uievent.py\n" - "@@ -63,17 +63,20 @@ class BBUIEventQueue:\n" - " \n" - " def queue_event(self, event):\n" - " self.eventQueueLock.acquire()\n" - "- self.eventQueue.append(pickle.loads(event))\n" - "+ self.eventQueue.append(event)\n" - " self.eventQueueNotify.set()\n" - " self.eventQueueLock.release()\n" - " \n" - "+ def send_event(self, event):\n" - "+ self.queue_event(pickle.loads(event))\n" - "+\n" - " def startCallbackHandler(self):\n" - " \n" - " server = UIXMLRPCServer()\n" - " self.host, self.port = server.socket.getsockname()\n" - " \n" - " server.register_function( self.system_quit, \"event.quit\" )\n" - "- server.register_function( self.queue_event, \"event.send\" )\n" - "+ server.register_function( self.send_event, \"event.send\" )\n" - " server.socket.settimeout(1)\n" - " \n" - " self.EventHandle = self.BBServer.registerEventHandler(self.host, self.port)\n" - "-- \n" - 1.7.5.1 -70333eccf70ac9a2fa2571ab1d31618a52cb050070bd8ed9813322ad5c3196d1 +850e5b0c6132fe5d2d1631d2e2550d6e828a59f3e6830cc5df3ff50e08d2c49e
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.