Просмотр исходного кода

simplify the code for wildcard pinning a bit

David Kalnischkies лет назад: 15
Родитель
Сommit
a8d7c10134
1 измененных файлов с 7 добавлено и 10 удалено
  1. 7 10
      apt-pkg/policy.cc

+ 7 - 10
apt-pkg/policy.cc

@@ -220,21 +220,18 @@ void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name,
    // Allow pinning by wildcards
    // Allow pinning by wildcards
    // TODO: Maybe we should always prefer specific pins over non-
    // TODO: Maybe we should always prefer specific pins over non-
    // specific ones.
    // 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;
       return;
    }
    }
 
 
    // Get a spot to put the pin
    // Get a spot to put the pin
    pkgCache::GrpIterator Grp = Cache->FindGrp(Name);
    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))
 	Pkg.end() != true; Pkg = Grp.NextPkg(Pkg))
    {
    {
       Pin *P = 0;
       Pin *P = 0;