diff options
Diffstat (limited to 'src/VersionParser.cpp')
-rw-r--r-- | src/VersionParser.cpp | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/src/VersionParser.cpp b/src/VersionParser.cpp index eccd109..2b7936a 100644 --- a/src/VersionParser.cpp +++ b/src/VersionParser.cpp @@ -196,8 +196,16 @@ namespace sibs if(token == VersionToken::END_OF_FILE) { - if(!versionRange.startDefined) + if(!versionRange.startDefined && !versionRange.endDefined) return Result<PackageVersionRange>::Err("version can't be empty"); + + if(!versionRange.startDefined) { + versionRange.start.major = 0; + versionRange.start.minor = 0; + versionRange.start.patch = 0; + versionRange.startDefined = true; + versionRange.startOperation = VersionOperation::GREATER_EQUAL; + } if(versionRange.startOperation == VersionOperation::NONE) { @@ -264,40 +272,50 @@ namespace sibs } else if(token == VersionToken::OPERATION) { - versionRange.startOperation = tokenizer.operation; + VersionOperation operation = tokenizer.operation; token = tokenizer.next(); if(token == VersionToken::VERSION_NUMBER) { - versionRange.start = tokenizer.version; - versionRange.startDefined = true; - switch(versionRange.startOperation) + token = tokenizer.next(); + switch(operation) { case VersionOperation::LESS: { - token = VersionToken::INVALID; - tokenizer.errMsg = "Unexpected version end when start version is expected to less than "; - tokenizer.errMsg += versionRange.start.toString(); + versionRange.end = tokenizer.version; + versionRange.endDefined = true; + versionRange.endOperation = operation; return token; } case VersionOperation::LESS_EQUAL: { - token = VersionToken::INVALID; - tokenizer.errMsg = "Unexpected version end when start version is expected to be less or equal to "; - tokenizer.errMsg += versionRange.start.toString(); + versionRange.end = tokenizer.version; + versionRange.endDefined = true; + versionRange.endOperation = operation; return token; } case VersionOperation::EQUAL: { - token = VersionToken::INVALID; - tokenizer.errMsg = "Unexpected version end when start version is expected to be exactly "; - tokenizer.errMsg += versionRange.start.toString(); + versionRange.start = tokenizer.version; + versionRange.startDefined = true; + versionRange.startOperation = operation; return token; } + case VersionOperation::GREATER: + { + versionRange.start = tokenizer.version; + versionRange.startDefined = true; + versionRange.startOperation = operation; + } + case VersionOperation::GREATER_EQUAL: + { + versionRange.start = tokenizer.version; + versionRange.startDefined = true; + versionRange.startOperation = operation; + } default: break; } - token = tokenizer.next(); if(token == VersionToken::AND) { return parseEnd(); |