Browse Source

* apt-pkg/policy.cc:

- get the candidate right for a not-installed pseudo package if
    his non-pseudo friend is installed
tags/debian/0.8.0
David Kalnischkies 11 years ago
parent
commit
9ee8287e5e
3 changed files with 27 additions and 14 deletions
  1. +21
    -11
      apt-pkg/policy.cc
  2. +2
    -2
      apt-pkg/policy.h
  3. +4
    -1
      debian/changelog

+ 21
- 11
apt-pkg/policy.cc View File

@@ -115,7 +115,7 @@ bool pkgPolicy::InitDefaults()
// ---------------------------------------------------------------------
/* Evaluate the package pins and the default list to deteremine what the
best package is. */
pkgCache::VerIterator pkgPolicy::GetCandidateVer(pkgCache::PkgIterator Pkg)
pkgCache::VerIterator pkgPolicy::GetCandidateVer(pkgCache::PkgIterator const &Pkg)
{
// Look for a package pin and evaluate it.
signed Max = GetPriority(Pkg);
@@ -147,6 +147,16 @@ pkgCache::VerIterator pkgPolicy::GetCandidateVer(pkgCache::PkgIterator Pkg)
*/
for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() == false; Ver++)
{
/* Lets see if this version is the installed version */
bool instVer = (Pkg.CurrentVer() == Ver);
if (Ver.Pseudo() == true && instVer == false)
{
pkgCache::PkgIterator const allPkg = Ver.ParentPkg().Group().FindPkg("all");
if (allPkg->CurrentVer != 0 && allPkg.CurrentVer()->Hash == Ver->Hash &&
strcmp(allPkg.CurVersion(), Ver.VerStr()) == 0)
instVer = true;
}

for (pkgCache::VerFileIterator VF = Ver.FileList(); VF.end() == false; VF++)
{
/* If this is the status file, and the current version is not the
@@ -155,9 +165,9 @@ pkgCache::VerIterator pkgPolicy::GetCandidateVer(pkgCache::PkgIterator Pkg)
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)
instVer == false)
continue;
signed Prio = PFPriority[VF.File()->ID];
if (Prio > Max)
{
@@ -171,7 +181,7 @@ pkgCache::VerIterator pkgPolicy::GetCandidateVer(pkgCache::PkgIterator Pkg)
}
}
if (Pkg.CurrentVer() == Ver && Max < 1000)
if (instVer == true && Max < 1000)
{
/* Elevate our current selection (or the status file itself)
to the Pseudo-status priority. */
@@ -189,6 +199,7 @@ pkgCache::VerIterator pkgPolicy::GetCandidateVer(pkgCache::PkgIterator Pkg)
// will always be a candidate (Closes: #512318)
if (!Pref.IsGood() && MaxAlt > 0)
Pref = PrefAlt;

return Pref;
}
/*}}}*/
@@ -238,15 +249,14 @@ void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name,
// Policy::GetMatch - Get the matching version for a package pin /*{{{*/
// ---------------------------------------------------------------------
/* */
pkgCache::VerIterator pkgPolicy::GetMatch(pkgCache::PkgIterator Pkg)
pkgCache::VerIterator pkgPolicy::GetMatch(pkgCache::PkgIterator const &Pkg)
{
const Pin &PPkg = Pins[Pkg->ID];
if (PPkg.Type != pkgVersionMatch::None)
{
pkgVersionMatch Match(PPkg.Data,PPkg.Type);
return Match.Find(Pkg);
}
return pkgCache::VerIterator(*Pkg.Cache());
if (PPkg.Type == pkgVersionMatch::None)
return pkgCache::VerIterator(*Pkg.Cache());

pkgVersionMatch Match(PPkg.Data,PPkg.Type);
return Match.Find(Pkg);
}
/*}}}*/
// Policy::GetPriority - Get the priority of the package pin /*{{{*/


+ 2
- 2
apt-pkg/policy.h View File

@@ -72,10 +72,10 @@ class pkgPolicy : public pkgDepCache::Policy
inline signed short GetPriority(pkgCache::PkgFileIterator const &File)
{return PFPriority[File->ID];};
signed short GetPriority(pkgCache::PkgIterator const &Pkg);
pkgCache::VerIterator GetMatch(pkgCache::PkgIterator Pkg);
pkgCache::VerIterator GetMatch(pkgCache::PkgIterator const &Pkg);

// Things for the cache interface.
virtual pkgCache::VerIterator GetCandidateVer(pkgCache::PkgIterator Pkg);
virtual pkgCache::VerIterator GetCandidateVer(pkgCache::PkgIterator const &Pkg);
virtual bool IsImportantDep(pkgCache::DepIterator Dep) {return pkgDepCache::Policy::IsImportantDep(Dep);};
bool InitDefaults();


+ 4
- 1
debian/changelog View File

@@ -81,8 +81,11 @@ apt (0.7.26~exp6) UNRELEASED; urgency=low
looking code copycat from wget
* ftparchive/writer.cc:
- add ValidTime option to generate a Valid-Until header in Release file
* apt-pkg/policy.cc:
- get the candidate right for a not-installed pseudo package if
his non-pseudo friend is installed

-- David Kalnischkies <kalnischkies@gmail.com> Wed, 09 Jun 2010 10:52:31 +0200
-- David Kalnischkies <kalnischkies@gmail.com> Wed, 09 Jun 2010 14:20:19 +0200

apt (0.7.26~exp5) experimental; urgency=low



Loading…
Cancel
Save