aboutsummaryrefslogtreecommitdiff
path: root/src/Conf.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Conf.cpp')
-rw-r--r--src/Conf.cpp23
1 files changed, 17 insertions, 6 deletions
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 <iostream>
@@ -482,7 +483,7 @@ namespace sibs
return Result<bool>::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<PackageVersion> 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<PackageVersionRange> 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())