Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Configuring overlay ports and overlay triplets through the manifest #743

Merged
merged 30 commits into from
Oct 20, 2022
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
6106edb
overlays through manifest implemented
Oct 10, 2022
0d52572
turned artifacts on
Oct 10, 2022
794c193
artifacts settings once more
Oct 10, 2022
a8e13fc
fixed formatting
Oct 10, 2022
8c674e0
brought overlays to vcpkgpaths
Oct 12, 2022
1dec381
Merge branch 'main' into val-port-overlays
valeriaconde Oct 12, 2022
50dbc45
artifacts settings
valeriaconde Oct 12, 2022
f1fbae0
format
valeriaconde Oct 12, 2022
07e55f4
sending merged overlay triplets
valeriaconde Oct 13, 2022
0a0e92f
moved constructor
valeriaconde Oct 13, 2022
533898f
passing parameters by reference
valeriaconde Oct 13, 2022
679ad17
e2e tests
valeriaconde Oct 14, 2022
a4f8cba
bad paths test
valeriaconde Oct 14, 2022
47c7816
fix
valeriaconde Oct 15, 2022
fe933d0
resolves overlay paths relative to vcpkg-configuration.json
valeriaconde Oct 17, 2022
485f998
path fix
valeriaconde Oct 17, 2022
5a613f0
Update test config
valeriaconde Oct 17, 2022
1cfacb1
modified make_relative_to_manifest
valeriaconde Oct 18, 2022
934b316
Fix build
valeriaconde Oct 18, 2022
b143bb7
changed lambda function
valeriaconde Oct 18, 2022
1916cb6
made manifest directory const
valeriaconde Oct 18, 2022
e1d3ba8
Revert
valeriaconde Oct 18, 2022
9588151
Revert
valeriaconde Oct 18, 2022
8294341
Revert lambda function
valeriaconde Oct 18, 2022
86bd17f
Merge branch 'main' into val-port-overlays
valeriaconde Oct 18, 2022
0dda41a
Add get_manifest_directory()
valeriaconde Oct 18, 2022
9b9bfaa
making make_relative_to_manifest cleaner
valeriaconde Oct 18, 2022
9ff35b8
Comments
valeriaconde Oct 19, 2022
3de2e68
Merge branch 'main' into val-port-overlays
valeriaconde Oct 19, 2022
ed88c70
Comments
valeriaconde Oct 20, 2022
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
2 changes: 2 additions & 0 deletions include/vcpkg/configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ namespace vcpkg
std::vector<RegistryConfig> registries;
Json::Object ce_metadata;
Json::Object extra_info;
std::vector<std::string> overlay_ports;
std::vector<std::string> overlay_triplets;

Json::Object serialize() const;
void validate_as_active();
Expand Down
6 changes: 4 additions & 2 deletions include/vcpkg/vcpkgcmdarguments.h
Original file line number Diff line number Diff line change
Expand Up @@ -158,10 +158,12 @@ namespace vcpkg
Optional<std::string> host_triplet;
constexpr static StringLiteral OVERLAY_PORTS_ENV = "VCPKG_OVERLAY_PORTS";
constexpr static StringLiteral OVERLAY_PORTS_ARG = "overlay-ports";
std::vector<std::string> overlay_ports;
std::vector<std::string> cli_overlay_ports;
std::vector<std::string> env_overlay_ports;
constexpr static StringLiteral OVERLAY_TRIPLETS_ENV = "VCPKG_OVERLAY_TRIPLETS";
constexpr static StringLiteral OVERLAY_TRIPLETS_ARG = "overlay-triplets";
std::vector<std::string> overlay_triplets;
std::vector<std::string> cli_overlay_triplets;
std::vector<std::string> env_overlay_triplets;

constexpr static StringLiteral BINARY_SOURCES_ARG = "binarysource";
std::vector<std::string> binary_sources;
Expand Down
3 changes: 3 additions & 0 deletions include/vcpkg/vcpkgpaths.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,9 @@ namespace vcpkg
const Path triplets;
const Path community_triplets;

std::vector<std::string> overlay_ports;
std::vector<std::string> overlay_triplets;

std::string get_toolver_diagnostics() const;

const ToolCache& get_tool_cache() const;
Expand Down
24 changes: 12 additions & 12 deletions src/vcpkg-test/arguments.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,13 @@ TEST_CASE ("VcpkgCmdArguments from lowercase argument sequence", "[arguments]")
REQUIRE(v.print_metrics);
REQUIRE(*v.print_metrics.get());

