summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <julian.klode@canonical.com>2025-02-03 19:00:25 +0100
committerJulian Andres Klode <julian.klode@canonical.com>2025-02-14 19:04:56 +0100
commit50f1335212909962b9bba8db74e8be005a55f4e1 (patch)
tree6571749d755a431d602b09257863c8645a590d87
parent85eeadde2aefeb0bea1eff4dc2456eec8a405d05 (diff)
Add DepIterator::IsSatisfied(PkgIterator)
This allows checking if a dependency is satisfied by all versions of a package.
-rw-r--r--apt-pkg/cacheiterators.h1
-rw-r--r--apt-pkg/pkgcache.cc7
2 files changed, 8 insertions, 0 deletions
diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h
index 31ce1b295..38b4b8635 100644
--- a/apt-pkg/cacheiterators.h
+++ b/apt-pkg/cacheiterators.h
@@ -330,6 +330,7 @@ class APT_PUBLIC pkgCache::DepIterator : public Iterator<Dependency, DepIterator
but change architecture nonetheless as a Conflicts: foo does applies for all archs */
bool IsImplicit() const APT_PURE;
+ bool IsSatisfied(PkgIterator const &Pkg) const APT_PURE;
bool IsSatisfied(VerIterator const &Ver) const APT_PURE;
bool IsSatisfied(PrvIterator const &Prv) const APT_PURE;
void GlobOr(DepIterator &Start,DepIterator &End);
diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc
index bccd7798f..1f1aadf59 100644
--- a/apt-pkg/pkgcache.cc
+++ b/apt-pkg/pkgcache.cc
@@ -776,6 +776,13 @@ bool pkgCache::DepIterator::IsIgnorable(PrvIterator const &Prv) const
}
/*}}}*/
// DepIterator::IsSatisfied - check if a version satisfied the dependency /*{{{*/
+bool pkgCache::DepIterator::IsSatisfied(PkgIterator const &Pkg) const
+{
+ for (auto ver = Pkg.VersionList(); not ver.end(); ++ver)
+ if (not IsSatisfied(ver))
+ return false;
+ return not Pkg.VersionList().end();
+}
bool pkgCache::DepIterator::IsSatisfied(VerIterator const &Ver) const
{
return Owner->VS->CheckDep(Ver.VerStr(),S2->CompareOp,TargetVer());