summaryrefslogtreecommitdiffstats
path: root/apt-private
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 02:48:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 02:48:10 +0000
commit7f9ceaec776a597e9ff8451038d57dd75e1e6d18 (patch)
tree284aa831d7c1c097a28b9048e594e071efa8e65c /apt-private
parentReleasing progress-linux version 2.9.3-0.0~progress7.99u1. (diff)
downloadapt-7f9ceaec776a597e9ff8451038d57dd75e1e6d18.tar.xz
apt-7f9ceaec776a597e9ff8451038d57dd75e1e6d18.zip
Merging upstream version 2.9.4.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'apt-private')
-rw-r--r--apt-private/private-install.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/apt-private/private-install.cc b/apt-private/private-install.cc
index 4f71f18..599caac 100644
--- a/apt-private/private-install.cc
+++ b/apt-private/private-install.cc
@@ -658,6 +658,24 @@ bool DoAutomaticRemove(CacheFile &Cache)
if (not Cache->VS().CheckDep(PVerStr, R->CompareOp, R.TargetVer()))
continue;
}
+ // ignore new providers if we have installed providers
+ if (Pkg->CurrentVer == 0)
+ {
+ std::unique_ptr<pkgCache::Version *[]> VList(R.AllTargets());
+ bool has_installed_alt_prov = false;
+ for (pkgCache::Version **V = VList.get(); *V != 0; ++V)
+ {
+ pkgCache::VerIterator Ver(Cache, *V);
+ auto const P = Ver.ParentPkg();
+ if (not P.end() && P->CurrentVer != 0 && Cache[P].InstallVer == *V)
+ {
+ has_installed_alt_prov = true;
+ break;
+ }
+ }
+ if (has_installed_alt_prov)
+ continue;
+ }
if (Debug == true)
std::clog << "Save " << APT::PrettyPkg(Cache, Pkg) << " as another installed package depends on it: " << APT::PrettyPkg(Cache, RP) << std::endl;
Cache->MarkInstall(Pkg, false, 0, false);