diff options
| -rw-r--r-- | scripts/azure-pipelines/end-to-end-tests.ps1 | 4 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/binarycaching.h | 3 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg-test/binaryconfigparser.cpp | 30 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/binarycaching.cpp | 164 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/build.cpp | 3 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/commands.buildexternal.cpp | 3 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/commands.ci.cpp | 2 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/commands.setinstalled.cpp | 3 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/commands.upgrade.cpp | 3 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/install.cpp | 3 |
10 files changed, 87 insertions, 131 deletions
diff --git a/scripts/azure-pipelines/end-to-end-tests.ps1 b/scripts/azure-pipelines/end-to-end-tests.ps1 index eccefd544..b0e447657 100644 --- a/scripts/azure-pipelines/end-to-end-tests.ps1 +++ b/scripts/azure-pipelines/end-to-end-tests.ps1 @@ -106,7 +106,7 @@ if (-not $IsLinux -and -not $IsMacOS) Refresh-TestRoot
# Test simple installation
-$args = $commonArgs + @("install","rapidjson","--binarycaching","--x-binarysource=clear;files,$ArchiveRoot,write;nuget,$NuGetRoot,upload")
+$args = $commonArgs + @("install","rapidjson","--binarycaching","--x-binarysource=clear;files,$ArchiveRoot,write;nuget,$NuGetRoot,readwrite")
$CurrentTest = "./vcpkg $($args -join ' ')"
Write-Host $CurrentTest
./vcpkg @args
@@ -164,7 +164,7 @@ Throw-IfFailed Remove-Item -Recurse -Force $NuGetRoot -ErrorAction SilentlyContinue
mkdir $NuGetRoot
-$args = $commonArgs + @("install","rapidjson","tinyxml","--binarycaching","--x-binarysource=clear;nuget,$NuGetRoot2;nuget,$NuGetRoot,upload")
+$args = $commonArgs + @("install","rapidjson","tinyxml","--binarycaching","--x-binarysource=clear;nuget,$NuGetRoot2;nuget,$NuGetRoot,write")
$CurrentTest = "./vcpkg $($args -join ' ')"
Write-Host $CurrentTest
./vcpkg @args
diff --git a/toolsrc/include/vcpkg/binarycaching.h b/toolsrc/include/vcpkg/binarycaching.h index 24c81b905..8517c551a 100644 --- a/toolsrc/include/vcpkg/binarycaching.h +++ b/toolsrc/include/vcpkg/binarycaching.h @@ -42,8 +42,7 @@ namespace vcpkg IBinaryProvider& null_binary_provider();
- ExpectedS<std::unique_ptr<IBinaryProvider>> create_binary_provider_from_configs(const VcpkgPaths& paths,
- View<std::string> args);
+ ExpectedS<std::unique_ptr<IBinaryProvider>> create_binary_provider_from_configs(View<std::string> args);
ExpectedS<std::unique_ptr<IBinaryProvider>> create_binary_provider_from_configs_pure(const std::string& env_string,
View<std::string> args);
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)); |
