summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/packagemanager.cc5
-rw-r--r--debian/changelog3
2 files changed, 6 insertions, 2 deletions
diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc
index d2d2753a8..9ca6098fd 100644
--- a/apt-pkg/packagemanager.cc
+++ b/apt-pkg/packagemanager.cc
@@ -856,7 +856,10 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c
This way we avoid that M-A: enabled packages are installed before
their older non-M-A enabled packages are replaced by newer versions */
bool const installed = Pkg->CurrentVer != 0;
- if (installed == true && Install(Pkg,FileNames[Pkg->ID]) == false)
+ if (installed == true &&
+ (instVer != Pkg.CurrentVer() ||
+ ((Cache[Pkg].iFlags & pkgDepCache::ReInstall) == pkgDepCache::ReInstall)) &&
+ Install(Pkg,FileNames[Pkg->ID]) == false)
return false;
for (PkgIterator P = Pkg.Group().PackageList();
P.end() == false; P = Pkg.Group().NextPkg(P))
diff --git a/debian/changelog b/debian/changelog
index 67566bbe1..e62f0b681 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -11,9 +11,10 @@ apt (0.9.7.5) UNRELEASED; urgency=low
- handle Components in the reduction for the source.list as multi-arch CDs
otherwise create duplicated source entries (e.g. "wheezy main main")
* apt-pkg/packagemanager.cc:
- - unpack versions in case a different version from the package
+ - unpack versions only in case a different version from the package
is currently in unpack state to recover from broken system states
(like different file in M-A:same package and other dpkg errors)
+ and avoid re-unpack otherwise (Closes: #670900)
* debian/control:
- let libapt-pkg break apt < 0.9.4 to ensure that the installed http-
method supports the new redirection-style, thanks to Raphael Geissert