diff options
| author | Curtis.Bezault <curtbezault@gmail.com> | 2019-07-18 13:24:31 -0700 |
|---|---|---|
| committer | Curtis.Bezault <curtbezault@gmail.com> | 2019-07-18 13:24:31 -0700 |
| commit | d39bd70d533c64e929d4399cb9a1bdbfe0efaecd (patch) | |
| tree | 0255b19a2837c67d6c400374517acf3c74b66254 | |
| parent | f18ffe996877a058da9e0208f92331c83517f6a0 (diff) | |
| download | vcpkg-d39bd70d533c64e929d4399cb9a1bdbfe0efaecd.tar.gz vcpkg-d39bd70d533c64e929d4399cb9a1bdbfe0efaecd.zip | |
add needs_rebuild, should probably be moved to somewhere else
| -rw-r--r-- | toolsrc/include/vcpkg/statusparagraphs.h | 2 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/statusparagraphs.cpp | 25 |
2 files changed, 27 insertions, 0 deletions
diff --git a/toolsrc/include/vcpkg/statusparagraphs.h b/toolsrc/include/vcpkg/statusparagraphs.h index fa064de7e..3ebad67de 100644 --- a/toolsrc/include/vcpkg/statusparagraphs.h +++ b/toolsrc/include/vcpkg/statusparagraphs.h @@ -62,6 +62,8 @@ namespace vcpkg /// <returns>`true` if installed, `false` if not or not found.</returns> bool is_installed(const FeatureSpec& spec) const; + bool needs_rebuild(const PackageSpec& spec); + iterator insert(std::unique_ptr<StatusParagraph>); friend void serialize(const StatusParagraphs& pgh, std::string& out_str); diff --git a/toolsrc/src/vcpkg/statusparagraphs.cpp b/toolsrc/src/vcpkg/statusparagraphs.cpp index c642af59b..f204ed568 100644 --- a/toolsrc/src/vcpkg/statusparagraphs.cpp +++ b/toolsrc/src/vcpkg/statusparagraphs.cpp @@ -118,6 +118,31 @@ namespace vcpkg return it != end() && (*it)->is_installed(); } + bool vcpkg::StatusParagraphs::needs_rebuild(const PackageSpec& spec) + { + auto it = find(spec); + if (it != end()) + { + for (const std::string& dep : (*it)->package.depends) + { + PackageSpec dep_spec = + PackageSpec::from_name_and_triplet( + dep, + spec.triplet()).value_or_exit(VCPKG_LINE_INFO); + + if (needs_rebuild(dep_spec)) + { + (*it)->state = InstallState::NEEDS_REBUILD; + return true; + } + } + + return (*it)->needs_rebuild(); + } + + return false; + } + StatusParagraphs::iterator StatusParagraphs::insert(std::unique_ptr<StatusParagraph> pgh) { Checks::check_exit(VCPKG_LINE_INFO, pgh != nullptr, "Inserted null paragraph"); |
