Skip to content

Commit

Permalink
[vcpkg] Add parse checking for version fields and enable non-string v…
Browse files Browse the repository at this point in the history
…ersions outside 'versions' flag (microsoft#15580)
  • Loading branch information
ras0219 committed Jan 13, 2021
1 parent c927f99 commit 53eb2ca
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 8 deletions.
19 changes: 19 additions & 0 deletions src/vcpkg-test/manifests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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]")
Expand Down
8 changes: 0 additions & 8 deletions src/vcpkg/sourceparagraph.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
25 changes: 25 additions & 0 deletions src/vcpkg/versiondeserializers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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});
Expand Down

0 comments on commit 53eb2ca

Please sign in to comment.