* made resolvable expression operator an enum instead of a string
* fixed a couple of copy'n'paste bugs during parsing of resolvable expression lists (they were all added as 'requires') git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40353 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
|
||||
#include <String.h>
|
||||
|
||||
#include <package/PackageResolvableOperator.h>
|
||||
#include <package/PackageVersion.h>
|
||||
|
||||
|
||||
@@ -34,27 +35,32 @@ public:
|
||||
BPackageResolvableExpression();
|
||||
BPackageResolvableExpression(
|
||||
const BString& name,
|
||||
const BString& _operator = "",
|
||||
BPackageResolvableOperator _op
|
||||
= B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT,
|
||||
const BPackageVersion& version
|
||||
= BPackageVersion());
|
||||
|
||||
status_t InitCheck() const;
|
||||
|
||||
const BString& Name() const;
|
||||
const BString& Operator() const;
|
||||
BPackageResolvableOperator Operator() const;
|
||||
const BPackageVersion& Version() const;
|
||||
|
||||
BString AsString() const;
|
||||
|
||||
void SetTo(const BString& name,
|
||||
const BString& _operator = "",
|
||||
BPackageResolvableOperator _op
|
||||
= B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT,
|
||||
const BPackageVersion& version
|
||||
= BPackageVersion());
|
||||
void Clear();
|
||||
|
||||
public:
|
||||
static const char* kOperatorNames[];
|
||||
|
||||
private:
|
||||
BString fName;
|
||||
BString fOperator;
|
||||
BPackageResolvableOperator fOperator;
|
||||
BPackageVersion fVersion;
|
||||
};
|
||||
|
||||
|
||||
@@ -506,6 +506,7 @@ BPackageInfo::Parser::_ParseResolvableExprList(
|
||||
if (op.type == TOKEN_OPERATOR_LESS
|
||||
|| op.type == TOKEN_OPERATOR_LESS_EQUAL
|
||||
|| op.type == TOKEN_OPERATOR_EQUAL
|
||||
|| op.type == TOKEN_OPERATOR_NOT_EQUAL
|
||||
|| op.type == TOKEN_OPERATOR_GREATER_EQUAL
|
||||
|| op.type == TOKEN_OPERATOR_GREATER)
|
||||
_ParseVersionValue(&version, true);
|
||||
@@ -513,11 +514,15 @@ BPackageInfo::Parser::_ParseResolvableExprList(
|
||||
_RewindTo(op);
|
||||
else {
|
||||
throw ParseError(
|
||||
"expected '<', '<=', '==', '>=', '>', comma or ']'", op.pos);
|
||||
"expected '<', '<=', '==', '!=', '>=', '>', comma or ']'",
|
||||
op.pos);
|
||||
}
|
||||
|
||||
value->AddItem(
|
||||
new BPackageResolvableExpression(name.text, op.text, version));
|
||||
BPackageResolvableOperator resolvableOperator
|
||||
= (BPackageResolvableOperator)(op.type - TOKEN_OPERATOR_LESS);
|
||||
|
||||
value->AddItem(new BPackageResolvableExpression(name.text,
|
||||
resolvableOperator, version));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -683,7 +688,7 @@ BPackageInfo::Parser::_Parse(BPackageInfo* packageInfo)
|
||||
_ParseResolvableExprList(&supplementsList);
|
||||
int count = supplementsList.CountItems();
|
||||
for (int i = 0; i < count; ++i)
|
||||
packageInfo->AddRequires(*(supplementsList.ItemAt(i)));
|
||||
packageInfo->AddSupplements(*(supplementsList.ItemAt(i)));
|
||||
seen[B_PACKAGE_INFO_SUPPLEMENTS] = true;
|
||||
} else if (t.text.ICompare(names[B_PACKAGE_INFO_CONFLICTS]) == 0) {
|
||||
if (seen[B_PACKAGE_INFO_CONFLICTS]) {
|
||||
@@ -696,7 +701,7 @@ BPackageInfo::Parser::_Parse(BPackageInfo* packageInfo)
|
||||
_ParseResolvableExprList(&conflictsList);
|
||||
int count = conflictsList.CountItems();
|
||||
for (int i = 0; i < count; ++i)
|
||||
packageInfo->AddRequires(*(conflictsList.ItemAt(i)));
|
||||
packageInfo->AddConflicts(*(conflictsList.ItemAt(i)));
|
||||
seen[B_PACKAGE_INFO_CONFLICTS] = true;
|
||||
} else if (t.text.ICompare(names[B_PACKAGE_INFO_FRESHENS]) == 0) {
|
||||
if (seen[B_PACKAGE_INFO_FRESHENS]) {
|
||||
@@ -709,7 +714,7 @@ BPackageInfo::Parser::_Parse(BPackageInfo* packageInfo)
|
||||
_ParseResolvableExprList(&freshensList);
|
||||
int count = freshensList.CountItems();
|
||||
for (int i = 0; i < count; ++i)
|
||||
packageInfo->AddRequires(*(freshensList.ItemAt(i)));
|
||||
packageInfo->AddFreshens(*(freshensList.ItemAt(i)));
|
||||
seen[B_PACKAGE_INFO_FRESHENS] = true;
|
||||
} else if (t.text.ICompare(names[B_PACKAGE_INFO_REPLACES]) == 0) {
|
||||
if (seen[B_PACKAGE_INFO_REPLACES]) {
|
||||
@@ -722,7 +727,7 @@ BPackageInfo::Parser::_Parse(BPackageInfo* packageInfo)
|
||||
_ParseStringList(&replacesList, false);
|
||||
int count = replacesList.CountItems();
|
||||
for (int i = 0; i < count; ++i)
|
||||
packageInfo->AddRequires(*(replacesList.ItemAt(i)));
|
||||
packageInfo->AddReplaces(*(replacesList.ItemAt(i)));
|
||||
seen[B_PACKAGE_INFO_REPLACES] = true;
|
||||
}
|
||||
}
|
||||
@@ -749,10 +754,10 @@ const char* BPackageInfo::kElementNames[B_PACKAGE_INFO_ENUM_COUNT] = {
|
||||
"licenses",
|
||||
"provides",
|
||||
"requires",
|
||||
"conflicts",
|
||||
"supplements",
|
||||
"replaces",
|
||||
"conflicts",
|
||||
"freshens",
|
||||
"replaces",
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -10,13 +10,27 @@
|
||||
namespace BPackageKit {
|
||||
|
||||
|
||||
const char*
|
||||
BPackageResolvableExpression
|
||||
::kOperatorNames[B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT] = {
|
||||
"<",
|
||||
"<=",
|
||||
"==",
|
||||
"!=",
|
||||
">=",
|
||||
">",
|
||||
};
|
||||
|
||||
|
||||
BPackageResolvableExpression::BPackageResolvableExpression()
|
||||
:
|
||||
fOperator(B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BPackageResolvableExpression::BPackageResolvableExpression(const BString& name,
|
||||
const BString& _operator, const BPackageVersion& version)
|
||||
BPackageResolvableOperator _operator, const BPackageVersion& version)
|
||||
:
|
||||
fName(name),
|
||||
fOperator(_operator),
|
||||
@@ -32,10 +46,10 @@ BPackageResolvableExpression::InitCheck() const
|
||||
return B_NO_INIT;
|
||||
|
||||
// either both or none of operator and version must be set
|
||||
if (fOperator.Length() == 0 && fVersion.InitCheck() == B_OK)
|
||||
return B_NO_INIT;
|
||||
|
||||
if (fOperator.Length() > 0 && fVersion.InitCheck() != B_OK)
|
||||
if ((fOperator == B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT
|
||||
&& fVersion.InitCheck() == B_OK)
|
||||
|| (fOperator >= 0 && fOperator < B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT
|
||||
&& fVersion.InitCheck() != B_OK))
|
||||
return B_NO_INIT;
|
||||
|
||||
return B_OK;
|
||||
@@ -49,7 +63,7 @@ BPackageResolvableExpression::Name() const
|
||||
}
|
||||
|
||||
|
||||
const BString&
|
||||
BPackageResolvableOperator
|
||||
BPackageResolvableExpression::Operator() const
|
||||
{
|
||||
return fOperator;
|
||||
@@ -77,7 +91,7 @@ BPackageResolvableExpression::AsString() const
|
||||
|
||||
void
|
||||
BPackageResolvableExpression::SetTo(const BString& name,
|
||||
const BString& _operator, const BPackageVersion& version)
|
||||
BPackageResolvableOperator _operator, const BPackageVersion& version)
|
||||
{
|
||||
fName = name;
|
||||
fOperator = _operator;
|
||||
@@ -89,7 +103,7 @@ void
|
||||
BPackageResolvableExpression::Clear()
|
||||
{
|
||||
fName.Truncate(0);
|
||||
fOperator.Truncate(0);
|
||||
fOperator = B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT;
|
||||
fVersion.Clear();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user