aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src
diff options
context:
space:
mode:
authorras0219 <533828+ras0219@users.noreply.github.com>2021-01-13 10:53:29 -0800
committerGitHub <noreply@github.com>2021-01-13 10:53:29 -0800
commitc239e8251051eb86a8439b916dcc7fc81554ec53 (patch)
tree3e6651bd74df4b04077d1bec7e72df9bd58125e2 /toolsrc/src
parenta904f297e5dd3ef225d6936ab87adf7b73812c8b (diff)
downloadvcpkg-c239e8251051eb86a8439b916dcc7fc81554ec53.tar.gz
vcpkg-c239e8251051eb86a8439b916dcc7fc81554ec53.zip
[vcpkg] Add parse checking for version fields and enable non-string versions outside 'versions' flag (#15580)
Diffstat (limited to 'toolsrc/src')
-rw-r--r--toolsrc/src/vcpkg-test/manifests.cpp19
-rw-r--r--toolsrc/src/vcpkg/sourceparagraph.cpp8
-rw-r--r--toolsrc/src/vcpkg/versiondeserializers.cpp25
3 files changed, 44 insertions, 8 deletions
diff --git a/toolsrc/src/vcpkg-test/manifests.cpp b/toolsrc/src/vcpkg-test/manifests.cpp
index f03caf3bf..39e470075 100644
--- a/toolsrc/src/vcpkg-test/manifests.cpp
+++ b/toolsrc/src/vcpkg-test/manifests.cpp
@@ -136,6 +136,25 @@ TEST_CASE ("manifest versioning", "[manifests]")
"version-semver": "abcd#1"
})json",
true);
+
+ SECTION ("version syntax")
+ {
+ test_parse_manifest(R"json({
+ "name": "zlib",
+ "version-semver": "2020-01-01"
+ })json",
+ true);
+ test_parse_manifest(R"json({
+ "name": "zlib",
+ "version-date": "1.1.1"
+ })json",
+ true);
+ test_parse_manifest(R"json({
+ "name": "zlib",
+ "version": "1.2.3-rc3"
+ })json",
+ true);
+ }
}
TEST_CASE ("manifest constraints error hash", "[manifests]")
diff --git a/toolsrc/src/vcpkg/sourceparagraph.cpp b/toolsrc/src/vcpkg/sourceparagraph.cpp
index f80a1494e..c4ae3e855 100644
--- a/toolsrc/src/vcpkg/sourceparagraph.cpp
+++ b/toolsrc/src/vcpkg/sourceparagraph.cpp
@@ -1009,14 +1009,6 @@ namespace vcpkg
{
if (!flags.versions)
{
- if (core_paragraph->version_scheme != Versions::Scheme::String)
- {
- return Strings::concat(fs::u8string(origin),
- " was rejected because it uses a non-string version scheme and the `",
- VcpkgCmdArguments::VERSIONS_FEATURE,
- "` feature flag is disabled.\nThis can be fixed by using \"version-string\".");
- }
-
auto check_deps = [&](View<Dependency> deps) -> Optional<std::string> {
for (auto&& dep : deps)
{
diff --git a/toolsrc/src/vcpkg/versiondeserializers.cpp b/toolsrc/src/vcpkg/versiondeserializers.cpp
index d791e3e14..842bdade3 100644
--- a/toolsrc/src/vcpkg/versiondeserializers.cpp
+++ b/toolsrc/src/vcpkg/versiondeserializers.cpp
@@ -97,15 +97,40 @@ namespace vcpkg
else
{
if (has_exact)
+ {
version_scheme = Versions::Scheme::String;
+ }
else if (has_relax)
+ {
version_scheme = Versions::Scheme::Relaxed;
+ auto v = Versions::RelaxedVersion::from_string(version);
+ if (!v.has_value())
+ {
+ r.add_generic_error(parent_type, "'version' text was not a relaxed version:\n", v.error());
+ }
+ }
else if (has_semver)
+ {
version_scheme = Versions::Scheme::Semver;
+ auto v = Versions::SemanticVersion::from_string(version);
+ if (!v.has_value())
+ {
+ r.add_generic_error(parent_type, "'version-semver' text was not a semantic version:\n", v.error());
+ }
+ }
else if (has_date)
+ {
version_scheme = Versions::Scheme::Date;
+ auto v = Versions::DateVersion::from_string(version);
+ if (!v.has_value())
+ {
+ r.add_generic_error(parent_type, "'version-date' text was not a date version:\n", v.error());
+ }
+ }
else
+ {
Checks::unreachable(VCPKG_LINE_INFO);
+ }
}
return SchemedVersion(version_scheme, VersionT{version, port_version});