* 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 <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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user