REQUIRE(v.overlay_ports.size() == 2);
REQUIRE(v.overlay_ports.at(0) == "C:\\ports1");
REQUIRE(v.overlay_ports.at(1) == "C:\\ports2");
REQUIRE(v.cli_overlay_ports.size() == 2);
REQUIRE(v.cli_overlay_ports.at(0) == "C:\\ports1");
REQUIRE(v.cli_overlay_ports.at(1) == "C:\\ports2");

REQUIRE(v.overlay_triplets.size() == 2);
REQUIRE(v.overlay_triplets.at(0) == "C:\\tripletsA");
REQUIRE(v.overlay_triplets.at(1) == "C:\\tripletsB");
REQUIRE(v.cli_overlay_triplets.size() == 2);
REQUIRE(v.cli_overlay_triplets.at(0) == "C:\\tripletsA");
REQUIRE(v.cli_overlay_triplets.at(1) == "C:\\tripletsB");
}

TEST_CASE ("VcpkgCmdArguments from uppercase argument sequence", "[arguments]")
Expand Down Expand Up @@ -75,13 +75,13 @@ TEST_CASE ("VcpkgCmdArguments from uppercase argument sequence", "[arguments]")
REQUIRE(v.print_metrics);
REQUIRE(*v.print_metrics.get());

REQUIRE(v.overlay_ports.size() == 2);
REQUIRE(v.overlay_ports.at(0) == "C:\\ports1");
REQUIRE(v.overlay_ports.at(1) == "C:\\ports2");
REQUIRE(v.cli_overlay_ports.size() == 2);
REQUIRE(v.cli_overlay_ports.at(0) == "C:\\ports1");
REQUIRE(v.cli_overlay_ports.at(1) == "C:\\ports2");

REQUIRE(v.overlay_triplets.size() == 2);
REQUIRE(v.overlay_triplets.at(0) == "C:\\tripletsA");
REQUIRE(v.overlay_triplets.at(1) == "C:\\tripletsB");
REQUIRE(v.cli_overlay_triplets.size() == 2);
REQUIRE(v.cli_overlay_triplets.at(0) == "C:\\tripletsA");
REQUIRE(v.cli_overlay_triplets.at(1) == "C:\\tripletsB");
}

TEST_CASE ("VcpkgCmdArguments from argument sequence with valued options", "[arguments]")
Expand Down
98 changes: 98 additions & 0 deletions src/vcpkg-test/configmetadata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -466,6 +466,104 @@ TEST_CASE ("metadata demands", "[ce-metadata]")

TEST_CASE ("serialize configuration", "[ce-metadata]")
{
SECTION ("only overlay ports")
{
std::string raw = R"json({
"overlay-ports": [
"./my-ports/fmt" ,
valeriaconde marked this conversation as resolved.
Show resolved Hide resolved
"/custom-ports",
"../share/team-ports"
]
})json";
// parsing of configuration is tested elsewhere
auto config = parse_test_configuration(raw);
Test::check_json_eq(Json::parse_object(raw).value_or_exit(VCPKG_LINE_INFO), config.serialize());
}

SECTION ("invalid overlay ports")
{
std::string raw = R"json({
"overlay-ports": [
"./my-ports/fmt" ,
"/custom-ports",
123
]
})json";
check_errors(raw, R"(
$.overlay-ports[2]: mismatched type: expected an overlay path
)");
}

SECTION ("only overlay triplets")
{
std::string raw = R"json({
"overlay-triplets": [
"./team-triplets"
]
})json";
// parsing of configuration is tested elsewhere
auto config = parse_test_configuration(raw);
Test::check_json_eq(Json::parse_object(raw).value_or_exit(VCPKG_LINE_INFO), config.serialize());
}

SECTION ("invalid overlay triplets")
{
std::string raw = R"json({
"overlay-triplets": [
123
]
})json";
check_errors(raw, R"(
$.overlay-triplets[0]: mismatched type: expected a triplet path
)");
}

SECTION ("both overlay ports and overlay triplets")
{
std::string raw = R"json({
"overlay-ports": [
"./my-ports/fmt" ,
"/custom-ports",
"../share/team-ports"
],
"overlay-triplets": [
"./team-triplets"
]
})json";
// parsing of configuration is tested elsewhere
auto config = parse_test_configuration(raw);
Test::check_json_eq(Json::parse_object(raw).value_or_exit(VCPKG_LINE_INFO), config.serialize());
}

