X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/b53c9cea2902572822bbbece5bac236c1bbf846e..7d19ee92f2368a40e739cb27d22d6d28f37ebf45:/apt-pkg/policy.cc?ds=sidebyside diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc index 91ad1d5bf..d442e5c90 100644 --- a/apt-pkg/policy.cc +++ b/apt-pkg/policy.cc @@ -222,8 +222,8 @@ pkgCache::VerIterator pkgPolicy::GetCandidateVer(pkgCache::PkgIterator const &Pk return Pref; } - -// Policy::GetCandidateVer - Get the candidate install version /*{{{*/ + /*}}}*/ +// Policy::GetCandidateVerNew - Get the candidate install version /*{{{*/ // --------------------------------------------------------------------- /* Evaluate the package pins and the default list to deteremine what the best package is. */ @@ -235,16 +235,16 @@ pkgCache::VerIterator pkgPolicy::GetCandidateVerNew(pkgCache::PkgIterator const int candPriority = -1; pkgVersioningSystem *vs = Cache->VS; - for (pkgCache::VerIterator ver = Pkg.VersionList(); ver.end() == false; ver++) { - int priority = GetPriority(ver); + for (pkgCache::VerIterator ver = Pkg.VersionList(); ver.end() == false; ++ver) { + int priority = GetPriority(ver, true); - if (priority == 0 || priority <= candPriority) - continue; + if (priority == 0 || priority <= candPriority) + continue; - // TODO: Maybe optimize to not compare versions - if (!cur.end() && priority < 1000 - && (vs->CmpVersion(ver.VerStr(), cur.VerStr()) < 0)) - continue; + // TODO: Maybe optimize to not compare versions + if (!cur.end() && priority < 1000 + && (vs->CmpVersion(ver.VerStr(), cur.VerStr()) < 0)) + continue; candPriority = priority; cand = ver; @@ -322,7 +322,7 @@ void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name, // Find matching version(s) and copy the pin into it pkgVersionMatch Match(P->Data,P->Type); - for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() != true; Ver++) + for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() != true; ++Ver) { if (Match.VersionMatches(Ver)) { Pin *VP = VerPins + Ver->ID; @@ -409,7 +409,8 @@ bool ReadPinDir(pkgPolicy &Plcy,string Dir) if (DirectoryExists(Dir) == false) { - _error->WarningE("DirectoryExists",_("Unable to read %s"),Dir.c_str()); + if (Dir != "/dev/null") + _error->WarningE("DirectoryExists",_("Unable to read %s"),Dir.c_str()); return true; } @@ -438,7 +439,7 @@ bool ReadPinFile(pkgPolicy &Plcy,string File) FileFd Fd(File,FileFd::ReadOnly); pkgTagFile TF(&Fd); - if (_error->PendingError() == true) + if (Fd.IsOpen() == false || Fd.Failed()) return false; pkgUserTagSection Tags; @@ -477,10 +478,13 @@ bool ReadPinFile(pkgPolicy &Plcy,string File) } for (; Word != End && isspace(*Word) != 0; Word++); - int priority = Tags.FindI("Pin-Priority", 0); + _error->PushToStack(); + int const priority = Tags.FindI("Pin-Priority", 0); + bool const newError = _error->PendingError(); + _error->MergeWithStack(); if (priority < std::numeric_limits::min() || priority > std::numeric_limits::max() || - _error->PendingError()) { + newError) { return _error->Error(_("%s: Value %s is outside the range of valid pin priorities (%d to %d)"), File.c_str(), Tags.FindS("Pin-Priority").c_str(), std::numeric_limits::min(),