rediff
This commit is contained in:
+280
-12
@@ -1,7 +1,275 @@
|
|||||||
Index: comariface.py
|
Index: comar-dbus.patch
|
||||||
===================================================================
|
===================================================================
|
||||||
--- comariface.py (revision 16886)
|
--- comar-dbus.patch (revision 16918)
|
||||||
+++ comariface.py (working copy)
|
+++ 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 (working copy)
|
||||||
@@ -25,117 +25,137 @@
|
@@ -25,117 +25,137 @@
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -213,10 +481,10 @@ Index: comariface.py
|
|||||||
+ sys_iface.remove(object_name)
|
+ sys_iface.remove(object_name)
|
||||||
+ except dbus.DBusException, exception:
|
+ except dbus.DBusException, exception:
|
||||||
+ raise Error, _("Script error: %s") % exception
|
+ raise Error, _("Script error: %s") % exception
|
||||||
Index: api.py
|
Index: pisi/api.py
|
||||||
===================================================================
|
===================================================================
|
||||||
--- api.py (revision 16886)
|
--- pisi/api.py (revision 16918)
|
||||||
+++ api.py (working copy)
|
+++ pisi/api.py (working copy)
|
||||||
@@ -71,13 +71,13 @@
|
@@ -71,13 +71,13 @@
|
||||||
"""
|
"""
|
||||||
ctx.comar = enable
|
ctx.comar = enable
|
||||||
@@ -235,10 +503,10 @@ Index: api.py
|
|||||||
|
|
||||||
def set_options(options):
|
def set_options(options):
|
||||||
"""
|
"""
|
||||||
Index: atomicoperations.py
|
Index: pisi/atomicoperations.py
|
||||||
===================================================================
|
===================================================================
|
||||||
--- atomicoperations.py (revision 16886)
|
--- pisi/atomicoperations.py (revision 16918)
|
||||||
+++ atomicoperations.py (working copy)
|
+++ pisi/atomicoperations.py (working copy)
|
||||||
@@ -152,7 +152,7 @@
|
@@ -152,7 +152,7 @@
|
||||||
# check comar
|
# check comar
|
||||||
if self.metadata.package.providesComar and ctx.comar:
|
if self.metadata.package.providesComar and ctx.comar:
|
||||||
@@ -248,10 +516,10 @@ Index: atomicoperations.py
|
|||||||
|
|
||||||
def check_relations(self):
|
def check_relations(self):
|
||||||
# check dependencies
|
# check dependencies
|
||||||
Index: context.py
|
Index: pisi/context.py
|
||||||
===================================================================
|
===================================================================
|
||||||
--- context.py (revision 16886)
|
--- pisi/context.py (revision 16918)
|
||||||
+++ context.py (working copy)
|
+++ pisi/context.py (working copy)
|
||||||
@@ -38,7 +38,7 @@
|
@@ -38,7 +38,7 @@
|
||||||
stderr = None
|
stderr = None
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user