aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/include
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2017-12-13 05:43:00 -0800
committerRobert Schumacher <roschuma@microsoft.com>2017-12-13 05:43:00 -0800
commiteb1a7b099eb347b195491dfa2949d8aa92677276 (patch)
treeaf3f02ccfb55099faf8e7cb1d256eb5358bd1614 /toolsrc/include
parent7a6ffdc75c6634e0df3c158e871426190511a096 (diff)
downloadvcpkg-eb1a7b099eb347b195491dfa2949d8aa92677276.tar.gz
vcpkg-eb1a7b099eb347b195491dfa2949d8aa92677276.zip
[vcpkg] Fix regressions introduced with update command. Fixed issue with upgrade where it assumed downloads were not allowed.
Diffstat (limited to 'toolsrc/include')
-rw-r--r--toolsrc/include/tests.utils.h16
-rw-r--r--toolsrc/include/vcpkg/build.h23
-rw-r--r--toolsrc/include/vcpkg/commands.h6
-rw-r--r--toolsrc/include/vcpkg/dependencies.h54
-rw-r--r--toolsrc/include/vcpkg/packagespec.h7
-rw-r--r--toolsrc/include/vcpkg/paragraphs.h3
-rw-r--r--toolsrc/include/vcpkg/update.h6
7 files changed, 77 insertions, 38 deletions
diff --git a/toolsrc/include/tests.utils.h b/toolsrc/include/tests.utils.h
index 485b8c294..0c0add7ab 100644
--- a/toolsrc/include/tests.utils.h
+++ b/toolsrc/include/tests.utils.h
@@ -23,4 +23,18 @@ std::unique_ptr<vcpkg::StatusParagraph> make_status_pgh(const char* name,
std::unique_ptr<vcpkg::StatusParagraph> make_status_feature_pgh(const char* name,
const char* feature,
const char* depends = "",
- const char* triplet = "x86-windows"); \ No newline at end of file
+ const char* triplet = "x86-windows");
+
+template<class T, class S>
+T&& unwrap(vcpkg::ExpectedT<T, S>&& p)
+{
+ Assert::IsTrue(p.has_value());
+ return std::move(*p.get());
+}
+
+template<class T>
+T&& unwrap(vcpkg::Optional<T>&& opt)
+{
+ Assert::IsTrue(opt.has_value());
+ return std::move(*opt.get());
+}
diff --git a/toolsrc/include/vcpkg/build.h b/toolsrc/include/vcpkg/build.h
index 18408e207..e3f8bf79e 100644
--- a/toolsrc/include/vcpkg/build.h
+++ b/toolsrc/include/vcpkg/build.h
@@ -114,39 +114,24 @@ namespace vcpkg::Build
struct BuildPackageConfig
{
- BuildPackageConfig(const SourceParagraph& src,
- const Triplet& triplet,
- fs::path&& port_dir,
- const BuildPackageOptions& build_package_options)
- : src(src)
- , scf(nullptr)
- , triplet(triplet)
- , port_dir(std::move(port_dir))
- , build_package_options(build_package_options)
- , feature_list(nullptr)
- {
- }
-
BuildPackageConfig(const SourceControlFile& src,
const Triplet& triplet,
fs::path&& port_dir,
const BuildPackageOptions& build_package_options,
const std::unordered_set<std::string>& feature_list)
- : src(*src.core_paragraph)
- , scf(&src)
+ : scf(src)
, triplet(triplet)
, port_dir(std::move(port_dir))
, build_package_options(build_package_options)
- , feature_list(&feature_list)
+ , feature_list(feature_list)
{
}
- const SourceParagraph& src;
- const SourceControlFile* scf;
+ const SourceControlFile& scf;
const Triplet& triplet;
fs::path port_dir;
const BuildPackageOptions& build_package_options;
- const std::unordered_set<std::string>* feature_list;
+ const std::unordered_set<std::string>& feature_list;
};
ExtendedBuildResult build_package(const VcpkgPaths& paths,
diff --git a/toolsrc/include/vcpkg/commands.h b/toolsrc/include/vcpkg/commands.h
index 74fd80c03..b852a973e 100644
--- a/toolsrc/include/vcpkg/commands.h
+++ b/toolsrc/include/vcpkg/commands.h
@@ -39,6 +39,12 @@ namespace vcpkg::Commands
void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths);
}
+ namespace Upgrade
+ {
+ extern const CommandStructure COMMAND_STRUCTURE;
+ void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet);
+ }
+
namespace Edit
{
extern const CommandStructure COMMAND_STRUCTURE;
diff --git a/toolsrc/include/vcpkg/dependencies.h b/toolsrc/include/vcpkg/dependencies.h
index 5411ee166..8a082efca 100644
--- a/toolsrc/include/vcpkg/dependencies.h
+++ b/toolsrc/include/vcpkg/dependencies.h
@@ -30,7 +30,6 @@ namespace vcpkg::Dependencies
Optional<StatusParagraph> status_paragraph;
Optional<BinaryControlFile> binary_control_file;
- Optional<SourceParagraph> source_paragraph;
Optional<const SourceControlFile*> source_control_file;
};
}
@@ -92,11 +91,11 @@ namespace vcpkg::Dependencies
struct AnyAction
{
- AnyAction(InstallPlanAction&& iplan) : install_plan(std::move(iplan)) {}
- AnyAction(RemovePlanAction&& rplan) : remove_plan(std::move(rplan)) {}
+ AnyAction(InstallPlanAction&& iplan) : install_action(std::move(iplan)) {}
+ AnyAction(RemovePlanAction&& rplan) : remove_action(std::move(rplan)) {}
- Optional<InstallPlanAction> install_plan;
- Optional<RemovePlanAction> remove_plan;
+ Optional<InstallPlanAction> install_action;
+ Optional<RemovePlanAction> remove_action;
const PackageSpec& spec() const;
};
@@ -123,22 +122,44 @@ namespace vcpkg::Dependencies
struct PortFileProvider
{
- virtual const SourceControlFile& get_control_file(const std::string& spec) const = 0;
+ virtual Optional<const SourceControlFile&> get_control_file(const std::string& src_name) const = 0;
};
- struct MapPortFile : Util::ResourceBase, PortFileProvider
+ struct MapPortFileProvider : Util::ResourceBase, PortFileProvider
{
+ explicit MapPortFileProvider(const std::unordered_map<std::string, SourceControlFile>& map);
+ Optional<const SourceControlFile&> get_control_file(const std::string& src_name) const override;
+
+ private:
const std::unordered_map<std::string, SourceControlFile>& ports;
- explicit MapPortFile(const std::unordered_map<std::string, SourceControlFile>& map);
- const SourceControlFile& get_control_file(const std::string& spec) const override;
};
- struct PathsPortFile : Util::ResourceBase, PortFileProvider
+ struct PathsPortFileProvider : Util::ResourceBase, PortFileProvider
{
+ explicit PathsPortFileProvider(const VcpkgPaths& paths);
+ Optional<const SourceControlFile&> get_control_file(const std::string& src_name) const override;
+
+ private:
const VcpkgPaths& ports;
mutable std::unordered_map<std::string, SourceControlFile> cache;
- explicit PathsPortFile(const VcpkgPaths& paths);
- const SourceControlFile& get_control_file(const std::string& spec) const override;
+ };
+
+ struct ClusterGraph;
+ struct GraphPlan;
+
+ struct PackageGraph
+ {
+ PackageGraph(const PortFileProvider& provider, const StatusParagraphs& status_db);
+ ~PackageGraph();
+
+ void install(const FeatureSpec& spec);
+ void upgrade(const PackageSpec& spec);
+
+ std::vector<AnyAction> serialize() const;
+
+ private:
+ std::unique_ptr<GraphPlan> m_graph_plan;
+ std::unique_ptr<ClusterGraph> m_graph;
};
std::vector<InstallPlanAction> create_install_plan(const PortFileProvider& port_file_provider,
@@ -148,11 +169,18 @@ namespace vcpkg::Dependencies
std::vector<RemovePlanAction> create_remove_plan(const std::vector<PackageSpec>& specs,
const StatusParagraphs& status_db);
- std::vector<ExportPlanAction> create_export_plan(const VcpkgPaths& paths,
+ std::vector<ExportPlanAction> create_export_plan(const PortFileProvider& port_file_provider,
+ const VcpkgPaths& paths,
const std::vector<PackageSpec>& specs,
const StatusParagraphs& status_db);
std::vector<AnyAction> create_feature_install_plan(const std::unordered_map<std::string, SourceControlFile>& map,
const std::vector<FeatureSpec>& specs,
const StatusParagraphs& status_db);
+
+ std::vector<AnyAction> create_feature_install_plan(const PortFileProvider& port_file_provider,
+ const std::vector<FeatureSpec>& specs,
+ const StatusParagraphs& status_db);
+
+ void print_plan(const std::vector<AnyAction>& action_plan, const bool is_recursive = true);
}
diff --git a/toolsrc/include/vcpkg/packagespec.h b/toolsrc/include/vcpkg/packagespec.h
index 071487e1a..f1119e2f3 100644
--- a/toolsrc/include/vcpkg/packagespec.h
+++ b/toolsrc/include/vcpkg/packagespec.h
@@ -34,6 +34,13 @@ namespace vcpkg
std::string to_string() const;
+ bool operator<(const PackageSpec& other) const
+ {
+ if (name() < other.name()) return true;
+ if (name() > other.name()) return false;
+ return triplet() < other.triplet();
+ }
+
private:
std::string m_name;
Triplet m_triplet;
diff --git a/toolsrc/include/vcpkg/paragraphs.h b/toolsrc/include/vcpkg/paragraphs.h
index c8dbea646..e2c7f2d99 100644
--- a/toolsrc/include/vcpkg/paragraphs.h
+++ b/toolsrc/include/vcpkg/paragraphs.h
@@ -32,7 +32,4 @@ namespace vcpkg::Paragraphs
std::vector<std::unique_ptr<SourceControlFile>> load_all_ports(const Files::Filesystem& fs,
const fs::path& ports_dir);
-
- std::map<std::string, VersionT> load_all_port_names_and_versions(const Files::Filesystem& fs,
- const fs::path& ports_dir);
}
diff --git a/toolsrc/include/vcpkg/update.h b/toolsrc/include/vcpkg/update.h
index 7587b9eb2..b85f7b2b3 100644
--- a/toolsrc/include/vcpkg/update.h
+++ b/toolsrc/include/vcpkg/update.h
@@ -1,5 +1,6 @@
#pragma once
+#include <vcpkg/dependencies.h>
#include <vcpkg/packagespec.h>
#include <vcpkg/statusparagraphs.h>
#include <vcpkg/vcpkgcmdarguments.h>
@@ -16,7 +17,8 @@ namespace vcpkg::Update
VersionDiff version_diff;
};
- std::vector<OutdatedPackage> find_outdated_packages(const std::map<std::string, VersionT>& src_names_to_versions,
+ std::vector<OutdatedPackage> find_outdated_packages(const Dependencies::PortFileProvider& provider,
const StatusParagraphs& status_db);
+
void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths);
-} \ No newline at end of file
+}