diff options
Diffstat (limited to 'toolsrc/include')
| -rw-r--r-- | toolsrc/include/tests.utils.h | 3 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/span.h | 14 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/dependencies.h | 40 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/remove.h | 2 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/statusparagraph.h | 17 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/statusparagraphs.h | 9 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/versiont.h | 1 |
7 files changed, 54 insertions, 32 deletions
diff --git a/toolsrc/include/tests.utils.h b/toolsrc/include/tests.utils.h index 0c0add7ab..b23abe4eb 100644 --- a/toolsrc/include/tests.utils.h +++ b/toolsrc/include/tests.utils.h @@ -6,6 +6,7 @@ #include <vcpkg/packagespec.h> #include <vcpkg/packagespecparseresult.h> #include <vcpkg/statusparagraph.h> +#include <vcpkg/triplet.h> #include <memory> @@ -38,3 +39,5 @@ T&& unwrap(vcpkg::Optional<T>&& opt) Assert::IsTrue(opt.has_value()); return std::move(*opt.get()); } + +vcpkg::PackageSpec unsafe_pspec(std::string name, vcpkg::Triplet t = vcpkg::Triplet::X86_WINDOWS); diff --git a/toolsrc/include/vcpkg/base/span.h b/toolsrc/include/vcpkg/base/span.h index 158f1ac74..c9ac18afe 100644 --- a/toolsrc/include/vcpkg/base/span.h +++ b/toolsrc/include/vcpkg/base/span.h @@ -11,15 +11,17 @@ namespace vcpkg struct Span
{
public:
+ static_assert(!std::is_reference<T>::value, "Span<&> is illegal");
+
using element_type = T;
- using pointer = T*;
- using reference = T&;
- using iterator = T*;
+ using pointer = std::add_pointer_t<T>;
+ using reference = std::add_lvalue_reference_t<T>;
+ using iterator = pointer;
constexpr Span() noexcept : m_ptr(nullptr), m_count(0) {}
constexpr Span(std::nullptr_t) noexcept : Span() {}
- constexpr Span(T* ptr, size_t count) noexcept : m_ptr(ptr), m_count(count) {}
- constexpr Span(T* ptr_begin, T* ptr_end) noexcept : m_ptr(ptr_begin), m_count(ptr_end - ptr_begin) {}
+ constexpr Span(pointer ptr, size_t count) noexcept : m_ptr(ptr), m_count(count) {}
+ constexpr Span(pointer ptr_begin, pointer ptr_end) noexcept : m_ptr(ptr_begin), m_count(ptr_end - ptr_begin) {}
constexpr Span(std::initializer_list<T> l) noexcept : m_ptr(l.begin()), m_count(l.size()) {}
template<size_t N>
@@ -69,4 +71,4 @@ namespace vcpkg {
return sp.end();
}
-}
\ No newline at end of file +}
diff --git a/toolsrc/include/vcpkg/dependencies.h b/toolsrc/include/vcpkg/dependencies.h index 8902a7b08..014f004a2 100644 --- a/toolsrc/include/vcpkg/dependencies.h +++ b/toolsrc/include/vcpkg/dependencies.h @@ -23,23 +23,10 @@ namespace vcpkg::Dependencies const Build::BuildPackageOptions& options); std::string to_output_string(RequestType request_type, const CStringView s); - struct AnyParagraph - { - std::vector<PackageSpec> dependencies(const Triplet& triplet) const; - - Optional<StatusParagraph> status_paragraph; - Optional<BinaryControlFile> binary_control_file; - Optional<const SourceControlFile*> source_control_file; - }; -} - -namespace vcpkg::Dependencies -{ enum class InstallPlanType { UNKNOWN, BUILD_AND_INSTALL, - INSTALL, ALREADY_INSTALLED, EXCLUDED }; @@ -51,18 +38,22 @@ namespace vcpkg::Dependencies InstallPlanAction(); InstallPlanAction(const PackageSpec& spec, + InstalledPackageView&& spghs, const std::unordered_set<std::string>& features, const RequestType& request_type); - InstallPlanAction(const PackageSpec& spec, const AnyParagraph& any_paragraph, const RequestType& request_type); + InstallPlanAction(const PackageSpec& spec, - const SourceControlFile& any_paragraph, + const SourceControlFile& scf, const std::unordered_set<std::string>& features, const RequestType& request_type); std::string displayname() const; PackageSpec spec; - AnyParagraph any_paragraph; + + Optional<const SourceControlFile&> source_control_file; + Optional<InstalledPackageView> installed_package; + InstallPlanType plan_type; RequestType request_type; Build::BuildPackageOptions build_options; @@ -111,12 +102,21 @@ namespace vcpkg::Dependencies static bool compare_by_name(const ExportPlanAction* left, const ExportPlanAction* right); ExportPlanAction(); - ExportPlanAction(const PackageSpec& spec, const AnyParagraph& any_paragraph, const RequestType& request_type); + ExportPlanAction(const PackageSpec& spec, + InstalledPackageView&& installed_package, + const RequestType& request_type); + + ExportPlanAction(const PackageSpec& spec, const RequestType& request_type); PackageSpec spec; - AnyParagraph any_paragraph; ExportPlanType plan_type; RequestType request_type; + + Optional<const BinaryParagraph&> core_paragraph() const; + std::vector<PackageSpec> dependencies(const Triplet& triplet) const; + + private: + Optional<InstalledPackageView> m_installed_package; }; struct PortFileProvider @@ -151,8 +151,8 @@ namespace vcpkg::Dependencies PackageGraph(const PortFileProvider& provider, const StatusParagraphs& status_db); ~PackageGraph(); - void install(const FeatureSpec& spec); - void upgrade(const PackageSpec& spec); + void install(const FeatureSpec& spec) const; + void upgrade(const PackageSpec& spec) const; std::vector<AnyAction> serialize() const; diff --git a/toolsrc/include/vcpkg/remove.h b/toolsrc/include/vcpkg/remove.h index 6d8a3ebe9..36aeda2ad 100644 --- a/toolsrc/include/vcpkg/remove.h +++ b/toolsrc/include/vcpkg/remove.h @@ -17,7 +17,7 @@ namespace vcpkg::Remove void perform_remove_plan_action(const VcpkgPaths& paths, const Dependencies::RemovePlanAction& action, const Purge purge, - StatusParagraphs& status_db); + StatusParagraphs* status_db); extern const CommandStructure COMMAND_STRUCTURE; diff --git a/toolsrc/include/vcpkg/statusparagraph.h b/toolsrc/include/vcpkg/statusparagraph.h index ca84b1bb7..0802de530 100644 --- a/toolsrc/include/vcpkg/statusparagraph.h +++ b/toolsrc/include/vcpkg/statusparagraph.h @@ -32,6 +32,8 @@ namespace vcpkg StatusParagraph(); explicit StatusParagraph(std::unordered_map<std::string, std::string>&& fields); + bool is_installed() const { return want == Want::INSTALL && state == InstallState::INSTALLED; } + BinaryParagraph package; Want want; InstallState state; @@ -42,4 +44,19 @@ namespace vcpkg std::string to_string(InstallState f); std::string to_string(Want f); + + struct InstalledPackageView + { + InstalledPackageView() : core(nullptr) {} + + InstalledPackageView(const StatusParagraph* c, std::vector<const StatusParagraph*>&& fs) + : core(c), features(std::move(fs)) + { + } + + std::vector<PackageSpec> dependencies() const; + + const StatusParagraph* core; + std::vector<const StatusParagraph*> features; + }; } diff --git a/toolsrc/include/vcpkg/statusparagraphs.h b/toolsrc/include/vcpkg/statusparagraphs.h index 747a0c1ab..fd33f8094 100644 --- a/toolsrc/include/vcpkg/statusparagraphs.h +++ b/toolsrc/include/vcpkg/statusparagraphs.h @@ -21,11 +21,10 @@ namespace vcpkg std::vector<std::unique_ptr<StatusParagraph>*> find_all(const std::string& name, const Triplet& triplet); - const_iterator find_installed(const PackageSpec& spec) const - { - return find_installed(spec.name(), spec.triplet()); - } - const_iterator find_installed(const std::string& name, const Triplet& triplet) const; + Optional<InstalledPackageView> find_all_installed(const PackageSpec& spec) const; + + const_iterator find_installed(const PackageSpec& spec) const; + bool is_installed(const PackageSpec& spec) const; iterator insert(std::unique_ptr<StatusParagraph>); diff --git a/toolsrc/include/vcpkg/versiont.h b/toolsrc/include/vcpkg/versiont.h index 6d8332521..8427dfe3b 100644 --- a/toolsrc/include/vcpkg/versiont.h +++ b/toolsrc/include/vcpkg/versiont.h @@ -6,6 +6,7 @@ namespace vcpkg struct VersionT { VersionT(); + VersionT(std::string&& value); VersionT(const std::string& value); const std::string& to_string() const; |
