aboutsummaryrefslogtreecommitdiff
path: root/bpkg/package.hxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2018-02-24 18:21:39 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2018-02-26 17:50:24 +0300
commit4fcd32b536f3d29755b1fecc7e3f06be64f996ca (patch)
tree4aebf6eeb7ac4de316ddc91b92c264f252f86d44 /bpkg/package.hxx
parent12a5375f25d6a7be5a5741c728a8f9b8168761a4 (diff)
Add support for rep-list and rep-remove, update rep-add
Diffstat (limited to 'bpkg/package.hxx')
-rw-r--r--bpkg/package.hxx55
1 files changed, 55 insertions, 0 deletions
diff --git a/bpkg/package.hxx b/bpkg/package.hxx
index 23fe9b2..54efca1 100644
--- a/bpkg/package.hxx
+++ b/bpkg/package.hxx
@@ -761,6 +761,61 @@ namespace bpkg
optional<dependency_constraint> constraint;
};
+ // Return a list of repositories that depend on this repository as a
+ // complement.
+ //
+ // Note that the last db object pragma is required to produce an object
+ // loading view.
+ //
+ #pragma db view object(repository = complement) \
+ table("repository_complements" = "rc" inner: \
+ "rc.complement = " + complement::name) \
+ object(repository inner: "rc.repository = " + repository::name)
+ struct repository_complement_dependent
+ {
+ shared_ptr<repository> object;
+
+ operator const shared_ptr<repository> () const {return object;}
+ };
+
+ // Return a list of repositories that depend on this repository as a
+ // prerequisite.
+ //
+ // Note that the last db object pragma is required to produce an object
+ // loading view.
+ //
+ #pragma db view object(repository = prerequisite) \
+ table("repository_prerequisites" = "rp" inner: \
+ "rp.prerequisite = " + prerequisite::name) \
+ object(repository inner: "rp.repository = " + repository::name)
+ struct repository_prerequisite_dependent
+ {
+ shared_ptr<repository> object;
+
+ operator const shared_ptr<repository> () const {return object;}
+ };
+
+ // Return a list of packages available from this repository.
+ //
+ #pragma db view object(repository) \
+ table("available_package_locations" = "pl" inner: \
+ "pl.repository = " + repository::name) \
+ object(available_package inner: \
+ "pl.name = " + available_package::id.name + "AND" + \
+ "pl.version_epoch = " + \
+ available_package::id.version.epoch + "AND" + \
+ "pl.version_canonical_upstream = " + \
+ available_package::id.version.canonical_upstream + "AND" + \
+ "pl.version_canonical_release = " + \
+ available_package::id.version.canonical_release + "AND" + \
+ "pl.version_revision = " + \
+ available_package::id.version.revision)
+ struct repository_package
+ {
+ shared_ptr<available_package> object;
+
+ operator const shared_ptr<available_package> () const {return object;}
+ };
// Version comparison operators.
//