diff --git a/toolsrc/src/vcpkg/commands.edit.cpp b/toolsrc/src/vcpkg/commands.edit.cpp index 237feebdd2..b9d9d8c1a2 100644 --- a/toolsrc/src/vcpkg/commands.edit.cpp +++ b/toolsrc/src/vcpkg/commands.edit.cpp @@ -64,14 +64,29 @@ namespace vcpkg::Commands::Edit { if (Util::Sets::contains(options.switches, OPTION_ALL)) { + const auto& fs = paths.get_filesystem(); + auto packages = fs.get_files_non_recursive(paths.packages); + return Util::fmap(ports, [&](const std::string& port_name) -> std::string { const auto portpath = paths.ports / port_name; const auto portfile = portpath / "portfile.cmake"; const auto buildtrees_current_dir = paths.buildtrees / port_name; - return Strings::format(R"###("%s" "%s" "%s")###", + const auto pattern = port_name + "_"; + + std::string package_paths; + for (auto&& package : packages) + { + if (Strings::case_insensitive_ascii_starts_with(package.filename().u8string(), pattern)) + { + package_paths.append(Strings::format(" \"%s\"", package.u8string())); + } + } + + return Strings::format(R"###("%s" "%s" "%s"%s)###", portpath.u8string(), portfile.u8string(), - buildtrees_current_dir.u8string()); + buildtrees_current_dir.u8string(), + package_paths); }); } @@ -92,8 +107,8 @@ namespace vcpkg::Commands::Edit void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths) { - static const fs::path VS_CODE_INSIDERS = fs::path {"Microsoft VS Code Insiders"} / "Code - Insiders.exe"; - static const fs::path VS_CODE = fs::path {"Microsoft VS Code"} / "Code.exe"; + static const fs::path VS_CODE_INSIDERS = fs::path{"Microsoft VS Code Insiders"} / "Code - Insiders.exe"; + static const fs::path VS_CODE = fs::path{"Microsoft VS Code"} / "Code.exe"; auto& fs = paths.get_filesystem(); @@ -131,7 +146,7 @@ namespace vcpkg::Commands::Edit const auto& app_data = System::get_environment_variable("APPDATA"); if (const auto* ad = app_data.get()) { - const fs::path default_base = fs::path {*ad}.parent_path() / "Local" / "Programs"; + const fs::path default_base = fs::path{*ad}.parent_path() / "Local" / "Programs"; candidate_paths.push_back(default_base / VS_CODE_INSIDERS); candidate_paths.push_back(default_base / VS_CODE); }