diff options
| author | Julian Andres Klode <jak@debian.org> | 2021-10-19 15:02:17 +0000 |
|---|---|---|
| committer | Julian Andres Klode <jak@debian.org> | 2021-10-19 15:02:17 +0000 |
| commit | 9d9ccbbc685035e410e9f3dd5dd488a21d48661d (patch) | |
| tree | 858d35d97fa3ac432bb1bebe6c96cf52591c1cde /apt-pkg/versionmatch.cc | |
| parent | 400a6895566b67d70bcde43dc8a1cc1c7121f87d (diff) | |
| parent | 572810e9f321237873d1536c88991d7825c6f1db (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.cc | 15 |
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{}; } /*}}}*/ |
