diff options
| author | Alexander Karatarakis <alkarata@microsoft.com> | 2017-03-29 17:33:08 -0700 |
|---|---|---|
| committer | Alexander Karatarakis <alkarata@microsoft.com> | 2017-03-31 18:01:13 -0700 |
| commit | af0e652c484b9554bdce2457a73928682f505c24 (patch) | |
| tree | 80b028a8c333e00c6d3b90b007fdcf86395b3195 /toolsrc/src/commands_update.cpp | |
| parent | 946734aa7349399892704ca9abf7be718cfb24a7 (diff) | |
| download | vcpkg-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.cpp | 53 |
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>..."); } |
