summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/policy.cc2
-rw-r--r--apt-pkg/versionmatch.cc10
-rw-r--r--apt-pkg/versionmatch.h2
3 files changed, 12 insertions, 2 deletions
diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc
index b1d8e7223..5d361af1a 100644
--- a/apt-pkg/policy.cc
+++ b/apt-pkg/policy.cc
@@ -452,6 +452,8 @@ bool ReadPinFile(pkgPolicy &Plcy,string File)
pkgVersionMatch::MatchType Type;
if (stringcasecmp(Start,Word,"version") == 0 && Name.empty() == false)
Type = pkgVersionMatch::Version;
+ else if (stringcasecmp(Start,Word,"source-version") == 0 && Name.empty() == false)
+ Type = pkgVersionMatch::SourceVersion;
else if (stringcasecmp(Start,Word,"release") == 0)
Type = pkgVersionMatch::Release;
else if (stringcasecmp(Start,Word,"origin") == 0)
diff --git a/apt-pkg/versionmatch.cc b/apt-pkg/versionmatch.cc
index f95232ac3..3af51e40c 100644
--- a/apt-pkg/versionmatch.cc
+++ b/apt-pkg/versionmatch.cc
@@ -42,7 +42,7 @@ pkgVersionMatch::pkgVersionMatch(string Data,MatchType Type) : Type(Type)
return;
// Cut up the version representation
- if (Type == Version)
+ if (Type == Version || Type == SourceVersion)
{
if (Data.end()[-1] == '*')
{
@@ -177,6 +177,14 @@ pkgCache::VerIterator pkgVersionMatch::Find(pkgCache::PkgIterator Pkg)
/* */
bool pkgVersionMatch::VersionMatches(pkgCache::VerIterator Ver)
{
+ if (Type == SourceVersion)
+ {
+ if (MatchVer(Ver.SourceVerStr(),VerStr,VerPrefixMatch) == true)
+ return true;
+ if (ExpressionMatches(VerStr, Ver.SourceVerStr()) == true)
+ return true;
+ return false;
+ }
if (Type == Version)
{
if (MatchVer(Ver.VerStr(),VerStr,VerPrefixMatch) == true)
diff --git a/apt-pkg/versionmatch.h b/apt-pkg/versionmatch.h
index faf1fd436..abaec08d6 100644
--- a/apt-pkg/versionmatch.h
+++ b/apt-pkg/versionmatch.h
@@ -62,7 +62,7 @@ class APT_PUBLIC pkgVersionMatch
public:
- enum MatchType {None = 0,Version,Release,Origin} Type;
+ enum MatchType {None = 0,Version,Release,Origin, SourceVersion} Type;
bool MatchVer(const char *A,std::string B,bool Prefix) APT_PURE;
static bool ExpressionMatches(const char *pattern, const char *string);