diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2015-10-06 08:43:01 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2015-10-06 08:43:01 +0200 |
commit | fd2c0dc9707714d82580dc61854efc06335e6091 (patch) | |
tree | 2ad76b0dad17b244c183405b02fa9138d0407e8d /bpkg/package | |
parent | a23e8ac5de6170a4a82a2ac475aff707d5accbf6 (diff) |
Track prerequisite packages, handle in pkg-{con,dis}figure
Diffstat (limited to 'bpkg/package')
-rw-r--r-- | bpkg/package | 43 |
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, |