get comar bus address from context & remove self from patch
This commit is contained in:
+26
-277
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user