summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;