From 6bb79ef033c2a2e8f12c9da6409e3547af40417c Mon Sep 17 00:00:00 2001 From: dec05eba Date: Thu, 18 Oct 2018 07:05:43 +0200 Subject: Use ranges for dependency version --- src/Conf.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'src/Conf.cpp') diff --git a/src/Conf.cpp b/src/Conf.cpp index a204f13..7ae589e 100644 --- a/src/Conf.cpp +++ b/src/Conf.cpp @@ -1,5 +1,6 @@ #include "../include/Conf.hpp" #include "../include/types.hpp" +#include "../include/VersionParser.hpp" #include "../external/utf8/unchecked.h" #include @@ -482,7 +483,7 @@ namespace sibs return Result::Err(errMsg); } - if(config.version.empty()) + if(config.versionStr.empty()) { string errMsg = "The project "; errMsg += config.getPackageName(); @@ -670,6 +671,7 @@ namespace sibs { if(_tinydir_strcmp(file->extension, CONFIG_STATIC_LIB_FILE_EXTENSION) == 0) outputFiles.push_back(toUtf8(file->path)); + return true; }); } @@ -747,12 +749,17 @@ namespace sibs else if(name.equals("version")) { if (value.isSingle()) - version = string(value.asSingle().data, value.asSingle().size); + versionStr = string(value.asSingle().data, value.asSingle().size); else throw ParserException("Expected package.version to be a single value, was a list"); - if(!isVersionStringValid(version)) - throw ParserException("package.version is in invalid format. Version string can only contain numbers and dots"); + int versionSize = 0; + Result versionResult = parsePackageVersion(value.asSingle(), &versionSize); + if(!versionResult) + throw ParserException("package.version is in invalid format, error: " + versionResult.getErrMsg()); + if(versionSize != (int)versionStr.size()) + throw ParserException("package.version is in invalid format, expected to only contain numbers and dots"); + version = versionResult.unwrap(); } else if(name.equals("authors")) { @@ -1025,10 +1032,14 @@ namespace sibs { if(value.isSingle()) { - // TODO: Validate version is number in correct format + VersionParser versionParser; + Result dependencyVersionResult = versionParser.parse(value.asSingle().data, value.asSingle().size); + if(!dependencyVersionResult) + throw ParserException("Dependency " + string(name.data, name.size) + " version is in invalid format, error: " + dependencyVersionResult.getErrMsg()); + PackageListDependency *dependency = new PackageListDependency(); dependency->name = string(name.data, name.size); - dependency->version = string(value.asSingle().data, value.asSingle().size); + dependency->version = dependencyVersionResult.unwrap(); packageListDependencies.emplace_back(dependency); } else if(value.isObject()) -- cgit v1.2.3