diff options
-rw-r--r-- | apt-pkg/policy.cc | 18 | ||||
-rw-r--r-- | debian/changelog | 4 |
2 files changed, 19 insertions, 3 deletions
diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc index 029a37df7..e813a0903 100644 --- a/apt-pkg/policy.cc +++ b/apt-pkg/policy.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: policy.cc,v 1.2 2001/02/20 07:03:17 jgg Exp $ +// $Id: policy.cc,v 1.3 2001/03/03 23:27:24 jgg Exp $ /* ###################################################################### Package Version Policy implementation @@ -145,9 +145,23 @@ pkgCache::VerIterator pkgPolicy::GetCandidateVer(pkgCache::PkgIterator Pkg) pin that stays at that setting. */ for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() == false; Ver++) - { + { + /* This is a side effect of the condition below, and is added for + completeness, though it should not be necessary */ + if (Ver->Arch == 0) + continue; + for (pkgCache::VerFileIterator VF = Ver.FileList(); VF.end() == false; VF++) { + /* If this is the status file, and the current version is not the + version in the status file (ie it is not installed, or somesuch) + then it is not a candidate for installation, ever. This weeds + out bogus entries that may be due to config-file states, or + other. */ + if ((VF.File()->Flags & pkgCache::Flag::NotSource) == pkgCache::Flag::NotSource && + Pkg.CurrentVer() != Ver) + continue; + signed Prio = PFPriority[VF.File()->ID]; if (Prio > Max) { diff --git a/debian/changelog b/debian/changelog index 86d495815..3199cfb74 100644 --- a/debian/changelog +++ b/debian/changelog @@ -15,7 +15,9 @@ apt (0.5.1) unstable; urgency=low * apt-extracttemplates moved from debconf into apt-utils * s390 archtable entry. Closes: #88232 * Dan's segfault - + * Some instances where the status file can source a package in a + non-sensical way. Closes: #87390 + -- Jason Gunthorpe <jgg@debian.org> Thu, 22 Feb 2001 00:39:15 -0500 apt (0.5.0) unstable; urgency=low |