aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/commands_update.cpp
diff options
context:
space:
mode:
authorAlexander Karatarakis <alkarata@microsoft.com>2017-03-29 17:33:08 -0700
committerAlexander Karatarakis <alkarata@microsoft.com>2017-03-31 18:01:13 -0700
commitaf0e652c484b9554bdce2457a73928682f505c24 (patch)
tree80b028a8c333e00c6d3b90b007fdcf86395b3195 /toolsrc/src/commands_update.cpp
parent946734aa7349399892704ca9abf7be718cfb24a7 (diff)
downloadvcpkg-af0e652c484b9554bdce2457a73928682f505c24.tar.gz
vcpkg-af0e652c484b9554bdce2457a73928682f505c24.zip
Refactor update and portsdiff
Diffstat (limited to 'toolsrc/src/commands_update.cpp')
-rw-r--r--toolsrc/src/commands_update.cpp53
1 files changed, 16 insertions, 37 deletions
diff --git a/toolsrc/src/commands_update.cpp b/toolsrc/src/commands_update.cpp
index 3642c5e83..ee2ec6496 100644
--- a/toolsrc/src/commands_update.cpp
+++ b/toolsrc/src/commands_update.cpp
@@ -7,13 +7,15 @@
namespace vcpkg::Commands::Update
{
- std::map<std::string, version_diff_t> find_outdated_packages(const StatusParagraphs& status_db)
+ std::vector<name_and_version_diff_t> find_outdated_packages(const vcpkg_paths& paths, const StatusParagraphs& status_db)
{
- std::map<std::string, version_diff_t> output;
- for (auto&& pgh : status_db)
+ const std::vector<SourceParagraph> source_paragraphs = Paragraphs::load_all_ports(paths.ports);
+ const std::map<std::string, version_t> src_names_to_versions = Paragraphs::extract_port_names_and_versions(source_paragraphs);
+ const std::vector<StatusParagraph*> installed_packages = get_installed_ports(status_db);
+
+ std::vector<name_and_version_diff_t> output;
+ for (const StatusParagraph* pgh : installed_packages)
{
- if (pgh->state == install_state_t::not_installed && pgh->want == want_t::purge)
- continue;
auto it = src_names_to_versions.find(pgh->package.spec.name());
if (it == src_names_to_versions.end())
{
@@ -22,14 +24,11 @@ namespace vcpkg::Commands::Update
}
if (it->second != pgh->package.version)
{
- packages_output.push_back(Strings::format("%-27s %s -> %s",
- pgh->package.displayname(),
- pgh->package.version,
- it->second));
- packages_list.append(" " + pgh->package.displayname());
+ output.push_back({ pgh->package.displayname(), version_diff_t(pgh->package.version, it->second) });
}
}
- std::sort(packages_output.begin(), packages_output.end());
+
+ return output;
}
void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
@@ -38,41 +37,21 @@ namespace vcpkg::Commands::Update
args.check_and_get_optional_command_arguments({});
System::println("Using local portfile versions. To update the local portfiles, use `git pull`.");
- StatusParagraphs status_db = database_load_check(paths);
+ const StatusParagraphs status_db = database_load_check(paths);
- const std::vector<SourceParagraph> source_paragraphs = Paragraphs::load_all_ports(paths.ports);
- const std::map<std::string, version_t> src_names_to_versions = Paragraphs::extract_port_names_and_versions(source_paragraphs);
-
- std::vector<StatusParagraph*> installed_packages = get_installed_ports(status_db);
+ const auto outdated_packages = ImmutableSortedVector<name_and_version_diff_t>::create(find_outdated_packages(paths, status_db),
+ &name_and_version_diff_t::compare_by_name);
- std::vector<std::string> packages_output;
- for (const StatusParagraph* pgh : installed_packages)
- {
- auto it = src_names_to_versions.find(pgh->package.spec.name());
- if (it == src_names_to_versions.end())
- {
- // Package was not installed from portfile
- continue;
- }
- if (it->second != pgh->package.version)
- {
- packages_output.push_back(Strings::format("%-27s %s -> %s",
- pgh->package.displayname(),
- pgh->package.version,
- it->second));
- }
- }
- std::sort(packages_output.begin(), packages_output.end());
- if (packages_output.empty())
+ if (outdated_packages.empty())
{
System::println("No packages need updating.");
}
else
{
System::println("The following packages differ from their port versions:");
- for (auto&& package : packages_output)
+ for (auto&& package : outdated_packages)
{
- System::println(" %s", package);
+ System::println(" %-27s %s", package.name, package.version_diff.toString());
}
System::println("\nTo update these packages, run\n vcpkg remove --purge <pkgs>...\n vcpkg install <pkgs>...");
}