summaryrefslogtreecommitdiff
path: root/apt-pkg/versionmatch.cc
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2021-10-19 15:02:17 +0000
committerJulian Andres Klode <jak@debian.org>2021-10-19 15:02:17 +0000
commit9d9ccbbc685035e410e9f3dd5dd488a21d48661d (patch)
tree858d35d97fa3ac432bb1bebe6c96cf52591c1cde /apt-pkg/versionmatch.cc
parent400a6895566b67d70bcde43dc8a1cc1c7121f87d (diff)
parent572810e9f321237873d1536c88991d7825c6f1db (diff)
Merge branch 'feature/install-versioned-provides' into 'main'
Allow =version and /release selectors on virtual packages See merge request apt-team/apt!121
Diffstat (limited to 'apt-pkg/versionmatch.cc')
-rw-r--r--apt-pkg/versionmatch.cc15
1 files changed, 8 insertions, 7 deletions
diff --git a/apt-pkg/versionmatch.cc b/apt-pkg/versionmatch.cc
index 340f5a64c..82590edfe 100644
--- a/apt-pkg/versionmatch.cc
+++ b/apt-pkg/versionmatch.cc
@@ -159,15 +159,16 @@ bool pkgVersionMatch::MatchVer(const char *A,string B,bool Prefix)
/* */
pkgCache::VerIterator pkgVersionMatch::Find(pkgCache::PkgIterator Pkg)
{
- pkgCache::VerIterator Ver = Pkg.VersionList();
- for (; Ver.end() == false; ++Ver)
- {
+ for (auto Ver = Pkg.VersionList(); not Ver.end(); ++Ver)
if (VersionMatches(Ver))
return Ver;
- }
-
- // This will be Ended by now.
- return Ver;
+ // check if the package provides itself in a matching version
+ for (auto Prov = Pkg.ProvidesList(); not Prov.end(); ++Prov)
+ if (Prov->ProvideVersion != 0 && Prov.OwnerPkg() == Prov.ParentPkg())
+ if (MatchVer(Prov.ProvideVersion(), VerStr, VerPrefixMatch) ||
+ ExpressionMatches(VerStr, Prov.ProvideVersion()))
+ return Prov.OwnerVer();
+ return pkgCache::VerIterator{};
}
/*}}}*/