From bc0491ae52c1b1375129de52d96fc5698671ff46 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Wed, 28 Aug 2013 00:12:11 +0200 Subject: [PATCH] BPackageInfo: Add Matches() Checks whether the package satisfies the given BPackageResolvableExpression. --- headers/os/package/PackageInfo.h | 3 +++ src/kits/package/PackageInfo.cpp | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/headers/os/package/PackageInfo.h b/headers/os/package/PackageInfo.h index 4d691df6a0..8653506ee5 100644 --- a/headers/os/package/PackageInfo.h +++ b/headers/os/package/PackageInfo.h @@ -105,6 +105,9 @@ public: BString CanonicalFileName() const; + bool Matches(const BPackageResolvableExpression& + expression) const; + void SetName(const BString& name); void SetSummary(const BString& summary); void SetDescription(const BString& description); diff --git a/src/kits/package/PackageInfo.cpp b/src/kits/package/PackageInfo.cpp index de50705382..35c1eddf9b 100644 --- a/src/kits/package/PackageInfo.cpp +++ b/src/kits/package/PackageInfo.cpp @@ -582,6 +582,27 @@ BPackageInfo::CanonicalFileName() const } +bool +BPackageInfo::Matches(const BPackageResolvableExpression& expression) const +{ + // check for an explicit match on the package + if (expression.Name().StartsWith("pkg:")) { + return fName == expression.Name().String() + 4 + && expression.Matches(fVersion, fVersion); + } + + // search for a matching provides + int32 count = fProvidesList.CountItems(); + for (int32 i = 0; i < count; i++) { + const BPackageResolvable* provides = fProvidesList.ItemAt(i); + if (expression.Matches(*provides)) + return true; + } + + return false; +} + + void BPackageInfo::SetName(const BString& name) {