diff options
author | David Kalnischkies <kalnischkies@gmail.com> | 2011-06-29 23:26:38 +0200 |
---|---|---|
committer | David Kalnischkies <kalnischkies@gmail.com> | 2011-06-29 23:26:38 +0200 |
commit | e2bba11c9a1858c98954e7c5299d20a6c0966cc7 (patch) | |
tree | 989524c6e7833911ac3bb8de7fdac48450eb1075 /apt-pkg/policy.cc | |
parent | 1925ea3d0cd6579a4034acb7308e532d025319c7 (diff) |
- ensure that only the first specific stanza for a package is used
- save all stanzas which had no effect in Unmatched
Diffstat (limited to 'apt-pkg/policy.cc')
-rw-r--r-- | apt-pkg/policy.cc | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc index 827c9145c..78f44d635 100644 --- a/apt-pkg/policy.cc +++ b/apt-pkg/policy.cc @@ -229,28 +229,25 @@ void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name, return; } - // Get a spot to put the pin + // find the package group this pin applies to pkgCache::GrpIterator Grp = Cache->FindGrp(Name); if (Grp.end() == true) + { + Pin *P = &*Unmatched.insert(Unmatched.end(),PkgPin(Name)); + P->Type = Type; + P->Priority = Priority; + P->Data = Data; return; + } for (pkgCache::PkgIterator Pkg = Grp.PackageList(); Pkg.end() != true; Pkg = Grp.NextPkg(Pkg)) { - Pin *P = 0; - if (Pkg.end() == false) - P = Pins + Pkg->ID; - else - { - // Check the unmatched table - for (vector<PkgPin>::iterator I = Unmatched.begin(); - I != Unmatched.end() && P == 0; I++) - if (I->Pkg == Name) - P = &*I; - - if (P == 0) - P = &*Unmatched.insert(Unmatched.end(),PkgPin()); - } + Pin *P = Pins + Pkg->ID; + // the first specific stanza for a package is the ruler, + // all others need to be ignored + if (P->Type != pkgVersionMatch::None) + P = &*Unmatched.insert(Unmatched.end(),PkgPin(Pkg.FullName())); P->Type = Type; P->Priority = Priority; P->Data = Data; |