summaryrefslogtreecommitdiff
path: root/apt-pkg/cachefilter-patterns.h
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg/cachefilter-patterns.h')
-rw-r--r--apt-pkg/cachefilter-patterns.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/apt-pkg/cachefilter-patterns.h b/apt-pkg/cachefilter-patterns.h
index d64bc4ccf..048c7041f 100644
--- a/apt-pkg/cachefilter-patterns.h
+++ b/apt-pkg/cachefilter-patterns.h
@@ -295,6 +295,28 @@ struct APT_HIDDEN VersionIsAllVersions : public Matcher
}
};
+struct APT_HIDDEN VersionDepends : public VersionAnyMatcher
+{
+ std::unique_ptr<APT::CacheFilter::Matcher> base;
+ pkgCache::Dep::DepType type;
+ VersionDepends(std::unique_ptr<APT::CacheFilter::Matcher> base, pkgCache::Dep::DepType type = pkgCache::Dep::Depends) : base(std::move(base)), type(type) {}
+ bool operator()(pkgCache::GrpIterator const &) override { return false; }
+ bool operator()(pkgCache::VerIterator const &Ver) override
+ {
+ for (auto D = Ver.DependsList(); not D.end(); D++)
+ {
+ if (D.IsImplicit())
+ continue;
+ if (D->Type != type)
+ continue;
+ if ((*base)(D.TargetPkg()))
+ return true;
+ }
+
+ return false;
+ }
+};
+
struct APT_HIDDEN VersionIsAnyVersion : public VersionAnyMatcher
{
std::unique_ptr<APT::CacheFilter::Matcher> base;