* 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 <String.h>
#include <package/PackageResolvableOperator.h>
#include <package/PackageVersion.h> #include <package/PackageVersion.h>
@@ -34,27 +35,32 @@ public:
BPackageResolvableExpression(); BPackageResolvableExpression();
BPackageResolvableExpression( BPackageResolvableExpression(
const BString& name, const BString& name,
const BString& _operator = "", BPackageResolvableOperator _op
= B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT,
const BPackageVersion& version const BPackageVersion& version
= BPackageVersion()); = BPackageVersion());
status_t InitCheck() const; status_t InitCheck() const;
const BString& Name() const; const BString& Name() const;
const BString& Operator() const; BPackageResolvableOperator Operator() const;
const BPackageVersion& Version() const; const BPackageVersion& Version() const;
BString AsString() const; BString AsString() const;
void SetTo(const BString& name, void SetTo(const BString& name,
const BString& _operator = "", BPackageResolvableOperator _op
= B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT,
const BPackageVersion& version const BPackageVersion& version
= BPackageVersion()); = BPackageVersion());
void Clear(); void Clear();
public:
static const char* kOperatorNames[];
private: private:
BString fName; BString fName;
BString fOperator; BPackageResolvableOperator fOperator;
BPackageVersion fVersion; BPackageVersion fVersion;
}; };
+14 -9
View File
@@ -506,6 +506,7 @@ BPackageInfo::Parser::_ParseResolvableExprList(
if (op.type == TOKEN_OPERATOR_LESS if (op.type == TOKEN_OPERATOR_LESS
|| op.type == TOKEN_OPERATOR_LESS_EQUAL || op.type == TOKEN_OPERATOR_LESS_EQUAL
|| op.type == TOKEN_OPERATOR_EQUAL || op.type == TOKEN_OPERATOR_EQUAL
|| op.type == TOKEN_OPERATOR_NOT_EQUAL
|| op.type == TOKEN_OPERATOR_GREATER_EQUAL || op.type == TOKEN_OPERATOR_GREATER_EQUAL
|| op.type == TOKEN_OPERATOR_GREATER) || op.type == TOKEN_OPERATOR_GREATER)
_ParseVersionValue(&version, true); _ParseVersionValue(&version, true);
@@ -513,11 +514,15 @@ BPackageInfo::Parser::_ParseResolvableExprList(
_RewindTo(op); _RewindTo(op);
else { else {
throw ParseError( throw ParseError(
"expected '<', '<=', '==', '>=', '>', comma or ']'", op.pos); "expected '<', '<=', '==', '!=', '>=', '>', comma or ']'",
op.pos);
} }
value->AddItem( BPackageResolvableOperator resolvableOperator
new BPackageResolvableExpression(name.text, op.text, version)); = (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); _ParseResolvableExprList(&supplementsList);
int count = supplementsList.CountItems(); int count = supplementsList.CountItems();
for (int i = 0; i < count; ++i) for (int i = 0; i < count; ++i)
packageInfo->AddRequires(*(supplementsList.ItemAt(i))); packageInfo->AddSupplements(*(supplementsList.ItemAt(i)));
seen[B_PACKAGE_INFO_SUPPLEMENTS] = true; seen[B_PACKAGE_INFO_SUPPLEMENTS] = true;
} else if (t.text.ICompare(names[B_PACKAGE_INFO_CONFLICTS]) == 0) { } else if (t.text.ICompare(names[B_PACKAGE_INFO_CONFLICTS]) == 0) {
if (seen[B_PACKAGE_INFO_CONFLICTS]) { if (seen[B_PACKAGE_INFO_CONFLICTS]) {
@@ -696,7 +701,7 @@ BPackageInfo::Parser::_Parse(BPackageInfo* packageInfo)
_ParseResolvableExprList(&conflictsList); _ParseResolvableExprList(&conflictsList);
int count = conflictsList.CountItems(); int count = conflictsList.CountItems();
for (int i = 0; i < count; ++i) for (int i = 0; i < count; ++i)
packageInfo->AddRequires(*(conflictsList.ItemAt(i))); packageInfo->AddConflicts(*(conflictsList.ItemAt(i)));
seen[B_PACKAGE_INFO_CONFLICTS] = true; seen[B_PACKAGE_INFO_CONFLICTS] = true;
} else if (t.text.ICompare(names[B_PACKAGE_INFO_FRESHENS]) == 0) { } else if (t.text.ICompare(names[B_PACKAGE_INFO_FRESHENS]) == 0) {
if (seen[B_PACKAGE_INFO_FRESHENS]) { if (seen[B_PACKAGE_INFO_FRESHENS]) {
@@ -709,7 +714,7 @@ BPackageInfo::Parser::_Parse(BPackageInfo* packageInfo)
_ParseResolvableExprList(&freshensList); _ParseResolvableExprList(&freshensList);
int count = freshensList.CountItems(); int count = freshensList.CountItems();
for (int i = 0; i < count; ++i) for (int i = 0; i < count; ++i)
packageInfo->AddRequires(*(freshensList.ItemAt(i))); packageInfo->AddFreshens(*(freshensList.ItemAt(i)));
seen[B_PACKAGE_INFO_FRESHENS] = true; seen[B_PACKAGE_INFO_FRESHENS] = true;
} else if (t.text.ICompare(names[B_PACKAGE_INFO_REPLACES]) == 0) { } else if (t.text.ICompare(names[B_PACKAGE_INFO_REPLACES]) == 0) {
if (seen[B_PACKAGE_INFO_REPLACES]) { if (seen[B_PACKAGE_INFO_REPLACES]) {
@@ -722,7 +727,7 @@ BPackageInfo::Parser::_Parse(BPackageInfo* packageInfo)
_ParseStringList(&replacesList, false); _ParseStringList(&replacesList, false);
int count = replacesList.CountItems(); int count = replacesList.CountItems();
for (int i = 0; i < count; ++i) for (int i = 0; i < count; ++i)
packageInfo->AddRequires(*(replacesList.ItemAt(i))); packageInfo->AddReplaces(*(replacesList.ItemAt(i)));
seen[B_PACKAGE_INFO_REPLACES] = true; seen[B_PACKAGE_INFO_REPLACES] = true;
} }
} }
@@ -749,10 +754,10 @@ const char* BPackageInfo::kElementNames[B_PACKAGE_INFO_ENUM_COUNT] = {
"licenses", "licenses",
"provides", "provides",
"requires", "requires",
"conflicts",
"supplements", "supplements",
"replaces", "conflicts",
"freshens", "freshens",
"replaces",
}; };
@@ -10,13 +10,27 @@
namespace BPackageKit { namespace BPackageKit {
const char*
BPackageResolvableExpression
::kOperatorNames[B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT] = {
"<",
"<=",
"==",
"!=",
">=",
">",
};
BPackageResolvableExpression::BPackageResolvableExpression() BPackageResolvableExpression::BPackageResolvableExpression()
:
fOperator(B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT)
{ {
} }
BPackageResolvableExpression::BPackageResolvableExpression(const BString& name, BPackageResolvableExpression::BPackageResolvableExpression(const BString& name,
const BString& _operator, const BPackageVersion& version) BPackageResolvableOperator _operator, const BPackageVersion& version)
: :
fName(name), fName(name),
fOperator(_operator), fOperator(_operator),
@@ -32,10 +46,10 @@ BPackageResolvableExpression::InitCheck() const
return B_NO_INIT; return B_NO_INIT;
// either both or none of operator and version must be set // either both or none of operator and version must be set
if (fOperator.Length() == 0 && fVersion.InitCheck() == B_OK) if ((fOperator == B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT
return B_NO_INIT; && fVersion.InitCheck() == B_OK)
|| (fOperator >= 0 && fOperator < B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT
if (fOperator.Length() > 0 && fVersion.InitCheck() != B_OK) && fVersion.InitCheck() != B_OK))
return B_NO_INIT; return B_NO_INIT;
return B_OK; return B_OK;
@@ -49,7 +63,7 @@ BPackageResolvableExpression::Name() const
} }
const BString& BPackageResolvableOperator
BPackageResolvableExpression::Operator() const BPackageResolvableExpression::Operator() const
{ {
return fOperator; return fOperator;
@@ -77,7 +91,7 @@ BPackageResolvableExpression::AsString() const
void void
BPackageResolvableExpression::SetTo(const BString& name, BPackageResolvableExpression::SetTo(const BString& name,
const BString& _operator, const BPackageVersion& version) BPackageResolvableOperator _operator, const BPackageVersion& version)
{ {
fName = name; fName = name;
fOperator = _operator; fOperator = _operator;
@@ -89,7 +103,7 @@ void
BPackageResolvableExpression::Clear() BPackageResolvableExpression::Clear()
{ {
fName.Truncate(0); fName.Truncate(0);
fOperator.Truncate(0); fOperator = B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT;
fVersion.Clear(); fVersion.Clear();
} }