aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/include
diff options
context:
space:
mode:
Diffstat (limited to 'toolsrc/include')
-rw-r--r--toolsrc/include/tests.utils.h3
-rw-r--r--toolsrc/include/vcpkg/base/span.h14
-rw-r--r--toolsrc/include/vcpkg/dependencies.h40
-rw-r--r--toolsrc/include/vcpkg/remove.h2
-rw-r--r--toolsrc/include/vcpkg/statusparagraph.h17
-rw-r--r--toolsrc/include/vcpkg/statusparagraphs.h9
-rw-r--r--toolsrc/include/vcpkg/versiont.h1
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;