From fd2c0dc9707714d82580dc61854efc06335e6091 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 6 Oct 2015 08:43:01 +0200 Subject: Track prerequisite packages, handle in pkg-{con,dis}figure --- bpkg/package | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'bpkg/package') 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 out_root; + // A map of "effective" prerequisites (i.e., pointers to other + // selected packages) to optional dependency constraint. + // + using prerequisites_type = std::map, + optional, + 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 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 constraint; + }; + + // Version comparison operators. // // They allow comparing objects that have epoch, canonical_upstream, -- cgit v1.1