]> git.saurik.com Git - apt.git/commitdiff
simplify the code for wildcard pinning a bit
authorDavid Kalnischkies <kalnischkies@gmail.com>
Thu, 21 Apr 2011 14:38:06 +0000 (16:38 +0200)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Thu, 21 Apr 2011 14:38:06 +0000 (16:38 +0200)
apt-pkg/policy.cc

index 3d6ec1cdc4387b9e026c5645569c61d8af0d469d..2cc2e5e39cfc23d911650c0c4208892e630c0b72 100644 (file)
@@ -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;