SECTION ("overriden default registry, registries and overlays")
{
std::string raw = R"json({
"default-registry": {
"kind": "builtin",
"baseline": "843e0ba0d8f9c9c572e45564263eedfc7745e74f"
},
"registries": [
{
"kind": "git",
"repository": "https://github.com/microsoft/vcpkg",
"baseline": "843e0ba0d8f9c9c572e45564263eedfc7745e74f",
"packages": [ "zlib" ]
}
],
"overlay-ports": [
"./my-ports/fmt" ,
"/custom-ports",
"../share/team-ports"
],
"overlay-triplets": [
"./team-triplets"
]
})json";
// parsing of configuration is tested elsewhere
auto config = parse_test_configuration(raw);
Test::check_json_eq(Json::parse_object(raw).value_or_exit(VCPKG_LINE_INFO), config.serialize());
}

SECTION ("null default registry")
{
std::string raw = R"json({
Expand Down
4 changes: 2 additions & 2 deletions src/vcpkg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,6 @@ static void inner(vcpkg::Filesystem& fs, const VcpkgCmdArguments& args)
}
}

LockGuardPtr<Metrics>(g_metrics)->track_bool_property(BoolMetric::OptionOverlayPorts, !args.overlay_ports.empty());

if (const auto command_function = find_command(Commands::get_available_basic_commands()))
{
LockGuardPtr<Metrics>(g_metrics)->track_string_property(StringMetric::CommandName, command_function->name);
Expand All @@ -129,6 +127,8 @@ static void inner(vcpkg::Filesystem& fs, const VcpkgCmdArguments& args)
const VcpkgPaths paths(fs, args);
paths.track_feature_flag_metrics();

LockGuardPtr<Metrics>(g_metrics)->track_bool_property(BoolMetric::OptionOverlayPorts, !paths.overlay_ports.empty());

fs.current_path(paths.root, VCPKG_LINE_INFO);

if (const auto command_function = find_command(Commands::get_available_paths_commands()))
Expand Down
2 changes: 1 addition & 1 deletion src/vcpkg/build.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ namespace vcpkg::Build
const FullPackageSpec spec = check_and_get_full_package_spec(
std::move(first_arg), default_triplet, COMMAND_STRUCTURE.example_text, paths);

PathsPortFileProvider provider(paths, make_overlay_provider(paths, args.overlay_ports));
PathsPortFileProvider provider(paths, make_overlay_provider(paths, paths.overlay_ports));
return perform_ex(args, spec, host_triplet, provider, binary_cache, null_build_logs_recorder(), paths);
}
} // namespace vcpkg::Build
Expand Down
2 changes: 1 addition & 1 deletion src/vcpkg/commands.buildexternal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ namespace vcpkg::Commands::BuildExternal
const FullPackageSpec spec = check_and_get_full_package_spec(
std::string(args.command_arguments.at(0)), default_triplet, COMMAND_STRUCTURE.example_text, paths);

auto overlays = args.overlay_ports;
auto overlays = paths.overlay_ports;
overlays.insert(overlays.begin(), args.command_arguments.at(1));

PathsPortFileProvider provider(paths, make_overlay_provider(paths, overlays));
Expand Down
2 changes: 1 addition & 1 deletion src/vcpkg/commands.check-support.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ namespace vcpkg::Commands
std::string(arg), default_triplet, COMMAND_STRUCTURE.example_text, paths);
});

PathsPortFileProvider provider(paths, make_overlay_provider(paths, args.overlay_ports));
PathsPortFileProvider provider(paths, make_overlay_provider(paths, paths.overlay_ports));
auto cmake_vars = CMakeVars::make_triplet_cmake_var_provider(paths);

// for each spec in the user-requested specs, check all dependencies
Expand Down
2 changes: 1 addition & 1 deletion src/vcpkg/commands.ci.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,7 @@ namespace vcpkg::Commands::CI
const IBuildLogsRecorder& build_logs_recorder =
build_logs_recorder_storage ? *(build_logs_recorder_storage.get()) : null_build_logs_recorder();

PathsPortFileProvider provider(paths, make_overlay_provider(paths, args.overlay_ports));
PathsPortFileProvider provider(paths, make_overlay_provider(paths, paths.overlay_ports));
auto var_provider_storage = CMakeVars::make_triplet_cmake_var_provider(paths);
auto& var_provider = *var_provider_storage;

Expand Down
2 changes: 1 addition & 1 deletion src/vcpkg/commands.dependinfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,7 @@ namespace vcpkg::Commands::DependInfo
std::string{arg}, default_triplet, COMMAND_STRUCTURE.example_text, paths);
});

PathsPortFileProvider provider(paths, make_overlay_provider(paths, args.overlay_ports));
PathsPortFileProvider provider(paths, make_overlay_provider(paths, paths.overlay_ports));
auto var_provider_storage = CMakeVars::make_triplet_cmake_var_provider(paths);
auto& var_provider = *var_provider_storage;

Expand Down
2 changes: 1 addition & 1 deletion src/vcpkg/commands.env.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ namespace vcpkg::Commands::Env

const ParsedArguments options = args.parse_arguments(COMMAND_STRUCTURE);

PathsPortFileProvider provider(paths, make_overlay_provider(paths, args.overlay_ports));
PathsPortFileProvider provider(paths, make_overlay_provider(paths, paths.overlay_ports));
auto var_provider_storage = CMakeVars::make_triplet_cmake_var_provider(paths);
auto& var_provider = *var_provider_storage;

Expand Down
2 changes: 1 addition & 1 deletion src/vcpkg/commands.find.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ namespace vcpkg::Commands
}
} // unlock metrics

perform_find_port_and_exit(paths, full_description, enable_json, filter, args.overlay_ports);
perform_find_port_and_exit(paths, full_description, enable_json, filter, paths.overlay_ports);
}

Checks::msg_exit_with_error(VCPKG_LINE_INFO, msgAddCommandFirstArg);
Expand Down
2 changes: 1 addition & 1 deletion src/vcpkg/commands.info.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ namespace vcpkg::Commands::Info
{
Json::Object response;
Json::Object results;
PathsPortFileProvider provider(paths, make_overlay_provider(paths, args.overlay_ports));
PathsPortFileProvider provider(paths, make_overlay_provider(paths, paths.overlay_ports));

for (auto&& arg : args.command_arguments)
{
Expand Down
3 changes: 2 additions & 1 deletion src/vcpkg/commands.search.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include <vcpkg/commands.search.h>
#include <vcpkg/help.h>
#include <vcpkg/vcpkgcmdarguments.h>
#include <vcpkg/vcpkgpaths.h>

namespace vcpkg::Commands
{
Expand Down Expand Up @@ -32,6 +33,6 @@ namespace vcpkg::Commands
filter = StringView{args.command_arguments[0]};
}

perform_find_port_and_exit(paths, full_description, args.json.value_or(false), filter, args.overlay_ports);
perform_find_port_and_exit(paths, full_description, args.json.value_or(false), filter, paths.overlay_ports);
}
}
2 changes: 1 addition & 1 deletion src/vcpkg/commands.setinstalled.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ namespace vcpkg::Commands::SetInstalled
const PrintUsage print_cmake_usage =
Util::Sets::contains(options.switches, OPTION_NO_PRINT_USAGE) ? PrintUsage::NO : PrintUsage::YES;

PathsPortFileProvider provider(paths, make_overlay_provider(paths, args.overlay_ports));
PathsPortFileProvider provider(paths, make_overlay_provider(paths, paths.overlay_ports));
auto cmake_vars = CMakeVars::make_triplet_cmake_var_provider(paths);

Optional<Path> pkgsconfig;
Expand Down
2 changes: 1 addition & 1 deletion src/vcpkg/commands.upgrade.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ namespace vcpkg::Commands::Upgrade
StatusParagraphs status_db = database_load_check(paths.get_filesystem(), paths.installed());

// Load ports from ports dirs
PathsPortFileProvider provider(paths, make_overlay_provider(paths, args.overlay_ports));
PathsPortFileProvider provider(paths, make_overlay_provider(paths, paths.overlay_ports));
auto var_provider_storage = CMakeVars::make_triplet_cmake_var_provider(paths);
auto& var_provider = *var_provider_storage;

Expand Down
32 changes: 32 additions & 0 deletions src/vcpkg/configuration.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,8 @@ namespace

constexpr static StringLiteral DEFAULT_REGISTRY = "default-registry";
constexpr static StringLiteral REGISTRIES = "registries";
constexpr static StringLiteral OVERLAY_PORTS = "overlay-ports";
constexpr static StringLiteral OVERLAY_TRIPLETS = "overlay-triplets";

virtual Optional<Configuration> visit_object(Json::Reader& r, const Json::Object& obj) override;

