diff options
author | Julian Andres Klode <jak@debian.org> | 2015-08-10 11:19:11 +0200 |
---|---|---|
committer | Julian Andres Klode <jak@debian.org> | 2015-08-10 11:19:11 +0200 |
commit | 5bfd306ee16fd1be012dd2cd01ae52ff4179176a (patch) | |
tree | 6fefd276ab3d2827542a24672302ba2d09609e67 | |
parent | 9fb02ab02528ea45747318af26fae8a732cd2840 (diff) |
versionmatch: Extract version match checking out of Find()
Refactor version matching to allow us to check if a version matches
a pin. This will aid the per-version pinning implementation.
-rw-r--r-- | apt-pkg/versionmatch.cc | 38 | ||||
-rw-r--r-- | apt-pkg/versionmatch.h | 1 |
2 files changed, 26 insertions, 13 deletions
diff --git a/apt-pkg/versionmatch.cc b/apt-pkg/versionmatch.cc index 86c1b7d4a..c215f522c 100644 --- a/apt-pkg/versionmatch.cc +++ b/apt-pkg/versionmatch.cc @@ -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 diff --git a/apt-pkg/versionmatch.h b/apt-pkg/versionmatch.h index bb950b9c7..156ad61cb 100644 --- a/apt-pkg/versionmatch.h +++ b/apt-pkg/versionmatch.h @@ -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); }; |