aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src
diff options
context:
space:
mode:
Diffstat (limited to 'toolsrc/src')
-rw-r--r--toolsrc/src/vcpkg-test/binaryconfigparser.cpp30
-rw-r--r--toolsrc/src/vcpkg/binarycaching.cpp164
-rw-r--r--toolsrc/src/vcpkg/build.cpp3
-rw-r--r--toolsrc/src/vcpkg/commands.buildexternal.cpp3
-rw-r--r--toolsrc/src/vcpkg/commands.ci.cpp2
-rw-r--r--toolsrc/src/vcpkg/commands.setinstalled.cpp3
-rw-r--r--toolsrc/src/vcpkg/commands.upgrade.cpp3
-rw-r--r--toolsrc/src/vcpkg/install.cpp3
8 files changed, 84 insertions, 127 deletions
diff --git a/toolsrc/src/vcpkg-test/binaryconfigparser.cpp b/toolsrc/src/vcpkg-test/binaryconfigparser.cpp
index 1fd158446..259f1986e 100644
--- a/toolsrc/src/vcpkg-test/binaryconfigparser.cpp
+++ b/toolsrc/src/vcpkg-test/binaryconfigparser.cpp
@@ -89,15 +89,15 @@ TEST_CASE ("BinaryConfigParser nuget source provider", "[binaryconfigparser]")
REQUIRE(!parsed.has_value());
}
{
- auto parsed = create_binary_provider_from_configs_pure("nuget," ABSOLUTE_PATH ",upload", {});
+ auto parsed = create_binary_provider_from_configs_pure("nuget," ABSOLUTE_PATH ",readwrite", {});
REQUIRE(parsed.has_value());
}
{
- auto parsed = create_binary_provider_from_configs_pure("nuget," ABSOLUTE_PATH ",upload,extra", {});
+ auto parsed = create_binary_provider_from_configs_pure("nuget," ABSOLUTE_PATH ",readwrite,extra", {});
REQUIRE(!parsed.has_value());
}
{
- auto parsed = create_binary_provider_from_configs_pure("nuget,,upload", {});
+ auto parsed = create_binary_provider_from_configs_pure("nuget,,readwrite", {});
REQUIRE(!parsed.has_value());
}
}
@@ -125,15 +125,23 @@ TEST_CASE ("BinaryConfigParser nuget config provider", "[binaryconfigparser]")
REQUIRE(!parsed.has_value());
}
{
- auto parsed = create_binary_provider_from_configs_pure("nugetconfig," ABSOLUTE_PATH ",upload", {});
+ auto parsed = create_binary_provider_from_configs_pure("nugetconfig," ABSOLUTE_PATH ",read", {});
REQUIRE(parsed.has_value());
}
{
- auto parsed = create_binary_provider_from_configs_pure("nugetconfig," ABSOLUTE_PATH ",upload,extra", {});
+ auto parsed = create_binary_provider_from_configs_pure("nugetconfig," ABSOLUTE_PATH ",write", {});
+ REQUIRE(parsed.has_value());
+ }
+ {
+ auto parsed = create_binary_provider_from_configs_pure("nugetconfig," ABSOLUTE_PATH ",readwrite", {});
+ REQUIRE(parsed.has_value());
+ }
+ {
+ auto parsed = create_binary_provider_from_configs_pure("nugetconfig," ABSOLUTE_PATH ",readwrite,extra", {});
REQUIRE(!parsed.has_value());
}
{
- auto parsed = create_binary_provider_from_configs_pure("nugetconfig,,upload", {});
+ auto parsed = create_binary_provider_from_configs_pure("nugetconfig,,readwrite", {});
REQUIRE(!parsed.has_value());
}
}
@@ -185,7 +193,7 @@ TEST_CASE ("BinaryConfigParser interactive provider", "[binaryconfigparser]")
REQUIRE(parsed.has_value());
}
{
- auto parsed = create_binary_provider_from_configs_pure("interactive,upload", {});
+ auto parsed = create_binary_provider_from_configs_pure("interactive,read", {});
REQUIRE(!parsed.has_value());
}
}
@@ -197,6 +205,14 @@ TEST_CASE ("BinaryConfigParser multiple providers", "[binaryconfigparser]")
REQUIRE(parsed.has_value());
}
{
+ auto parsed = create_binary_provider_from_configs_pure("clear;default,read", {});
+ REQUIRE(parsed.has_value());
+ }
+ {
+ auto parsed = create_binary_provider_from_configs_pure("clear;default,write", {});
+ REQUIRE(parsed.has_value());
+ }
+ {
auto parsed = create_binary_provider_from_configs_pure("clear;default,readwrite", {});
REQUIRE(parsed.has_value());
}
diff --git a/toolsrc/src/vcpkg/binarycaching.cpp b/toolsrc/src/vcpkg/binarycaching.cpp
index 2b8a1dd98..583720bc9 100644
--- a/toolsrc/src/vcpkg/binarycaching.cpp
+++ b/toolsrc/src/vcpkg/binarycaching.cpp
@@ -651,23 +651,13 @@ IBinaryProvider& vcpkg::null_binary_provider()
return p;
}
-ExpectedS<std::unique_ptr<IBinaryProvider>> vcpkg::create_binary_provider_from_configs(const VcpkgPaths& paths,
- View<std::string> args)
+ExpectedS<std::unique_ptr<IBinaryProvider>> vcpkg::create_binary_provider_from_configs(View<std::string> args)
{
std::string env_string = System::get_environment_variable("VCPKG_BINARY_SOURCES").value_or("");
- // Preserve existing behavior until CI can be updated
- // TODO: remove
- if (args.size() == 0 && env_string.empty())
- {
- auto p = paths.root / fs::u8path("archives");
- return {std::make_unique<ArchivesBinaryProvider>(std::vector<fs::path>{p}, std::vector<fs::path>{p})};
- }
-
return create_binary_provider_from_configs_pure(env_string, args);
}
-ExpectedS<std::unique_ptr<IBinaryProvider>> vcpkg::create_binary_provider_from_configs_pure(
- const std::string& env_string, View<std::string> args)
+namespace
{
struct State
{
@@ -755,6 +745,41 @@ ExpectedS<std::unique_ptr<IBinaryProvider>> vcpkg::create_binary_provider_from_c
}
}
+ template<class T>
+ void handle_readwrite(std::vector<T>& read,
+ std::vector<T>& write,
+ T&& t,
+ const std::vector<std::pair<SourceLoc, std::string>>& segments,
+ size_t segment_idx)
+ {
+ if (segment_idx >= segments.size())
+ {
+ read.push_back(std::move(t));
+ return;
+ }
+
+ auto& mode = segments[segment_idx].second;
+
+ if (mode == "read")
+ {
+ read.push_back(std::move(t));
+ }
+ else if (mode == "write")
+ {
+ write.push_back(std::move(t));
+ }
+ else if (mode == "readwrite")
+ {
+ read.push_back(t);
+ write.push_back(std::move(t));
+ }
+ else
+ {
+ return add_error("unexpected argument: expected 'read', readwrite', or 'write'",
+ segments[segment_idx].first);
+ }
+ }
+
void handle_segments(std::vector<std::pair<SourceLoc, std::string>>&& segments)
{
if (segments.empty()) return;
@@ -779,37 +804,10 @@ ExpectedS<std::unique_ptr<IBinaryProvider>> vcpkg::create_binary_provider_from_c
return add_error("expected arguments: path arguments for binary config strings must be absolute",
segments[1].first);
}
-
- std::string mode;
- switch (segments.size())
- {
- case 2: mode = "read"; break;
- case 3: mode = segments[2].second; break;
- default:
- return add_error("unexpected arguments: binary config 'files' requires 1 or 2 arguments",
- segments[3].first);
- }
-
- if (mode == "read")
- {
- state->archives_to_read.push_back(std::move(p));
- }
- else if (mode == "write")
- {
- state->archives_to_write.push_back(std::move(p));
- }
- else if (mode == "readwrite")
- {
- state->archives_to_read.push_back(p);
- state->archives_to_write.push_back(std::move(p));
- }
- else
- {
- Checks::check_exit(VCPKG_LINE_INFO, segments.size() > 2);
- return add_error("unexpected arguments: binary config 'files' can only accept"
- " 'read', readwrite', or 'write' as a second argument",
- segments[2].first);
- }
+ handle_readwrite(state->archives_to_read, state->archives_to_write, std::move(p), segments, 2);
+ if (segments.size() > 3)
+ return add_error("unexpected arguments: binary config 'files' requires 1 or 2 arguments",
+ segments[3].first);
}
else if (segments[0].second == "interactive")
{
@@ -829,28 +827,10 @@ ExpectedS<std::unique_ptr<IBinaryProvider>> vcpkg::create_binary_provider_from_c
if (!p.is_absolute())
return add_error("expected arguments: path arguments for binary config strings must be absolute",
segments[1].first);
-
+ handle_readwrite(state->configs_to_read, state->configs_to_write, std::move(p), segments, 2);
if (segments.size() > 3)
- {
- return add_error(
- "unexpected arguments: binary config 'nugetconfig' does not take more than 2 arguments",
- segments[3].first);
- }
- else if (segments.size() == 3)
- {
- if (segments[2].second != "upload")
- {
- return add_error(
- "unexpected arguments: binary config 'nugetconfig' can only accept 'upload' as "
- "a second argument",
- segments[2].first);
- }
- else
- {
- state->configs_to_write.push_back(p);
- }
- }
- state->configs_to_read.push_back(std::move(p));
+ return add_error("unexpected arguments: binary config 'nugetconfig' requires 1 or 2 arguments",
+ segments[3].first);
}
else if (segments[0].second == "nuget")
{
@@ -861,25 +841,11 @@ ExpectedS<std::unique_ptr<IBinaryProvider>> vcpkg::create_binary_provider_from_c
auto&& p = segments[1].second;
if (p.empty())
return add_error("unexpected arguments: binary config 'nuget' requires non-empty source");
+
+ handle_readwrite(state->sources_to_read, state->sources_to_write, std::move(p), segments, 2);
if (segments.size() > 3)
- {
- return add_error("unexpected arguments: binary config 'nuget' does not take more than 2 arguments",
+ return add_error("unexpected arguments: binary config 'nuget' requires 1 or 2 arguments",
segments[3].first);
- }
- else if (segments.size() == 3)
- {
- if (segments[2].second != "upload")
- {
- return add_error("unexpected arguments: binary config 'nuget' can only accept 'upload' as "
- "a second argument",
- segments[2].first);
- }
- else
- {
- state->sources_to_write.push_back(p);
- }
- }
- state->sources_to_read.push_back(std::move(p));
}
else if (segments[0].second == "default")
{
@@ -899,34 +865,7 @@ ExpectedS<std::unique_ptr<IBinaryProvider>> vcpkg::create_binary_provider_from_c
return add_error("default path was not absolute: " + p.u8string(), segments[0].first);
}
- std::string mode;
- switch (segments.size())
- {
- case 1: mode = "read"; break;
- case 2: mode = segments[1].second; break;
- default: Checks::unreachable(VCPKG_LINE_INFO);
- }
-
- if (mode == "read")
- {
- state->archives_to_read.push_back(std::move(p));
- }
- else if (mode == "write")
- {
- state->archives_to_write.push_back(std::move(p));
- }
- else if (mode == "readwrite")
- {
- state->archives_to_read.push_back(p);
- state->archives_to_write.push_back(std::move(p));
- }
- else
- {
- Checks::check_exit(VCPKG_LINE_INFO, segments.size() > 1);
- return add_error("unexpected arguments: binary config 'default' can only accept"
- " 'read', readwrite', or 'write' as a first argument",
- segments[1].first);
- }
+ handle_readwrite(state->archives_to_read, state->archives_to_write, std::move(p), segments, 1);
}
else
{
@@ -937,9 +876,16 @@ ExpectedS<std::unique_ptr<IBinaryProvider>> vcpkg::create_binary_provider_from_c
}
}
};
+}
+ExpectedS<std::unique_ptr<IBinaryProvider>> vcpkg::create_binary_provider_from_configs_pure(
+ const std::string& env_string, View<std::string> args)
+{
State s;
+ BinaryConfigParser default_parser("default,readwrite", "<defaults>", &s);
+ default_parser.parse();
+
BinaryConfigParser env_parser(env_string, "VCPKG_BINARY_SOURCES", &s);
env_parser.parse();
if (auto err = env_parser.get_error()) return err->format();
diff --git a/toolsrc/src/vcpkg/build.cpp b/toolsrc/src/vcpkg/build.cpp
index 1babf4738..2e1554837 100644
--- a/toolsrc/src/vcpkg/build.cpp
+++ b/toolsrc/src/vcpkg/build.cpp
@@ -164,8 +164,7 @@ namespace vcpkg::Build
const ParsedArguments options = args.parse_arguments(COMMAND_STRUCTURE);
std::string first_arg = args.command_arguments.at(0);
- auto binaryprovider =
- create_binary_provider_from_configs(paths, args.binary_sources).value_or_exit(VCPKG_LINE_INFO);
+ auto binaryprovider = create_binary_provider_from_configs(args.binary_sources).value_or_exit(VCPKG_LINE_INFO);
const FullPackageSpec spec = Input::check_and_get_full_package_spec(
std::move(first_arg), default_triplet, COMMAND_STRUCTURE.example_text);
diff --git a/toolsrc/src/vcpkg/commands.buildexternal.cpp b/toolsrc/src/vcpkg/commands.buildexternal.cpp
index 5fc26b8ea..79a8dd3c4 100644
--- a/toolsrc/src/vcpkg/commands.buildexternal.cpp
+++ b/toolsrc/src/vcpkg/commands.buildexternal.cpp
@@ -21,8 +21,7 @@ namespace vcpkg::Commands::BuildExternal
{
const ParsedArguments options = args.parse_arguments(COMMAND_STRUCTURE);
- auto binaryprovider =
- create_binary_provider_from_configs(paths, args.binary_sources).value_or_exit(VCPKG_LINE_INFO);
+ auto binaryprovider = create_binary_provider_from_configs(args.binary_sources).value_or_exit(VCPKG_LINE_INFO);
const FullPackageSpec spec = Input::check_and_get_full_package_spec(
std::string(args.command_arguments.at(0)), default_triplet, COMMAND_STRUCTURE.example_text);
diff --git a/toolsrc/src/vcpkg/commands.ci.cpp b/toolsrc/src/vcpkg/commands.ci.cpp
index 41bc7458e..8a92ff4f9 100644
--- a/toolsrc/src/vcpkg/commands.ci.cpp
+++ b/toolsrc/src/vcpkg/commands.ci.cpp
@@ -404,7 +404,7 @@ namespace vcpkg::Commands::CI
if (args.binary_caching_enabled())
{
binaryproviderStorage =
- create_binary_provider_from_configs(paths, args.binary_sources).value_or_exit(VCPKG_LINE_INFO);
+ create_binary_provider_from_configs(args.binary_sources).value_or_exit(VCPKG_LINE_INFO);
}
IBinaryProvider& binaryprovider = binaryproviderStorage ? *binaryproviderStorage : null_binary_provider();
diff --git a/toolsrc/src/vcpkg/commands.setinstalled.cpp b/toolsrc/src/vcpkg/commands.setinstalled.cpp
index d248a4b09..ea258b961 100644
--- a/toolsrc/src/vcpkg/commands.setinstalled.cpp
+++ b/toolsrc/src/vcpkg/commands.setinstalled.cpp
@@ -141,8 +141,7 @@ namespace vcpkg::Commands::SetInstalled
Input::check_triplet(spec.package_spec.triplet(), paths);
}
- auto binary_provider =
- create_binary_provider_from_configs(paths, args.binary_sources).value_or_exit(VCPKG_LINE_INFO);
+ auto binary_provider = create_binary_provider_from_configs(args.binary_sources).value_or_exit(VCPKG_LINE_INFO);
const bool dry_run = Util::Sets::contains(options.switches, OPTION_DRY_RUN);
diff --git a/toolsrc/src/vcpkg/commands.upgrade.cpp b/toolsrc/src/vcpkg/commands.upgrade.cpp
index f3e0ca233..155c6f11c 100644
--- a/toolsrc/src/vcpkg/commands.upgrade.cpp
+++ b/toolsrc/src/vcpkg/commands.upgrade.cpp
@@ -41,8 +41,7 @@ namespace vcpkg::Commands::Upgrade
const bool no_dry_run = Util::Sets::contains(options.switches, OPTION_NO_DRY_RUN);
const KeepGoing keep_going = to_keep_going(Util::Sets::contains(options.switches, OPTION_KEEP_GOING));
- auto binaryprovider =
- create_binary_provider_from_configs(paths, args.binary_sources).value_or_exit(VCPKG_LINE_INFO);
+ auto binaryprovider = create_binary_provider_from_configs(args.binary_sources).value_or_exit(VCPKG_LINE_INFO);
StatusParagraphs status_db = database_load_check(paths);
diff --git a/toolsrc/src/vcpkg/install.cpp b/toolsrc/src/vcpkg/install.cpp
index f27b2ffae..c1af001fd 100644
--- a/toolsrc/src/vcpkg/install.cpp
+++ b/toolsrc/src/vcpkg/install.cpp
@@ -672,8 +672,7 @@ namespace vcpkg::Install
const ParsedArguments options =
args.parse_arguments(paths.manifest_mode_enabled() ? MANIFEST_COMMAND_STRUCTURE : COMMAND_STRUCTURE);
- auto binaryprovider =
- create_binary_provider_from_configs(paths, args.binary_sources).value_or_exit(VCPKG_LINE_INFO);
+ auto binaryprovider = create_binary_provider_from_configs(args.binary_sources).value_or_exit(VCPKG_LINE_INFO);
const bool dry_run = Util::Sets::contains(options.switches, OPTION_DRY_RUN);
const bool use_head_version = Util::Sets::contains(options.switches, (OPTION_USE_HEAD_VERSION));