Expand All @@ -268,6 +270,8 @@ namespace
ConfigurationDeserializer ConfigurationDeserializer::instance;
constexpr StringLiteral ConfigurationDeserializer::DEFAULT_REGISTRY;
constexpr StringLiteral ConfigurationDeserializer::REGISTRIES;
constexpr StringLiteral ConfigurationDeserializer::OVERLAY_PORTS;
constexpr StringLiteral ConfigurationDeserializer::OVERLAY_TRIPLETS;

Optional<Json::Object> DictionaryDeserializer::visit_object(Json::Reader& r, const Json::Object& obj)
{
Expand Down Expand Up @@ -391,6 +395,14 @@ namespace
}
}

static Json::ArrayDeserializer<Json::StringDeserializer> op_des("an array of overlay ports paths",
Json::StringDeserializer{"an overlay path"});
r.optional_object_field(obj, OVERLAY_PORTS, ret.overlay_ports, op_des);

static Json::ArrayDeserializer<Json::StringDeserializer> ot_des("an array of overlay triplets paths",
Json::StringDeserializer{"a triplet path"});
r.optional_object_field(obj, OVERLAY_TRIPLETS, ret.overlay_triplets, ot_des);

RegistryConfig default_registry;
if (r.optional_object_field(obj, DEFAULT_REGISTRY, default_registry, RegistryConfigDeserializer::instance))
{
Expand Down Expand Up @@ -607,6 +619,8 @@ namespace vcpkg
static constexpr StringView known_fields[]{
ConfigurationDeserializer::DEFAULT_REGISTRY,
ConfigurationDeserializer::REGISTRIES,
ConfigurationDeserializer::OVERLAY_PORTS,
ConfigurationDeserializer::OVERLAY_TRIPLETS,
CeMetadataDeserializer::CE_MESSAGE,
CeMetadataDeserializer::CE_WARNING,
CeMetadataDeserializer::CE_ERROR,
Expand Down Expand Up @@ -739,6 +753,24 @@ namespace vcpkg
}
}

if (!overlay_ports.empty())
{
auto& op_arr = obj.insert(ConfigurationDeserializer::OVERLAY_PORTS, Json::Array());
for (const auto& port : overlay_ports)
{
op_arr.push_back(port);
}
}

if (!overlay_triplets.empty())
{
auto& ot_arr = obj.insert(ConfigurationDeserializer::OVERLAY_TRIPLETS, Json::Array());
for (const auto& triplet : overlay_triplets)
{
ot_arr.push_back(triplet);
}
}

if (!ce_metadata.is_empty())
{
serialize_ce_metadata(ce_metadata, obj);
Expand Down
2 changes: 1 addition & 1 deletion src/vcpkg/export.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -607,7 +607,7 @@ With a project open, go to Tools->NuGet Package Manager->Package Manager Console
const auto opts = handle_export_command_arguments(paths, args, default_triplet, status_db);

// Load ports from ports dirs
PathsPortFileProvider provider(paths, make_overlay_provider(paths, args.overlay_ports));
PathsPortFileProvider provider(paths, make_overlay_provider(paths, paths.overlay_ports));

// create the plan
std::vector<ExportPlanAction> export_plan = create_export_plan(opts.specs, status_db);
Expand Down
6 changes: 3 additions & 3 deletions src/vcpkg/install.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1063,8 +1063,8 @@ namespace vcpkg
std::vector<std::string> extended_overlay_ports;
const bool add_builtin_ports_directory_as_overlay =
paths.get_registry_set().is_default_builtin_registry() && !paths.use_git_default_registry();
extended_overlay_ports.reserve(args.overlay_ports.size() + add_builtin_ports_directory_as_overlay);
extended_overlay_ports = args.overlay_ports;
extended_overlay_ports.reserve(paths.overlay_ports.size() + add_builtin_ports_directory_as_overlay);
extended_overlay_ports = paths.overlay_ports;
if (add_builtin_ports_directory_as_overlay)
{
extended_overlay_ports.emplace_back(paths.builtin_ports_directory().native());
Expand Down Expand Up @@ -1114,7 +1114,7 @@ namespace vcpkg
print_cmake_usage);
}

PathsPortFileProvider provider(paths, make_overlay_provider(paths, args.overlay_ports));
PathsPortFileProvider provider(paths, make_overlay_provider(paths, paths.overlay_ports));

const std::vector<FullPackageSpec> specs = Util::fmap(args.command_arguments, [&](auto&& arg) {
return check_and_get_full_package_spec(
Expand Down
Loading