diff --git a/pisi-spec.rng b/pisi-spec.rng
index 6c1e5f51..0fc029c6 100644
--- a/pisi-spec.rng
+++ b/pisi-spec.rng
@@ -1420,6 +1420,9 @@
+
+
+
diff --git a/pisi/atomicoperations.py b/pisi/atomicoperations.py
index 7e1f3de2..c40c8da0 100644
--- a/pisi/atomicoperations.py
+++ b/pisi/atomicoperations.py
@@ -674,11 +674,12 @@ class Remove(AtomicOperation):
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),
+ provided_scripts=self.package.providesComar,
)
def update_databases(self):
self.remove_db()
- self.historydb.add_and_update(pkgBefore=self.package, operation="remove")
+ self.historydb.add_and_update(pkgBefore=self.package, operation="remove")
def remove_pisi_files(self):
util.clean_dir(self.package.pkg_dir())
diff --git a/pisi/comariface.py b/pisi/comariface.py
index 4db9a072..20b1c771 100644
--- a/pisi/comariface.py
+++ b/pisi/comariface.py
@@ -104,17 +104,18 @@ def post_install(package_name, provided_scripts, scriptpath, metapath, filepath,
for script in provided_scripts:
ctx.ui.debug(_("Registering %s comar script") % script.om)
+ script_name = script.name if script.name else package_name
if script.om == "System.Package":
self_post = True
elif script.om == "System.Service":
sys_service = True
try:
- link.register(package_name, script.om, os.path.join(scriptpath, script.script))
+ link.register(script_name, script.om, os.path.join(scriptpath, script.script))
except dbus.DBusException, exception:
raise Error, _("Script error: %s") % exception
if sys_service:
try:
- link.System.Service[package_name].registerState()
+ link.System.Service[script_name].registerState()
except dbus.DBusException, exception:
raise Error, _("Script error: %s") % exception
@@ -167,13 +168,15 @@ def pre_remove(package_name, metapath, filepath):
if not is_method_missing(exception):
raise Error, _("Script error: %s") % exception
-def post_remove(package_name, metapath, filepath):
+def post_remove(package_name, metapath, filepath, provided_scripts=[]):
"""Do package's post removal operations"""
ctx.ui.info(_("Running post removal operations for %s") % package_name)
link = get_link()
package_name = safe_package_name(package_name)
+ scripts = set([s.name for s in provided_scripts if s.name])
+ scripts.add(package_name)
if package_name in list(link.System.Package):
ctx.ui.debug(_("Running package's postremove script"))
@@ -194,7 +197,8 @@ def post_remove(package_name, metapath, filepath):
raise Error, _("Script error: %s") % exception
ctx.ui.debug(_("Unregistering comar scripts"))
- try:
- link.remove(package_name, timeout=ctx.dbus_timeout)
- except dbus.DBusException, exception:
- raise Error, _("Script error: %s") % exception
+ for scr in scripts:
+ try:
+ link.remove(scr, timeout=ctx.dbus_timeout)
+ except dbus.DBusException, exception:
+ raise Error, _("Script error: %s") % exception
diff --git a/pisi/specfile.py b/pisi/specfile.py
index 40d440ab..32f0fc7d 100644
--- a/pisi/specfile.py
+++ b/pisi/specfile.py
@@ -142,11 +142,12 @@ class ComarProvide:
s_om = [autoxml.String, autoxml.mandatory]
a_script = [autoxml.String, autoxml.mandatory]
+ a_name = [autoxml.String, autoxml.optional]
def __str__(self):
# FIXME: descriptive enough?
s = self.script
- s += ' (' + self.om + ')'
+ s += ' (' + self.om + '%s' % (' for %s' % self.name if self.name else '') + ')'
return s
class Archive: