Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion toolsrc/include/vcpkg/base/jsonreader.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,14 @@ namespace vcpkg::Json
virtual Optional<Type> visit_object(Reader&, const Object&);
virtual View<StringView> valid_fields() const;

virtual ~IDeserializer() = default;

protected:
IDeserializer() = default;
IDeserializer(const IDeserializer&) = default;
IDeserializer& operator=(const IDeserializer&) = default;
IDeserializer(IDeserializer&&) = default;
IDeserializer& operator=(IDeserializer&&) = default;
virtual ~IDeserializer() = default;
};

struct Reader
Expand Down
10 changes: 10 additions & 0 deletions toolsrc/include/vcpkg/base/util.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma once

#include <vcpkg/base/optional.h>
#include <vcpkg/base/view.h>

#include <algorithm>
#include <functional>
Expand Down Expand Up @@ -28,6 +29,15 @@ namespace vcpkg::Util
{
return std::find(container.begin(), container.end(), item) != container.end();
}
template<class T>
std::vector<T> concat(View<T> r1, View<T> r2)
{
std::vector<T> v;
v.reserve(r1.size() + r2.size());
v.insert(v.end(), r1.begin(), r1.end());
v.insert(v.end(), r2.begin(), r2.end());
return v;
}
}

namespace Sets
Expand Down
31 changes: 22 additions & 9 deletions toolsrc/include/vcpkg/versiondeserializers.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,32 @@ namespace vcpkg
struct VersionDbEntry
{
VersionT version;
Versions::Scheme scheme;
Versions::Scheme scheme = Versions::Scheme::String;
std::string git_tree;

VersionDbEntry(const std::string& version_string,
int port_version,
Versions::Scheme scheme,
const std::string& git_tree)
: version(VersionT(version_string, port_version)), scheme(scheme), git_tree(git_tree)
{
}
};

Json::IDeserializer<VersionT>& get_versiont_deserializer_instance();
std::unique_ptr<Json::IDeserializer<std::string>> make_version_deserializer(StringLiteral type_name);

struct SchemedVersion
{
Versions::Scheme scheme = Versions::Scheme::String;
VersionT versiont;
};

Optional<SchemedVersion> visit_optional_schemed_deserializer(StringView parent_type,
Json::Reader& r,
const Json::Object& obj);
SchemedVersion visit_required_schemed_deserializer(StringView parent_type,
Json::Reader& r,
const Json::Object& obj);
View<StringView> schemed_deserializer_fields();

void serialize_schemed_version(Json::Object& out_obj,
Versions::Scheme scheme,
const std::string& version,
int port_version,
bool always_emit_port_version = false);

ExpectedS<std::map<std::string, VersionT, std::less<>>> parse_baseline_file(Files::Filesystem& fs,
StringView baseline_name,
Expand Down
2 changes: 1 addition & 1 deletion toolsrc/include/vcpkg/versiont.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ namespace vcpkg

private:
std::string m_text;
int m_port_version;
int m_port_version = 0;
};

struct VersionDiff
Expand Down
105 changes: 101 additions & 4 deletions toolsrc/src/vcpkg-test/manifests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,103 @@ TEST_CASE ("manifest versioning", "[manifests]")
"version-semver": "1.2.3-rc3"
})json",
true);

test_parse_manifest(R"json({
"name": "zlib",
"version-string": "abcd#1"
})json",
true);
test_parse_manifest(R"json({
"name": "zlib",
"version": "abcd#1"
})json",
true);
test_parse_manifest(R"json({
"name": "zlib",
"version-date": "abcd#1"
})json",
true);
test_parse_manifest(R"json({
"name": "zlib",
"version-semver": "abcd#1"
})json",
true);
}

TEST_CASE ("manifest constraints error hash", "[manifests]")
{
test_parse_manifest(R"json({
"name": "zlib",
"version-string": "abcd",
"dependencies": [
{
"name": "b",
"version=": "5#1"
}
]
}
)json",
true);

test_parse_manifest(R"json({
"name": "zlib",
"version-string": "abcd",
"dependencies": [
{
"name": "d",
"version>=": "2018-09-01#1"
}
]
})json",
true);
}

TEST_CASE ("manifest overrides error hash", "[manifests]")
{
test_parse_manifest(R"json({
"name": "zlib",
"version-string": "abcd",
"overrides": [
{
"name": "d",
"version-string": "abcd#1"
}
]
})json",
true);
test_parse_manifest(R"json({
"name": "zlib",
"version-string": "abcd",
"overrides": [
{
"name": "d",
"version-date": "2018-01-01#1"
}
]
})json",
true);
test_parse_manifest(R"json({
"name": "zlib",
"version-string": "abcd",
"overrides": [
{
"name": "d",
"version": "1.2#1"
}
]
})json",
true);
test_parse_manifest(R"json({
"name": "zlib",
"version-string": "abcd",
"overrides": [
{
"name": "d",
"version-semver": "1.2#1"
}
]
})json",
true);
}

TEST_CASE ("manifest constraints", "[manifests]")
Expand Down Expand Up @@ -286,13 +383,13 @@ TEST_CASE ("manifest overrides", "[manifests]")
"overrides": [
{
"name": "abc",
"port-version": 5,
"version-string": "hello"
"version-string": "hello",
"port-version": 5
},
{
"name": "abcd",
"port-version": 7,
"version-string": "hello"
"version-string": "hello",
"port-version": 7
}
]
}
Expand Down
6 changes: 4 additions & 2 deletions toolsrc/src/vcpkg/commands.porthistory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <vcpkg/tools.h>
#include <vcpkg/vcpkgcmdarguments.h>
#include <vcpkg/vcpkgpaths.h>
#include <vcpkg/versiondeserializers.h>
#include <vcpkg/versions.h>

namespace vcpkg::Commands::PortHistory
Expand Down Expand Up @@ -230,8 +231,9 @@ namespace vcpkg::Commands::PortHistory
{
Json::Object object;
object.insert("git-tree", Json::Value::string(version.git_tree));
object.insert("version-string", Json::Value::string(version.version));
object.insert("port-version", Json::Value::integer(version.port_version));

serialize_schemed_version(
object, Versions::Scheme::String, version.version, version.port_version, true);
versions_json.push_back(std::move(object));
}

Expand Down
Loading