This commit is contained in:
S.Çağlar Onur
2008-02-01 18:16:16 +00:00
parent f8d0c01cb0
commit 6b395c9623
+280 -12
View File
@@ -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