]> git.saurik.com Git - apt.git/commitdiff
versionmatch: Extract version match checking out of Find()
authorJulian Andres Klode <jak@debian.org>
Mon, 10 Aug 2015 09:19:11 +0000 (11:19 +0200)
committerJulian Andres Klode <jak@debian.org>
Mon, 10 Aug 2015 09:19:11 +0000 (11:19 +0200)
Refactor version matching to allow us to check if a version matches
a pin. This will aid the per-version pinning implementation.

apt-pkg/versionmatch.cc
apt-pkg/versionmatch.h

index 86c1b7d4a65a3fc69d563cda5bd93b0549cfda64..c215f522c09b6e7b2dac79235bc0ce37291e2a62 100644 (file)
@@ -164,25 +164,37 @@ pkgCache::VerIterator pkgVersionMatch::Find(pkgCache::PkgIterator Pkg)
    pkgCache::VerIterator Ver = Pkg.VersionList();
    for (; Ver.end() == false; ++Ver)
    {
-      if (Type == Version)
-      {
-        if (MatchVer(Ver.VerStr(),VerStr,VerPrefixMatch) == true)
-           return Ver;
-        if (ExpressionMatches(VerStr, Ver.VerStr()) == true)
-           return Ver;
-        continue;
-      }
-      
-      for (pkgCache::VerFileIterator VF = Ver.FileList(); VF.end() == false; ++VF)
-        if (FileMatch(VF.File()) == true)
-           return Ver;
+      if (VersionMatches(Ver))
+        return Ver;
    }
-      
+
    // This will be Ended by now.
    return Ver;
 }
                                                                        /*}}}*/
 
+// VersionMatch::Find - Locate the best match for the select type      /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgVersionMatch::VersionMatches(pkgCache::VerIterator Ver)
+{
+   if (Type == Version)
+   {
+      if (MatchVer(Ver.VerStr(),VerStr,VerPrefixMatch) == true)
+        return true;
+      if (ExpressionMatches(VerStr, Ver.VerStr()) == true)
+        return true;
+      return false;
+   }
+
+   for (pkgCache::VerFileIterator VF = Ver.FileList(); VF.end() == false; ++VF)
+      if (FileMatch(VF.File()) == true)
+        return true;
+
+   return false;
+}
+                                                                       /*}}}*/
+
 #ifndef FNM_CASEFOLD
 #define FNM_CASEFOLD 0
 #endif
index bb950b9c7606bd75027894c7e5b6d6d6c8513844..156ad61cbf8ee1ce905a4110e1f67c3cf4757550 100644 (file)
@@ -74,6 +74,7 @@ class pkgVersionMatch
    static bool ExpressionMatches(const std::string& pattern, const char *string);
    bool FileMatch(pkgCache::PkgFileIterator File);
    pkgCache::VerIterator Find(pkgCache::PkgIterator Pkg);
+   bool VersionMatches(pkgCache::VerIterator Ver);
 
    pkgVersionMatch(std::string Data,MatchType Type);
 };