aboutsummaryrefslogtreecommitdiff
path: root/bpkg/package
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-10-06 08:43:01 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2015-10-06 08:43:01 +0200
commitfd2c0dc9707714d82580dc61854efc06335e6091 (patch)
tree2ad76b0dad17b244c183405b02fa9138d0407e8d /bpkg/package
parenta23e8ac5de6170a4a82a2ac475aff707d5accbf6 (diff)
Track prerequisite packages, handle in pkg-{con,dis}figure
Diffstat (limited to 'bpkg/package')
-rw-r--r--bpkg/package43
1 files changed, 43 insertions, 0 deletions
diff --git a/bpkg/package b/bpkg/package
index 419acdc..04cb821 100644
--- a/bpkg/package
+++ b/bpkg/package
@@ -387,15 +387,58 @@ namespace bpkg
//
optional<dir_path> out_root;
+ // A map of "effective" prerequisites (i.e., pointers to other
+ // selected packages) to optional dependency constraint.
+ //
+ using prerequisites_type = std::map<lazy_shared_ptr<package>,
+ optional<dependency_constraint>,
+ compare_lazy_ptr>;
+ prerequisites_type prerequisites;
+
// Database mapping.
//
#pragma db member(name) id
+ #pragma db member(prerequisites) id_column("package") \
+ key_column("prerequisite") value_column("") key_not_null
+
private:
friend class odb::access;
package () = default;
};
+ // Return a list of packages that depend on this package along with
+ // their constraints.
+ //
+ /*
+ #pragma db view object(package) \
+ container(package::prerequisites = pp inner: pp.key)
+ struct package_dependents
+ {
+ #pragma db column(pp.id)
+ string name;
+
+ #pragma db column(pp.value)
+ optional<dependency_constraint> constraint;
+ };
+ */
+
+ // @@ Using raw container table since ODB doesn't support containers
+ // in views yet.
+ //
+ #pragma db view object(package) \
+ table("package_prerequisites" = "pp" inner: \
+ "pp.prerequisite = " + package::name)
+ struct package_dependents
+ {
+ #pragma db column("pp.package")
+ string name;
+
+ #pragma db column("pp.")
+ optional<dependency_constraint> constraint;
+ };
+
+
// Version comparison operators.
//
// They allow comparing objects that have epoch, canonical_upstream,