summaryrefslogtreecommitdiff
path: root/apt-pkg/policy.cc
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2011-04-21 16:38:06 +0200
committerDavid Kalnischkies <kalnischkies@gmail.com>2011-04-21 16:38:06 +0200
commita8d7c101340a614174371a4cf7c53cdcf3b3adfc (patch)
treeb33b1b274b2414b26940427c43d1e404da758be7 /apt-pkg/policy.cc
parentd8cba717e011eeae1be346325fd476f4caa753f3 (diff)
simplify the code for wildcard pinning a bit
Diffstat (limited to 'apt-pkg/policy.cc')
-rw-r--r--apt-pkg/policy.cc17
1 files changed, 7 insertions, 10 deletions
diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc
index 3d6ec1cdc..2cc2e5e39 100644
--- a/apt-pkg/policy.cc
+++ b/apt-pkg/policy.cc
@@ -220,21 +220,18 @@ void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name,
// Allow pinning by wildcards
// TODO: Maybe we should always prefer specific pins over non-
// specific ones.
- if (Name.find("*") != string::npos || Name.find("[") != string::npos
- || Name.find("?") != string::npos || Name[0] == '/') {
- pkgVersionMatch match(Data, Type);
- for (pkgCache::PkgIterator P = Cache->PkgBegin();
- P != Cache->PkgEnd(); P++) {
- if (match.ExpressionMatches(Name, P.Name())) {
- CreatePin(Type, P.Name(), Data, Priority);
- }
- }
+ if (Name[0] == '/' || Name.find_first_of("*[?") != string::npos)
+ {
+ pkgVersionMatch match(Data, Type);
+ for (pkgCache::GrpIterator G = Cache->GrpBegin(); G.end() != true; ++G)
+ if (match.ExpressionMatches(Name, G.Name()))
+ CreatePin(Type, G.Name(), Data, Priority);
return;
}
// Get a spot to put the pin
pkgCache::GrpIterator Grp = Cache->FindGrp(Name);
- for (pkgCache::PkgIterator Pkg = Grp.FindPkg("any");
+ for (pkgCache::PkgIterator Pkg = Grp.PackageList();
Pkg.end() != true; Pkg = Grp.NextPkg(Pkg))
{
Pin *P = 0;