* 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:
Oliver Tappe
2011-02-04 17:34:19 +00:00
parent 26a912cd34
commit 531d191219
3 changed files with 46 additions and 21 deletions
@@ -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;
};
+14 -9
View File
@@ -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();
}