diff options
| author | Alexander Karatarakis <alkarata@microsoft.com> | 2016-12-01 15:36:39 -0800 |
|---|---|---|
| committer | Alexander Karatarakis <alkarata@microsoft.com> | 2016-12-01 15:36:39 -0800 |
| commit | 7c2abc755f58beaea36aa1cbc1c3b7f375e567a3 (patch) | |
| tree | 246687795f6d11f0ba1c4f856e1a4cff3a295eff | |
| parent | 79399923b6cd98b9e77020615e433ef0560d5dc2 (diff) | |
| download | vcpkg-7c2abc755f58beaea36aa1cbc1c3b7f375e567a3.tar.gz vcpkg-7c2abc755f58beaea36aa1cbc1c3b7f375e567a3.zip | |
Introduce function get_installed_files()
| -rw-r--r-- | toolsrc/include/vcpkg.h | 8 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg.cpp | 33 |
2 files changed, 41 insertions, 0 deletions
diff --git a/toolsrc/include/vcpkg.h b/toolsrc/include/vcpkg.h index ef78e213e..75dc40b43 100644 --- a/toolsrc/include/vcpkg.h +++ b/toolsrc/include/vcpkg.h @@ -11,6 +11,14 @@ namespace vcpkg void write_update(const vcpkg_paths& paths, const StatusParagraph& p); + struct StatusParagraph_and_associated_files + { + StatusParagraph pgh; + std::vector<std::string> files; + }; + + std::vector<StatusParagraph_and_associated_files> get_installed_files(const vcpkg_paths& paths, const StatusParagraphs& status_db); + expected<SourceParagraph> try_load_port(const fs::path& control_path); inline expected<SourceParagraph> try_load_port(const vcpkg_paths& paths, const std::string& name) diff --git a/toolsrc/src/vcpkg.cpp b/toolsrc/src/vcpkg.cpp index 6c5224f56..57b2e7adb 100644 --- a/toolsrc/src/vcpkg.cpp +++ b/toolsrc/src/vcpkg.cpp @@ -109,6 +109,39 @@ void vcpkg::write_update(const vcpkg_paths& paths, const StatusParagraph& p) fs::rename(tmp_update_filename, update_filename); } +std::vector<StatusParagraph_and_associated_files> vcpkg::get_installed_files(const vcpkg_paths& paths, const StatusParagraphs& status_db) +{ + std::vector<StatusParagraph_and_associated_files> installed_files; + + std::string line; + + for (const std::unique_ptr<StatusParagraph>& pgh : status_db) + { + if (pgh->state != install_state_t::installed) + { + continue; + } + + std::fstream listfile(paths.listfile_path(pgh->package)); + + std::vector<std::string> installed_files_of_current_pgh; + while (std::getline(listfile, line)) + { + if (line.empty()) + { + continue; + } + + installed_files_of_current_pgh.push_back(line); + } + + const StatusParagraph_and_associated_files pgh_and_files = {*pgh, std::move(installed_files_of_current_pgh)}; + installed_files.push_back(pgh_and_files); + } + + return installed_files; +} + expected<SourceParagraph> vcpkg::try_load_port(const fs::path& path) { try |
