Merged COMAR patch. PiSi now has a cleaner comar interface module.
This commit is contained in:
@@ -1,3 +1,6 @@
|
|||||||
|
2009-03-24 Bahadır Kandemir <bahadir@pardus.org.tr>
|
||||||
|
* Merged COMAR patch. PiSi now has a cleaner comar interface module.
|
||||||
|
|
||||||
2009-03-11 Ozan Çağlayan <ozan@pardus.org.tr>
|
2009-03-11 Ozan Çağlayan <ozan@pardus.org.tr>
|
||||||
* pisi/actionsapi/pisitools.py: Implement new method removeLaFiles()
|
* pisi/actionsapi/pisitools.py: Implement new method removeLaFiles()
|
||||||
to recursively delete libtool *la files from /usr/lib.
|
to recursively delete libtool *la files from /usr/lib.
|
||||||
|
|||||||
@@ -5,9 +5,8 @@ You can install PiSi on your system with a single command.
|
|||||||
If you are on a Pardus system, you should delete /usr/lib/pardus/pisi
|
If you are on a Pardus system, you should delete /usr/lib/pardus/pisi
|
||||||
when you are installing the SVN version
|
when you are installing the SVN version
|
||||||
|
|
||||||
PiSi requires piksemel XML processing library, the newest version
|
PiSi requires piksemel XML processing library, Pardus configuration
|
||||||
bsd bindings called "bsddb3" and Pardus configuration manager COMAR
|
manager COMAR and COMAR API in order to run.
|
||||||
in order to run.
|
|
||||||
|
|
||||||
If you are upgrading from an old PiSi release you may have to
|
If you are upgrading from an old PiSi release you may have to
|
||||||
run the following command as root:
|
run the following command as root:
|
||||||
|
|||||||
-291
@@ -1,291 +0,0 @@
|
|||||||
Index: pisi/comariface.py
|
|
||||||
===================================================================
|
|
||||||
--- pisi/comariface.py (revision 21915)
|
|
||||||
+++ pisi/comariface.py (working copy)
|
|
||||||
@@ -26,16 +26,23 @@
|
|
||||||
pass
|
|
||||||
|
|
||||||
try:
|
|
||||||
+ import comar
|
|
||||||
import dbus
|
|
||||||
except ImportError:
|
|
||||||
- raise Error(_("dbus-python package is not fully installed"))
|
|
||||||
+ raise Error(_("comar-api package is not fully installed"))
|
|
||||||
|
|
||||||
def is_char_valid(char):
|
|
||||||
"""Test if char is valid object path character."""
|
|
||||||
return char in string.ascii_letters + string.digits + "_"
|
|
||||||
|
|
||||||
-def make_object_path(package):
|
|
||||||
- """Generates DBus object name from package name."""
|
|
||||||
+def is_method_missing(exception):
|
|
||||||
+ """Tells if exception is about missing method in COMAR script"""
|
|
||||||
+ if exception._dbus_error_name in ("tr.org.pardus.comar.python.missing", "tr.org.pardus.comar.Missing"):
|
|
||||||
+ return True
|
|
||||||
+ return False
|
|
||||||
+
|
|
||||||
+def safe_package_name(package):
|
|
||||||
+ """Generates DBus-safe object name for package name."""
|
|
||||||
object = package
|
|
||||||
for char in package:
|
|
||||||
if not is_char_valid(char):
|
|
||||||
@@ -44,8 +51,8 @@
|
|
||||||
object = '_%s' % object
|
|
||||||
return object
|
|
||||||
|
|
||||||
-def get_iface(package="", model=""):
|
|
||||||
- """Connect to the DBus daemon and return the system interface."""
|
|
||||||
+def get_link():
|
|
||||||
+ """Connect to the COMAR daemon and return the link."""
|
|
||||||
|
|
||||||
sockname = "/var/run/dbus/system_bus_socket"
|
|
||||||
# YALI starts comar chrooted in the install target, but uses PiSi outside of
|
|
||||||
@@ -55,14 +62,12 @@
|
|
||||||
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"
|
|
||||||
+ alternate = False
|
|
||||||
+ # If COMAR package is updated, all new configuration requests should be
|
|
||||||
+ # made through new COMAR service. Passing alternate=True to Link() class
|
|
||||||
+ # will ensure this.
|
|
||||||
+ if ctx.comar_updated:
|
|
||||||
+ alternate = True
|
|
||||||
|
|
||||||
# This function is sometimes called when comar has recently started
|
|
||||||
# or restarting after an update. So we give comar a chance to become
|
|
||||||
@@ -71,19 +76,15 @@
|
|
||||||
exceptions = []
|
|
||||||
while timeout > 0:
|
|
||||||
try:
|
|
||||||
- bus = dbus.bus.BusConnection(address_or_type="unix:path=%s" % sockname)
|
|
||||||
- obj = bus.get_object(ctx.comar_destination, obj_path, introspect=False)
|
|
||||||
- iface = dbus.Interface(obj, dbus_interface=obj_interface)
|
|
||||||
- return iface
|
|
||||||
+ link = comar.Link(socket=sockname, alternate=alternate)
|
|
||||||
+ return link
|
|
||||||
except dbus.DBusException, e:
|
|
||||||
exceptions.append(str(e))
|
|
||||||
- pass
|
|
||||||
except Exception, e:
|
|
||||||
exceptions.append(str(e))
|
|
||||||
- pass
|
|
||||||
time.sleep(0.2)
|
|
||||||
timeout -= 0.2
|
|
||||||
- raise Error(_("cannot connect to dbus: \n %s\n") % "\n ".join(exceptions))
|
|
||||||
+ raise Error(_("Cannot connect to COMAR: \n %s\n") % "\n ".join(exceptions))
|
|
||||||
|
|
||||||
def post_install(package_name, provided_scripts, scriptpath, metapath, filepath, fromVersion, fromRelease, toVersion, toRelease):
|
|
||||||
"""Do package's post install operations"""
|
|
||||||
@@ -91,9 +92,10 @@
|
|
||||||
ctx.ui.info(_("Configuring %s package") % package_name)
|
|
||||||
self_post = False
|
|
||||||
sys_service = False
|
|
||||||
- sys_iface = get_iface()
|
|
||||||
- object_name = make_object_path(package_name)
|
|
||||||
+ link = get_link()
|
|
||||||
|
|
||||||
+ package_name = safe_package_name(package_name)
|
|
||||||
+
|
|
||||||
for script in provided_scripts:
|
|
||||||
ctx.ui.debug(_("Registering %s comar script") % script.om)
|
|
||||||
if script.om == "System.Package":
|
|
||||||
@@ -101,25 +103,22 @@
|
|
||||||
elif script.om == "System.Service":
|
|
||||||
sys_service = True
|
|
||||||
try:
|
|
||||||
- sys_iface.register(object_name, script.om, os.path.join(scriptpath, script.script), timeout=ctx.dbus_timeout)
|
|
||||||
+ link.register(package_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(timeout=ctx.dbus_timeout)
|
|
||||||
+ link.System.Service[package_name].registerState()
|
|
||||||
except dbus.DBusException, exception:
|
|
||||||
raise Error, _("Script error: %s") % exception
|
|
||||||
|
|
||||||
ctx.ui.debug(_("Calling post install handlers"))
|
|
||||||
- for handler in sys_iface.listModelApplications("System.PackageHandler", timeout=ctx.dbus_timeout):
|
|
||||||
- iface = get_iface(handler, "System.PackageHandler")
|
|
||||||
+ for handler in link.System.PackageHandler:
|
|
||||||
try:
|
|
||||||
- iface.setupPackage(metapath, filepath, timeout=ctx.dbus_timeout)
|
|
||||||
+ link.System.PackageHandler[handler].setupPackage(metapath, filepath)
|
|
||||||
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'):
|
|
||||||
+ if not is_method_missing(exception):
|
|
||||||
raise Error, _("Script error: %s") % exception
|
|
||||||
|
|
||||||
if self_post:
|
|
||||||
@@ -130,48 +129,70 @@
|
|
||||||
|
|
||||||
ctx.ui.debug(_("Running package's post install script"))
|
|
||||||
try:
|
|
||||||
- iface = get_iface(object_name, "System.Package")
|
|
||||||
- iface.postInstall(fromVersion, fromRelease, toVersion, toRelease, timeout=ctx.dbus_timeout)
|
|
||||||
+ link.System.Package[package_name].postInstall(fromVersion, fromRelease, toVersion, toRelease, timeout=ctx.dbus_timeout)
|
|
||||||
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'):
|
|
||||||
+ if not is_method_missing(exception):
|
|
||||||
raise Error, _("Script error: %s") % exception
|
|
||||||
|
|
||||||
if package_name == 'comar':
|
|
||||||
- pisi.api.set_comar_destination('tr.org.pardus.comar2')
|
|
||||||
+ ctx.ui.debug(_("COMAR package updated. From now on, using new COMAR daemon."))
|
|
||||||
+ pisi.api.set_comar_updated(True)
|
|
||||||
|
|
||||||
def pre_remove(package_name, metapath, filepath):
|
|
||||||
"""Do package's pre removal operations"""
|
|
||||||
|
|
||||||
ctx.ui.info(_("Configuring %s package for removal") % package_name)
|
|
||||||
- sys_iface = get_iface()
|
|
||||||
- object_name = make_object_path(package_name)
|
|
||||||
+ link = get_link()
|
|
||||||
|
|
||||||
- if "System.Package" in sys_iface.listApplicationModels(object_name, timeout=ctx.dbus_timeout):
|
|
||||||
+ package_name = safe_package_name(package_name)
|
|
||||||
+
|
|
||||||
+ if package_name in list(link.System.Package):
|
|
||||||
ctx.ui.debug(_("Running package's pre remove script"))
|
|
||||||
- iface = get_iface(object_name, "System.Package")
|
|
||||||
try:
|
|
||||||
- iface.preRemove(timeout=ctx.dbus_timeout)
|
|
||||||
+ link.System.Package[package_name].preRemove(timeout=ctx.dbus_timeout)
|
|
||||||
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'):
|
|
||||||
+ if not is_method_missing(exception):
|
|
||||||
raise Error, _("Script error: %s") % exception
|
|
||||||
|
|
||||||
ctx.ui.debug(_("Calling pre remove handlers"))
|
|
||||||
- for handler in sys_iface.listModelApplications("System.PackageHandler"):
|
|
||||||
- iface = get_iface(handler, "System.PackageHandler")
|
|
||||||
+ for handler in list(link.System.PackageHandler):
|
|
||||||
try:
|
|
||||||
- iface.cleanupPackage(metapath, filepath, timeout=ctx.dbus_timeout)
|
|
||||||
+ link.System.PackageHandler[handler].cleanupPackage(metapath, filepath, timeout=ctx.dbus_timeout)
|
|
||||||
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'):
|
|
||||||
+ if not is_method_missing(exception):
|
|
||||||
raise Error, _("Script error: %s") % exception
|
|
||||||
+
|
|
||||||
+def post_remove(package_name, metapath, filepath):
|
|
||||||
+ """Do package's post removal operations"""
|
|
||||||
|
|
||||||
+ ctx.ui.info(_("Configuring %s package for removal") % package_name)
|
|
||||||
+ link = get_link()
|
|
||||||
+
|
|
||||||
+ package_name = safe_package_name(package_name)
|
|
||||||
+
|
|
||||||
+ if package_name in list(link.System.Package):
|
|
||||||
+ ctx.ui.debug(_("Running package's postremove script"))
|
|
||||||
+ try:
|
|
||||||
+ link.System.Package[package_name].postRemove(timeout=ctx.dbus_timeout)
|
|
||||||
+ except dbus.DBusException, exception:
|
|
||||||
+ # Do nothing if postRemove method is not defined in package script
|
|
||||||
+ if not is_method_missing(exception):
|
|
||||||
+ raise Error, _("Script error: %s") % exception
|
|
||||||
+
|
|
||||||
+ ctx.ui.debug(_("Calling post remove handlers"))
|
|
||||||
+ for handler in list(link.System.PackageHandler):
|
|
||||||
+ try:
|
|
||||||
+ link.System.PackageHandler[handler].postCleanupPackage(metapath, filepath, timeout=ctx.dbus_timeout)
|
|
||||||
+ except dbus.DBusException, exception:
|
|
||||||
+ # Do nothing if postCleanupPackage method is not defined in package script
|
|
||||||
+ if not is_method_missing(exception):
|
|
||||||
+ raise Error, _("Script error: %s") % exception
|
|
||||||
+
|
|
||||||
ctx.ui.debug(_("Unregistering comar scripts"))
|
|
||||||
try:
|
|
||||||
- sys_iface.remove(object_name, timeout=ctx.dbus_timeout)
|
|
||||||
+ link.remove(package_name, timeout=ctx.dbus_timeout)
|
|
||||||
except dbus.DBusException, exception:
|
|
||||||
raise Error, _("Script error: %s") % exception
|
|
||||||
Index: pisi/api.py
|
|
||||||
===================================================================
|
|
||||||
--- pisi/api.py (revision 21915)
|
|
||||||
+++ pisi/api.py (working copy)
|
|
||||||
@@ -97,12 +97,12 @@
|
|
||||||
"""
|
|
||||||
ctx.comar = enable
|
|
||||||
|
|
||||||
-def set_comar_destination(destination):
|
|
||||||
+def set_comar_updated(updated):
|
|
||||||
"""
|
|
||||||
- Set comar bus destination
|
|
||||||
- @param destination: Path to bus destination of COMAR
|
|
||||||
+ Set comar package update status
|
|
||||||
+ @param updated: True if COMAR package is updated, else False
|
|
||||||
"""
|
|
||||||
- ctx.comar_destination = destination
|
|
||||||
+ ctx.comar_updated = updated
|
|
||||||
|
|
||||||
def set_dbus_sockname(sockname):
|
|
||||||
"""
|
|
||||||
Index: pisi/atomicoperations.py
|
|
||||||
===================================================================
|
|
||||||
--- pisi/atomicoperations.py (revision 21915)
|
|
||||||
+++ pisi/atomicoperations.py (working copy)
|
|
||||||
@@ -165,7 +165,7 @@
|
|
||||||
# check comar
|
|
||||||
if self.metadata.package.providesComar and ctx.comar:
|
|
||||||
import pisi.comariface as comariface
|
|
||||||
- comariface.get_iface()
|
|
||||||
+ comariface.get_link()
|
|
||||||
|
|
||||||
def check_versioning(self, version):
|
|
||||||
if not pisi.version.Version.valid(version):
|
|
||||||
@@ -492,6 +492,8 @@
|
|
||||||
for fileinfo in self.files.list:
|
|
||||||
self.remove_file(fileinfo, self.package_name, True)
|
|
||||||
|
|
||||||
+ self.run_postremove()
|
|
||||||
+
|
|
||||||
self.update_databases()
|
|
||||||
|
|
||||||
self.remove_pisi_files()
|
|
||||||
@@ -568,6 +570,15 @@
|
|
||||||
os.path.join(self.package.pkg_dir(), ctx.const.files_xml),
|
|
||||||
)
|
|
||||||
|
|
||||||
+ def run_postremove(self):
|
|
||||||
+ if ctx.comar:
|
|
||||||
+ import pisi.comariface
|
|
||||||
+ pisi.comariface.post_remove(
|
|
||||||
+ self.package_name,
|
|
||||||
+ os.path.join(self.package.pkg_dir(), ctx.const.metadata_xml),
|
|
||||||
+ os.path.join(self.package.pkg_dir(), ctx.const.files_xml),
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
def update_databases(self):
|
|
||||||
self.remove_db()
|
|
||||||
self.historydb.add_and_update(pkgBefore=self.package, operation="remove")
|
|
||||||
Index: pisi/context.py
|
|
||||||
===================================================================
|
|
||||||
--- pisi/context.py (revision 21915)
|
|
||||||
+++ pisi/context.py (working copy)
|
|
||||||
@@ -38,7 +38,7 @@
|
|
||||||
stderr = None
|
|
||||||
|
|
||||||
comar = True
|
|
||||||
-comar_destination = "tr.org.pardus.comar"
|
|
||||||
+comar_updated = False
|
|
||||||
dbus_sockname = None
|
|
||||||
dbus_timeout = 300
|
|
||||||
|
|
||||||
+4
-4
@@ -97,12 +97,12 @@ def set_comar(enable):
|
|||||||
"""
|
"""
|
||||||
ctx.comar = enable
|
ctx.comar = enable
|
||||||
|
|
||||||
def set_comar_destination(destination):
|
def set_comar_updated(updated):
|
||||||
"""
|
"""
|
||||||
Set comar bus destination
|
Set comar package update status
|
||||||
@param destination: Path to bus destination of COMAR
|
@param updated: True if COMAR package is updated, else False
|
||||||
"""
|
"""
|
||||||
ctx.comar_destination = destination
|
ctx.comar_updated = updated
|
||||||
|
|
||||||
def set_dbus_sockname(sockname):
|
def set_dbus_sockname(sockname):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ class Install(AtomicOperation):
|
|||||||
# check comar
|
# check comar
|
||||||
if self.metadata.package.providesComar and ctx.comar:
|
if self.metadata.package.providesComar and ctx.comar:
|
||||||
import pisi.comariface as comariface
|
import pisi.comariface as comariface
|
||||||
comariface.get_iface()
|
comariface.get_link()
|
||||||
|
|
||||||
def check_versioning(self, version):
|
def check_versioning(self, version):
|
||||||
if not pisi.version.Version.valid(version):
|
if not pisi.version.Version.valid(version):
|
||||||
@@ -492,6 +492,8 @@ class Remove(AtomicOperation):
|
|||||||
for fileinfo in self.files.list:
|
for fileinfo in self.files.list:
|
||||||
self.remove_file(fileinfo, self.package_name, True)
|
self.remove_file(fileinfo, self.package_name, True)
|
||||||
|
|
||||||
|
self.run_postremove()
|
||||||
|
|
||||||
self.update_databases()
|
self.update_databases()
|
||||||
|
|
||||||
self.remove_pisi_files()
|
self.remove_pisi_files()
|
||||||
@@ -568,6 +570,15 @@ class Remove(AtomicOperation):
|
|||||||
os.path.join(self.package.pkg_dir(), ctx.const.files_xml),
|
os.path.join(self.package.pkg_dir(), ctx.const.files_xml),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def run_postremove(self):
|
||||||
|
if ctx.comar:
|
||||||
|
import pisi.comariface
|
||||||
|
pisi.comariface.post_remove(
|
||||||
|
self.package_name,
|
||||||
|
os.path.join(self.package.pkg_dir(), ctx.const.metadata_xml),
|
||||||
|
os.path.join(self.package.pkg_dir(), ctx.const.files_xml),
|
||||||
|
)
|
||||||
|
|
||||||
def update_databases(self):
|
def update_databases(self):
|
||||||
self.remove_db()
|
self.remove_db()
|
||||||
self.historydb.add_and_update(pkgBefore=self.package, operation="remove")
|
self.historydb.add_and_update(pkgBefore=self.package, operation="remove")
|
||||||
|
|||||||
+72
-50
@@ -26,16 +26,23 @@ class Error(pisi.Error):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
import comar
|
||||||
import dbus
|
import dbus
|
||||||
except ImportError:
|
except ImportError:
|
||||||
raise Error(_("dbus-python package is not fully installed"))
|
raise Error(_("comar-api package is not fully installed"))
|
||||||
|
|
||||||
def is_char_valid(char):
|
def is_char_valid(char):
|
||||||
"""Test if char is valid object path character."""
|
"""Test if char is valid object path character."""
|
||||||
return char in string.ascii_letters + string.digits + "_"
|
return char in string.ascii_letters + string.digits + "_"
|
||||||
|
|
||||||
def make_object_path(package):
|
def is_method_missing(exception):
|
||||||
"""Generates DBus object name from package name."""
|
"""Tells if exception is about missing method in COMAR script"""
|
||||||
|
if exception._dbus_error_name in ("tr.org.pardus.comar.python.missing", "tr.org.pardus.comar.Missing"):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def safe_package_name(package):
|
||||||
|
"""Generates DBus-safe object name for package name."""
|
||||||
object = package
|
object = package
|
||||||
for char in package:
|
for char in package:
|
||||||
if not is_char_valid(char):
|
if not is_char_valid(char):
|
||||||
@@ -44,8 +51,8 @@ def make_object_path(package):
|
|||||||
object = '_%s' % object
|
object = '_%s' % object
|
||||||
return object
|
return object
|
||||||
|
|
||||||
def get_iface(package="", model=""):
|
def get_link():
|
||||||
"""Connect to the DBus daemon and return the system interface."""
|
"""Connect to the COMAR daemon and return the link."""
|
||||||
|
|
||||||
sockname = "/var/run/dbus/system_bus_socket"
|
sockname = "/var/run/dbus/system_bus_socket"
|
||||||
# YALI starts comar chrooted in the install target, but uses PiSi outside of
|
# YALI starts comar chrooted in the install target, but uses PiSi outside of
|
||||||
@@ -55,14 +62,12 @@ def get_iface(package="", model=""):
|
|||||||
if ctx.dbus_sockname:
|
if ctx.dbus_sockname:
|
||||||
sockname = ctx.dbus_sockname
|
sockname = ctx.dbus_sockname
|
||||||
|
|
||||||
if package:
|
alternate = False
|
||||||
obj_path = "/package/%s" % package
|
# If COMAR package is updated, all new configuration requests should be
|
||||||
else:
|
# made through new COMAR service. Passing alternate=True to Link() class
|
||||||
obj_path = "/"
|
# will ensure this.
|
||||||
if model:
|
if ctx.comar_updated:
|
||||||
obj_interface = "tr.org.pardus.comar.%s" % model
|
alternate = True
|
||||||
else:
|
|
||||||
obj_interface = "tr.org.pardus.comar"
|
|
||||||
|
|
||||||
# This function is sometimes called when comar has recently started
|
# This function is sometimes called when comar has recently started
|
||||||
# or restarting after an update. So we give comar a chance to become
|
# or restarting after an update. So we give comar a chance to become
|
||||||
@@ -71,19 +76,15 @@ def get_iface(package="", model=""):
|
|||||||
exceptions = []
|
exceptions = []
|
||||||
while timeout > 0:
|
while timeout > 0:
|
||||||
try:
|
try:
|
||||||
bus = dbus.bus.BusConnection(address_or_type="unix:path=%s" % sockname)
|
link = comar.Link(socket=sockname, alternate=alternate)
|
||||||
obj = bus.get_object(ctx.comar_destination, obj_path, introspect=False)
|
return link
|
||||||
iface = dbus.Interface(obj, dbus_interface=obj_interface)
|
|
||||||
return iface
|
|
||||||
except dbus.DBusException, e:
|
except dbus.DBusException, e:
|
||||||
exceptions.append(str(e))
|
exceptions.append(str(e))
|
||||||
pass
|
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
exceptions.append(str(e))
|
exceptions.append(str(e))
|
||||||
pass
|
|
||||||
time.sleep(0.2)
|
time.sleep(0.2)
|
||||||
timeout -= 0.2
|
timeout -= 0.2
|
||||||
raise Error(_("cannot connect to dbus: \n %s\n") % "\n ".join(exceptions))
|
raise Error(_("Cannot connect to COMAR: \n %s\n") % "\n ".join(exceptions))
|
||||||
|
|
||||||
def post_install(package_name, provided_scripts, scriptpath, metapath, filepath, fromVersion, fromRelease, toVersion, toRelease):
|
def post_install(package_name, provided_scripts, scriptpath, metapath, filepath, fromVersion, fromRelease, toVersion, toRelease):
|
||||||
"""Do package's post install operations"""
|
"""Do package's post install operations"""
|
||||||
@@ -91,8 +92,14 @@ def post_install(package_name, provided_scripts, scriptpath, metapath, filepath,
|
|||||||
ctx.ui.info(_("Configuring %s package") % package_name)
|
ctx.ui.info(_("Configuring %s package") % package_name)
|
||||||
self_post = False
|
self_post = False
|
||||||
sys_service = False
|
sys_service = False
|
||||||
sys_iface = get_iface()
|
|
||||||
object_name = make_object_path(package_name)
|
package_name = safe_package_name(package_name)
|
||||||
|
|
||||||
|
if package_name == 'comar':
|
||||||
|
ctx.ui.debug(_("COMAR package updated. From now on, using new COMAR daemon."))
|
||||||
|
pisi.api.set_comar_updated(True)
|
||||||
|
|
||||||
|
link = get_link()
|
||||||
|
|
||||||
for script in provided_scripts:
|
for script in provided_scripts:
|
||||||
ctx.ui.debug(_("Registering %s comar script") % script.om)
|
ctx.ui.debug(_("Registering %s comar script") % script.om)
|
||||||
@@ -101,25 +108,22 @@ def post_install(package_name, provided_scripts, scriptpath, metapath, filepath,
|
|||||||
elif script.om == "System.Service":
|
elif script.om == "System.Service":
|
||||||
sys_service = True
|
sys_service = True
|
||||||
try:
|
try:
|
||||||
sys_iface.register(object_name, script.om, os.path.join(scriptpath, script.script), timeout=ctx.dbus_timeout)
|
link.register(package_name, script.om, os.path.join(scriptpath, script.script))
|
||||||
except dbus.DBusException, exception:
|
except dbus.DBusException, exception:
|
||||||
raise Error, _("Script error: %s") % exception
|
raise Error, _("Script error: %s") % exception
|
||||||
if sys_service:
|
if sys_service:
|
||||||
try:
|
try:
|
||||||
iface = get_iface(object_name, "System.Service")
|
link.System.Service[package_name].registerState()
|
||||||
iface.registerState(timeout=ctx.dbus_timeout)
|
|
||||||
except dbus.DBusException, exception:
|
except dbus.DBusException, exception:
|
||||||
raise Error, _("Script error: %s") % exception
|
raise Error, _("Script error: %s") % exception
|
||||||
|
|
||||||
ctx.ui.debug(_("Calling post install handlers"))
|
ctx.ui.debug(_("Calling post install handlers"))
|
||||||
for handler in sys_iface.listModelApplications("System.PackageHandler", timeout=ctx.dbus_timeout):
|
for handler in link.System.PackageHandler:
|
||||||
iface = get_iface(handler, "System.PackageHandler")
|
|
||||||
try:
|
try:
|
||||||
iface.setupPackage(metapath, filepath, timeout=ctx.dbus_timeout)
|
link.System.PackageHandler[handler].setupPackage(metapath, filepath)
|
||||||
except dbus.DBusException, exception:
|
except dbus.DBusException, exception:
|
||||||
# Do nothing if setupPackage method is not defined in package script
|
# Do nothing if setupPackage method is not defined in package script
|
||||||
if not (exception._dbus_error_name.startswith("tr.org.pardus.comar") and
|
if not is_method_missing(exception):
|
||||||
exception._dbus_error_name.split('tr.org.pardus.comar.')[1] == 'python.missing'):
|
|
||||||
raise Error, _("Script error: %s") % exception
|
raise Error, _("Script error: %s") % exception
|
||||||
|
|
||||||
if self_post:
|
if self_post:
|
||||||
@@ -130,48 +134,66 @@ def post_install(package_name, provided_scripts, scriptpath, metapath, filepath,
|
|||||||
|
|
||||||
ctx.ui.debug(_("Running package's post install script"))
|
ctx.ui.debug(_("Running package's post install script"))
|
||||||
try:
|
try:
|
||||||
iface = get_iface(object_name, "System.Package")
|
link.System.Package[package_name].postInstall(fromVersion, fromRelease, toVersion, toRelease, timeout=ctx.dbus_timeout)
|
||||||
iface.postInstall(fromVersion, fromRelease, toVersion, toRelease, timeout=ctx.dbus_timeout)
|
|
||||||
except dbus.DBusException, exception:
|
except dbus.DBusException, exception:
|
||||||
# Do nothing if postInstall method is not defined in package script
|
# Do nothing if postInstall method is not defined in package script
|
||||||
if not (exception._dbus_error_name.startswith("tr.org.pardus.comar") and
|
if not is_method_missing(exception):
|
||||||
exception._dbus_error_name.split('tr.org.pardus.comar.')[1] == 'python.missing'):
|
|
||||||
raise Error, _("Script error: %s") % exception
|
raise Error, _("Script error: %s") % exception
|
||||||
|
|
||||||
if package_name == 'comar':
|
|
||||||
pisi.api.set_comar_destination('tr.org.pardus.comar2')
|
|
||||||
|
|
||||||
def pre_remove(package_name, metapath, filepath):
|
def pre_remove(package_name, metapath, filepath):
|
||||||
"""Do package's pre removal operations"""
|
"""Do package's pre removal operations"""
|
||||||
|
|
||||||
ctx.ui.info(_("Configuring %s package for removal") % package_name)
|
ctx.ui.info(_("Configuring %s package for removal") % package_name)
|
||||||
sys_iface = get_iface()
|
link = get_link()
|
||||||
object_name = make_object_path(package_name)
|
|
||||||
|
|
||||||
if "System.Package" in sys_iface.listApplicationModels(object_name, timeout=ctx.dbus_timeout):
|
package_name = safe_package_name(package_name)
|
||||||
|
|
||||||
|
if package_name in list(link.System.Package):
|
||||||
ctx.ui.debug(_("Running package's pre remove script"))
|
ctx.ui.debug(_("Running package's pre remove script"))
|
||||||
iface = get_iface(object_name, "System.Package")
|
|
||||||
try:
|
try:
|
||||||
iface.preRemove(timeout=ctx.dbus_timeout)
|
link.System.Package[package_name].preRemove(timeout=ctx.dbus_timeout)
|
||||||
except dbus.DBusException, exception:
|
except dbus.DBusException, exception:
|
||||||
# Do nothing if preRemove method is not defined in package script
|
# Do nothing if preRemove method is not defined in package script
|
||||||
if not (exception._dbus_error_name.startswith("tr.org.pardus.comar") and
|
if not is_method_missing(exception):
|
||||||
exception._dbus_error_name.split('tr.org.pardus.comar.')[1] == 'python.missing'):
|
|
||||||
raise Error, _("Script error: %s") % exception
|
raise Error, _("Script error: %s") % exception
|
||||||
|
|
||||||
ctx.ui.debug(_("Calling pre remove handlers"))
|
ctx.ui.debug(_("Calling pre remove handlers"))
|
||||||
for handler in sys_iface.listModelApplications("System.PackageHandler"):
|
for handler in list(link.System.PackageHandler):
|
||||||
iface = get_iface(handler, "System.PackageHandler")
|
|
||||||
try:
|
try:
|
||||||
iface.cleanupPackage(metapath, filepath, timeout=ctx.dbus_timeout)
|
link.System.PackageHandler[handler].cleanupPackage(metapath, filepath, timeout=ctx.dbus_timeout)
|
||||||
except dbus.DBusException, exception:
|
except dbus.DBusException, exception:
|
||||||
# Do nothing if cleanupPackage method is not defined in package script
|
# Do nothing if cleanupPackage method is not defined in package script
|
||||||
if not (exception._dbus_error_name.startswith("tr.org.pardus.comar") and
|
if not is_method_missing(exception):
|
||||||
exception._dbus_error_name.split('tr.org.pardus.comar.')[1] == 'python.missing'):
|
raise Error, _("Script error: %s") % exception
|
||||||
|
|
||||||
|
def post_remove(package_name, metapath, filepath):
|
||||||
|
"""Do package's post removal operations"""
|
||||||
|
|
||||||
|
ctx.ui.info(_("Configuring %s package for removal") % package_name)
|
||||||
|
link = get_link()
|
||||||
|
|
||||||
|
package_name = safe_package_name(package_name)
|
||||||
|
|
||||||
|
if package_name in list(link.System.Package):
|
||||||
|
ctx.ui.debug(_("Running package's postremove script"))
|
||||||
|
try:
|
||||||
|
link.System.Package[package_name].postRemove(timeout=ctx.dbus_timeout)
|
||||||
|
except dbus.DBusException, exception:
|
||||||
|
# Do nothing if postRemove method is not defined in package script
|
||||||
|
if not is_method_missing(exception):
|
||||||
|
raise Error, _("Script error: %s") % exception
|
||||||
|
|
||||||
|
ctx.ui.debug(_("Calling post remove handlers"))
|
||||||
|
for handler in list(link.System.PackageHandler):
|
||||||
|
try:
|
||||||
|
link.System.PackageHandler[handler].postCleanupPackage(metapath, filepath, timeout=ctx.dbus_timeout)
|
||||||
|
except dbus.DBusException, exception:
|
||||||
|
# Do nothing if postCleanupPackage method is not defined in package script
|
||||||
|
if not is_method_missing(exception):
|
||||||
raise Error, _("Script error: %s") % exception
|
raise Error, _("Script error: %s") % exception
|
||||||
|
|
||||||
ctx.ui.debug(_("Unregistering comar scripts"))
|
ctx.ui.debug(_("Unregistering comar scripts"))
|
||||||
try:
|
try:
|
||||||
sys_iface.remove(object_name, timeout=ctx.dbus_timeout)
|
link.remove(package_name, timeout=ctx.dbus_timeout)
|
||||||
except dbus.DBusException, exception:
|
except dbus.DBusException, exception:
|
||||||
raise Error, _("Script error: %s") % exception
|
raise Error, _("Script error: %s") % exception
|
||||||
|
|||||||
+1
-1
@@ -38,7 +38,7 @@ stdout = None
|
|||||||
stderr = None
|
stderr = None
|
||||||
|
|
||||||
comar = True
|
comar = True
|
||||||
comar_destination = "tr.org.pardus.comar"
|
comar_updated = False
|
||||||
dbus_sockname = None
|
dbus_sockname = None
|
||||||
dbus_timeout = 300
|
dbus_timeout = 300
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user