diff --git a/pisi/atomicoperations.py b/pisi/atomicoperations.py index a10c89f7..0d5c2316 100644 --- a/pisi/atomicoperations.py +++ b/pisi/atomicoperations.py @@ -139,6 +139,10 @@ class Install(AtomicOperation): self.operation = INSTALL def install(self, ask_reinstall = True): + + # Any package should remove the package it replaces before + self.check_replaces() + ctx.ui.status(_('Installing %s, version %s, release %s, build %s') % (self.pkginfo.name, self.pkginfo.version, self.pkginfo.release, self.pkginfo.build)) @@ -175,6 +179,11 @@ class Install(AtomicOperation): import pisi.comariface as comariface comariface.get_link() + def check_replaces(self): + for replaced in self.pkginfo.replaces: + if self.installdb.has_package(replaced.package): + pisi.operations.remove.remove_replaced_packages([replaced.package]) + def check_versioning(self, version): if not pisi.version.Version.valid(version): raise Error("%s is not a valid PiSi version format" % version) diff --git a/pisi/operations/upgrade.py b/pisi/operations/upgrade.py index 3291bf7c..2910962e 100644 --- a/pisi/operations/upgrade.py +++ b/pisi/operations/upgrade.py @@ -165,7 +165,6 @@ def upgrade(A=[], repo=None): if conflicts: operations.remove.remove_conflicting_packages(conflicts) - operations.remove.remove_replaced_packages(replaces.keys()) operations.remove.remove_obsoleted_packages() for path in paths: