diff options
| author | miseri <miseri@users.noreply.github.com> | 2020-03-10 19:03:23 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-10 10:03:23 -0700 |
| commit | 2eed7256143ff1e8d83bce470006f6888f7234b4 (patch) | |
| tree | a1a3d39708ee2f4f5884a03674d37731857a74bf /toolsrc/src | |
| parent | 7893f7c76c8f61d971b530b120a2261d80b85592 (diff) | |
| download | vcpkg-2eed7256143ff1e8d83bce470006f6888f7234b4.tar.gz vcpkg-2eed7256143ff1e8d83bce470006f6888f7234b4.zip | |
[vcpkg] Added command line switch --all-installed to allow exporting of all packages without needing to specify individual packages (#10304)
* Added command line switch --all-installed to allow exporting of all packages without needing to specify individual packages
* Changed --all-installed to --x-all-installed https://github.com/microsoft/vcpkg/pull/10304
* [vcpkg] Clang-format export.cpp
Co-authored-by: Robert Schumacher <roschuma@microsoft.com>
Diffstat (limited to 'toolsrc/src')
| -rw-r--r-- | toolsrc/src/vcpkg/export.cpp | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/toolsrc/src/vcpkg/export.cpp b/toolsrc/src/vcpkg/export.cpp index 9abc48620..7ab0090e8 100644 --- a/toolsrc/src/vcpkg/export.cpp +++ b/toolsrc/src/vcpkg/export.cpp @@ -260,6 +260,7 @@ namespace vcpkg::Export bool zip = false; bool seven_zip = false; bool chocolatey = false; + bool all_installed = false; Optional<std::string> maybe_output; @@ -288,8 +289,9 @@ namespace vcpkg::Export static constexpr StringLiteral OPTION_CHOCOLATEY = "--x-chocolatey"; static constexpr StringLiteral OPTION_CHOCOLATEY_MAINTAINER = "--x-maintainer"; static constexpr StringLiteral OPTION_CHOCOLATEY_VERSION_SUFFIX = "--x-version-suffix"; + static constexpr StringLiteral OPTION_ALL_INSTALLED = "--x-all-installed"; - static constexpr std::array<CommandSwitch, 7> EXPORT_SWITCHES = {{ + static constexpr std::array<CommandSwitch, 8> EXPORT_SWITCHES = {{ {OPTION_DRY_RUN, "Do not actually export"}, {OPTION_RAW, "Export to an uncompressed directory"}, {OPTION_NUGET, "Export a NuGet package"}, @@ -297,6 +299,7 @@ namespace vcpkg::Export {OPTION_ZIP, "Export to a zip file"}, {OPTION_SEVEN_ZIP, "Export to a 7zip (.7z) file"}, {OPTION_CHOCOLATEY, "Export a Chocolatey package (experimental feature)"}, + {OPTION_ALL_INSTALLED, "Export all installed packages"}, }}; static constexpr std::array<CommandSetting, 10> EXPORT_SETTINGS = {{ @@ -322,16 +325,14 @@ namespace vcpkg::Export nullptr, }; - static ExportArguments handle_export_command_arguments(const VcpkgCmdArguments& args, Triplet default_triplet) + static ExportArguments handle_export_command_arguments(const VcpkgCmdArguments& args, + Triplet default_triplet, + const StatusParagraphs& status_db) { ExportArguments ret; const auto options = args.parse_arguments(COMMAND_STRUCTURE); - // input sanitization - ret.specs = Util::fmap(args.command_arguments, [&](auto&& arg) { - return Input::check_and_get_package_spec(std::string(arg), default_triplet, COMMAND_STRUCTURE.example_text); - }); ret.dry_run = options.switches.find(OPTION_DRY_RUN) != options.switches.cend(); ret.raw = options.switches.find(OPTION_RAW) != options.switches.cend(); ret.nuget = options.switches.find(OPTION_NUGET) != options.switches.cend(); @@ -339,9 +340,26 @@ namespace vcpkg::Export ret.zip = options.switches.find(OPTION_ZIP) != options.switches.cend(); ret.seven_zip = options.switches.find(OPTION_SEVEN_ZIP) != options.switches.cend(); ret.chocolatey = options.switches.find(OPTION_CHOCOLATEY) != options.switches.cend(); - + ret.all_installed = options.switches.find(OPTION_ALL_INSTALLED) != options.switches.end(); ret.maybe_output = maybe_lookup(options.settings, OPTION_OUTPUT); + if (ret.all_installed) + { + auto installed_ipv = get_installed_ports(status_db); + std::transform(installed_ipv.begin(), + installed_ipv.end(), + std::back_inserter(ret.specs), + [](const auto& ipv) { return ipv.spec(); }); + } + else + { + // input sanitization + ret.specs = Util::fmap(args.command_arguments, [&](auto&& arg) { + return Input::check_and_get_package_spec( + std::string(arg), default_triplet, COMMAND_STRUCTURE.example_text); + }); + } + if (!ret.raw && !ret.nuget && !ret.ifw && !ret.zip && !ret.seven_zip && !ret.dry_run && !ret.chocolatey) { System::print2(System::Color::error, @@ -515,16 +533,15 @@ With a project open, go to Tools->NuGet Package Manager->Package Manager Console void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, Triplet default_triplet) { - const auto opts = handle_export_command_arguments(args, default_triplet); + const StatusParagraphs status_db = database_load_check(paths); + const auto opts = handle_export_command_arguments(args, default_triplet, status_db); for (auto&& spec : opts.specs) Input::check_triplet(spec.triplet(), paths); - // create the plan - const StatusParagraphs status_db = database_load_check(paths); - // Load ports from ports dirs PortFileProvider::PathsPortFileProvider provider(paths, args.overlay_ports.get()); + // create the plan std::vector<ExportPlanAction> export_plan = Dependencies::create_export_plan(opts.specs, status_db); Checks::check_exit(VCPKG_LINE_INFO, !export_plan.empty(), "Export plan cannot be empty"); |
