]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/policy.cc
the symbol for PrintStatus() is architecture dependent
[apt.git] / apt-pkg / policy.cc
index 5427271b6108b5e67a808fbd458691e26dc88889..2cc2e5e39cfc23d911650c0c4208892e630c0b72 100644 (file)
@@ -152,13 +152,6 @@ pkgCache::VerIterator pkgPolicy::GetCandidateVer(pkgCache::PkgIterator const &Pk
    {
       /* Lets see if this version is the installed version */
       bool instVer = (Pkg.CurrentVer() == Ver);
-      if (Ver.Pseudo() == true && instVer == false)
-      {
-        pkgCache::PkgIterator const allPkg = Ver.ParentPkg().Group().FindPkg("all");
-        if (allPkg->CurrentVer != 0 && allPkg.CurrentVer()->Hash == Ver->Hash &&
-            strcmp(allPkg.CurVersion(), Ver.VerStr()) == 0)
-           instVer = true;
-      }
 
       for (pkgCache::VerFileIterator VF = Ver.FileList(); VF.end() == false; VF++)
       {
@@ -223,10 +216,22 @@ void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name,
       P->Data = Data;
       return;
    }
+   
+   // Allow pinning by wildcards
+   // TODO: Maybe we should always prefer specific pins over non-
+   // specific ones.
+   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;