From c5d1b12480d6c91ad0c3f15de03efc820cb1a886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bahad=C4=B1r=20Kandemir?= Date: Tue, 12 Feb 2008 13:50:17 +0000 Subject: [PATCH] get comar bus address from context & remove self from patch --- comar-dbus.patch | 303 ++++------------------------------------------- 1 file changed, 26 insertions(+), 277 deletions(-) diff --git a/comar-dbus.patch b/comar-dbus.patch index decdd467..7594c5e3 100644 --- a/comar-dbus.patch +++ b/comar-dbus.patch @@ -1,276 +1,8 @@ -Index: comar-dbus.patch -=================================================================== ---- comar-dbus.patch (revision 16918) -+++ comar-dbus.patch (working copy) -@@ -1,263 +0,0 @@ --Index: comariface.py --=================================================================== ----- comariface.py (revision 16886) --+++ comariface.py (working copy) --@@ -25,117 +25,137 @@ -- pass -- -- try: --- import comar --+ import dbus -- except ImportError: --- raise Error(_("comar package is not fully installed")) --+ raise Error(_("dbus-python package is not fully installed")) -- ---def get_comar(): --- """Connect to the comar daemon and return the handle""" --+def is_char_valid(char): --+ """Test if char is valid object path character.""" --+ char = ord(char) --+ return (char in xrange(65, 91) or --+ char in xrange(97, 123) or --+ char in xrange(48, 58) or --+ char == '_') --+ --+def make_object_path(package): --+ """Generates DBus object name from package name.""" --+ object = package --+ for char in package: --+ if not is_char_valid(char): --+ object = object.replace(char, '_') --+ return object --+ --+def get_iface(package="", model=""): --+ """Connect to the DBus daemon and return the system interface.""" -- --- sockname = "/var/run/comar.socket" --+ sockname = "unix:path=/var/run/dbus/system_bus_socket" -- # YALI starts comar chrooted in the install target, but uses PiSi outside of -- # the chroot environment, so PiSi needs to use a different socket path to be --- # able to connect true comar (usually /mnt/target/var/run/comar.socket). --- if ctx.comar_sockname: --- sockname = ctx.comar_sockname --+ # able to connect true dbus (and comar). --+ # (usually unix:path=/var/run/dbus/system_bus_socket) --+ if ctx.dbus_sockname: --+ sockname = ctx.dbus_sockname -- --+ if package: --+ obj_path = "/package/%s" % package --+ else: --+ obj_path = "/" --+ if model: --+ obj_interface = "tr.org.pardus.comar.%s" % model --+ else: --+ obj_interface = "tr.org.pardus.comar" --+ -- # This function is sometimes called when comar has recently started -- # or restarting after an update. So we give comar a chance to become -- # active in a reasonable time. -- timeout = 7 -- while timeout > 0: -- try: --- com = comar.Link(sockname) --- return com --- except comar.CannotConnect: --+ bus = dbus.bus.BusConnection(address_or_type=sockname) --+ obj = bus.get_object("tr.org.pardus.comar", obj_path) --+ iface = dbus.Interface(obj, dbus_interface=obj_interface) --+ return iface --+ except dbus.DBusException: -- pass -- time.sleep(0.2) -- timeout -= 0.2 --- raise Error(_("cannot connect to comar")) --+ raise Error(_("cannot connect to dbus")) -- ---def wait_for_result(com, package_name=None): --- multiple = False --- while True: --- try: --- reply = com.read_cmd() --- except select.error: --- if ctx.keyboard_interrupt_pending(): --- return --- raise --- except comar.LinkClosed: --- # Comar postInstall does a "service comar restart" which cuts --- # our precious communication link, so we waitsss --- if package_name == "comar": --- try: --- get_comar() --- except Error: --- raise Error, _("Could not restart comar") --- return --- else: --- if ctx.keyboard_interrupt_pending(): --- return --- raise Error, _("connection with comar unexpectedly closed") --- --- cmd = reply[0] --- if cmd == com.RESULT and not multiple: --- return --- elif cmd == com.NONE and not multiple: --- # no post/pre function, that is ok --- return --- elif cmd == com.RESULT_START: --- multiple = True --- elif cmd == com.RESULT_END: --- return --- elif cmd == com.FAIL: --- raise Error, _("Configuration error: %s") % reply[2] --- elif cmd == com.ERROR: --- raise Error, _("Script error: %s") % reply[2] --- elif cmd == com.DENIED: --- raise Error, _("comar denied our access") --- -- def post_install(package_name, provided_scripts, scriptpath, metapath, filepath, fromVersion, fromRelease, toVersion, toRelease): -- """Do package's post install operations""" -- -- ctx.ui.info(_("Configuring %s package") % package_name) -- self_post = False --- com = get_comar() --+ sys_iface = get_iface() --+ object_name = make_object_path(package_name) -- -- for script in provided_scripts: -- ctx.ui.debug(_("Registering %s comar script") % script.om) -- if script.om == "System.Package": -- self_post = True --- com.register(script.om, package_name, os.path.join(scriptpath, script.script)) --- wait_for_result(com) --+ try: --+ sys_iface.register(object_name, script.om, os.path.join(scriptpath, script.script)) --+ except dbus.DBusException, exception: --+ raise Error, _("Script error: %s") % exception -- -- ctx.ui.debug(_("Calling post install handlers")) --- com.call("System.PackageHandler.setupPackage", [ "metapath", metapath, "filepath", filepath ]) --- wait_for_result(com) --+ for handler in sys_iface.listModelApplications("System.PackageHandler"): --+ iface = get_iface(handler, "System.PackageHandler") --+ try: --+ iface.setupPackage(metapath, filepath, timeout=300) --+ except dbus.DBusException, exception: --+ # Do nothing if setupPackage method is not defined in package script --+ if not (exception._dbus_error_name.startswith("tr.org.pardus.comar") and --+ exception._dbus_error_name.split('tr.org.pardus.comar.')[1] == 'python.missing'): --+ raise Error, _("Script error: %s") % exception -- -- if self_post: --- args = { --- "fromVersion": fromVersion, --- "fromRelease": fromRelease, --- "toVersion": toVersion, --- "toRelease": toRelease, --- } --+ if not fromVersion: --+ fromVersion = "" --+ if not fromRelease: --+ fromRelease = "" --+ -- ctx.ui.debug(_("Running package's post install script")) --- com.call_package("System.Package.postInstall", package_name, args) --- wait_for_result(com, package_name) --+ try: --+ iface = get_iface(object_name, "System.Package") --+ iface.postInstall(fromVersion, fromRelease, toVersion, toRelease, timeout=300) --+ except dbus.DBusException, exception: --+ # Do nothing if postInstall method is not defined in package script --+ if not (exception._dbus_error_name.startswith("tr.org.pardus.comar") and --+ exception._dbus_error_name.split('tr.org.pardus.comar.')[1] == 'python.missing'): --+ raise Error, _("Script error: %s") % exception -- -- def pre_remove(package_name, metapath, filepath): -- """Do package's pre removal operations""" -- -- ctx.ui.info(_("Configuring %s package for removal") % package_name) --- com = get_comar() --+ sys_iface = get_iface() --+ object_name = make_object_path(package_name) -- --- ctx.ui.debug(_("Running package's pre remove script")) --- com.call_package("System.Package.preRemove", package_name) --- wait_for_result(com) --+ if "System.Package" in sys_iface.listApplicationModels(object_name): --+ ctx.ui.debug(_("Running package's pre remove script")) --+ iface = get_iface(object_name, "System.Package") --+ try: --+ iface.preRemove(timeout=300) --+ except dbus.DBusException, exception: --+ # Do nothing if preRemove method is not defined in package script --+ if not (exception._dbus_error_name.startswith("tr.org.pardus.comar") and --+ exception._dbus_error_name.split('tr.org.pardus.comar.')[1] == 'python.missing'): --+ raise Error, _("Script error: %s") % exception -- -- ctx.ui.debug(_("Calling pre remove handlers")) --- com.call("System.PackageHandler.cleanupPackage", [ "metapath", metapath, "filepath", filepath ]) --- wait_for_result(com) --+ for handler in sys_iface.listModelApplications("System.PackageHandler"): --+ iface = get_iface(handler, "System.PackageHandler") --+ try: --+ iface.cleanupPackage(metapath, filepath, timeout=300) --+ except dbus.DBusException, exception: --+ # Do nothing if cleanupPackage method is not defined in package script --+ if not (exception._dbus_error_name.startswith("tr.org.pardus.comar") and --+ exception._dbus_error_name.split('tr.org.pardus.comar.')[1] == 'python.missing'): --+ raise Error, _("Script error: %s") % exception -- -- ctx.ui.debug(_("Unregistering comar scripts")) --- com.remove(package_name) --- wait_for_result(com) --+ try: --+ sys_iface.remove(object_name) --+ except dbus.DBusException, exception: --+ raise Error, _("Script error: %s") % exception --Index: api.py --=================================================================== ----- api.py (revision 16886) --+++ api.py (working copy) --@@ -71,13 +71,13 @@ -- """ -- ctx.comar = enable -- ---def set_comar_sockname(sockname): --+def set_dbus_sockname(sockname): -- """ --- Set comar socket file --+ Set dbus socket file -- Used by YALI --- @param sockname: Path to comar socket file --+ @param sockname: Path to dbus socket file -- """ --- ctx.comar_sockname = sockname --+ ctx.dbus_sockname = sockname -- -- def set_options(options): -- """ --Index: atomicoperations.py --=================================================================== ----- atomicoperations.py (revision 16886) --+++ atomicoperations.py (working copy) --@@ -152,7 +152,7 @@ -- # check comar -- if self.metadata.package.providesComar and ctx.comar: -- import pisi.comariface as comariface --- comariface.get_comar() --+ comariface.get_iface() -- -- def check_relations(self): -- # check dependencies --Index: context.py --=================================================================== ----- context.py (revision 16886) --+++ context.py (working copy) --@@ -38,7 +38,7 @@ -- stderr = None -- -- comar = True ---comar_sockname = None --+dbus_sockname = None -- -- # Bug #2879 -- # FIXME: Maybe we can create a simple rollback mechanism. There are other Index: pisi/comariface.py =================================================================== ---- pisi/comariface.py (revision 16918) +--- pisi/comariface.py (revision 17117) +++ pisi/comariface.py (working copy) -@@ -25,117 +25,137 @@ +@@ -25,117 +25,146 @@ pass try: @@ -332,7 +64,7 @@ Index: pisi/comariface.py - return com - except comar.CannotConnect: + bus = dbus.bus.BusConnection(address_or_type=sockname) -+ obj = bus.get_object("tr.org.pardus.comar", obj_path) ++ obj = bus.get_object(ctx.comar_destination, obj_path) + iface = dbus.Interface(obj, dbus_interface=obj_interface) + return iface + except dbus.DBusException: @@ -388,6 +120,7 @@ Index: pisi/comariface.py ctx.ui.info(_("Configuring %s package") % package_name) self_post = False - com = get_comar() ++ sys_service = False + sys_iface = get_iface() + object_name = make_object_path(package_name) @@ -397,10 +130,18 @@ Index: pisi/comariface.py self_post = True - com.register(script.om, package_name, os.path.join(scriptpath, script.script)) - wait_for_result(com) ++ elif script.om == "System.Service": ++ sys_service = False + try: + sys_iface.register(object_name, script.om, os.path.join(scriptpath, script.script)) + except dbus.DBusException, exception: + raise Error, _("Script error: %s") % exception ++ if sys_service: ++ try: ++ iface = get_iface(object_name, "System.Service") ++ iface.registerState() ++ except dbus.DBusException, exception: ++ raise Error, _("Script error: %s") % exception ctx.ui.debug(_("Calling post install handlers")) - com.call("System.PackageHandler.setupPackage", [ "metapath", metapath, "filepath", filepath ]) @@ -483,16 +224,23 @@ Index: pisi/comariface.py + raise Error, _("Script error: %s") % exception Index: pisi/api.py =================================================================== ---- pisi/api.py (revision 16918) +--- pisi/api.py (revision 17117) +++ pisi/api.py (working copy) -@@ -71,13 +71,13 @@ +@@ -71,13 +71,20 @@ """ ctx.comar = enable -def set_comar_sockname(sockname): -+def set_dbus_sockname(sockname): ++def set_comar_destination(destination): """ - Set comar socket file ++ Set comar bus destination ++ @param destination: Path to bus destination of COMAR ++ """ ++ ctx.comar_destination = destination ++ ++def set_dbus_sockname(sockname): ++ """ + Set dbus socket file Used by YALI - @param sockname: Path to comar socket file @@ -505,7 +253,7 @@ Index: pisi/api.py """ Index: pisi/atomicoperations.py =================================================================== ---- pisi/atomicoperations.py (revision 16918) +--- pisi/atomicoperations.py (revision 17117) +++ pisi/atomicoperations.py (working copy) @@ -152,7 +152,7 @@ # check comar @@ -518,13 +266,14 @@ Index: pisi/atomicoperations.py # check dependencies Index: pisi/context.py =================================================================== ---- pisi/context.py (revision 16918) +--- pisi/context.py (revision 17117) +++ pisi/context.py (working copy) -@@ -38,7 +38,7 @@ +@@ -38,7 +38,8 @@ stderr = None comar = True -comar_sockname = None ++comar_destination = "tr.org.pardus.comar" +dbus_sockname = None # Bug #2879