aboutsummaryrefslogtreecommitdiff
path: root/brep/package
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-09-17 16:59:56 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2015-09-24 11:23:36 +0200
commita64dad6a0a6f6893bbb6eed7065485c1965ff70b (patch)
tree913f0cfe6fff4391e43a801034bfa2ee7c625ccd /brep/package
parentb192a3fcc7875210b3e1f6bd2292022a78c9f0e1 (diff)
Package object model refactoring
Diffstat (limited to 'brep/package')
-rw-r--r--brep/package55
1 files changed, 26 insertions, 29 deletions
diff --git a/brep/package b/brep/package
index c81e652..c383b82 100644
--- a/brep/package
+++ b/brep/package
@@ -104,32 +104,33 @@ namespace brep
#pragma db value
struct package_version_id
{
- std::string repository;
std::string package;
std::uint16_t epoch;
std::string canonical_upstream;
+ std::uint16_t revision;
// Database mapping.
//
- #pragma db member(repository) points_to(repository) //on_delete(cascade)
#pragma db member(package) points_to(package) //on_delete(cascade)
};
inline bool
operator< (const package_version_id& x, const package_version_id& y)
{
- int r (x.repository.compare (y.repository));
+ int r (x.package.compare (y.package));
if (r != 0)
return r < 0;
- r = x.package.compare (y.package);
+ if (x.epoch != y.epoch)
+ return x.epoch < y.epoch;
+
+ r = x.canonical_upstream.compare (y.canonical_upstream);
if (r != 0)
return r < 0;
- return x.epoch < y.epoch ||
- (x.epoch == y.epoch && x.canonical_upstream < y.canonical_upstream);
+ return x.revision < y.revision;
}
using priority = bpkg::priority;
@@ -229,13 +230,6 @@ namespace brep
class repository
{
public:
- using path_type = brep::path;
- using timestamp_type = brep::timestamp;
- using package_versions_type =
- std::vector<odb::lazy_weak_ptr<package_version>>;
- using prerequisite_repositories_type =
- std::vector<odb::lazy_weak_ptr<repository>>;
-
// Create internal repository.
//
repository (repository_location,
@@ -258,16 +252,14 @@ namespace brep
// Initialized with timestamp_nonexistent by default.
//
- timestamp_type packages_timestamp;
+ timestamp packages_timestamp;
// Initialized with timestamp_nonexistent by default.
// For external repositories stays timestamp_nonexistent.
//
- timestamp_type repositories_timestamp;
+ timestamp repositories_timestamp;
bool internal;
- package_versions_type package_versions;
- prerequisite_repositories_type prerequisite_repositories;
// Database mapping.
//
@@ -289,10 +281,6 @@ namespace brep
#pragma db member(id) virtual(_id_type) before id(canonical_name) \
get(_id) set(_id (std::move (?))) column("")
- #pragma db member(package_versions) inverse(id.data.repository)
- #pragma db member(prerequisite_repositories) id_column("repository") \
- value_column("prerequisite_repository") value_not_null
-
private:
friend class odb::access;
repository () = default;
@@ -333,7 +321,7 @@ namespace brep
//
#pragma db member(name) id
#pragma db member(tags) id_column("package") value_column("tag")
- #pragma db member(versions) inverse(id.data.package)
+ #pragma db member(versions) inverse(id.data.package) value_not_null
private:
friend class odb::access;
@@ -352,19 +340,18 @@ namespace brep
using dependencies_type = brep::dependencies;
using requirements_type = brep::requirements;
- package_version (odb::lazy_shared_ptr<repository_type>,
- odb::lazy_shared_ptr<package_type>,
+ package_version (odb::lazy_shared_ptr<package_type>,
version_type,
priority_type,
license_alternatives_type,
std::string changes,
dependencies_type,
requirements_type,
- optional<path> location);
+ optional<path> location,
+ odb::lazy_shared_ptr<repository_type>);
// Manifest data.
//
- odb::lazy_shared_ptr<repository_type> repository;
odb::lazy_shared_ptr<package_type> package;
version_type version;
priority_type priority;
@@ -372,8 +359,15 @@ namespace brep
std::string changes;
dependencies_type dependencies;
requirements_type requirements;
+ odb::lazy_shared_ptr<repository_type> internal_repository;
+
+ // Path to the package file. Set only for package versions present in
+ // internal repository.
+ //
optional<path> location;
+ std::vector<odb::lazy_shared_ptr<repository_type>> external_repositories;
+
// Database mapping.
//
@@ -385,7 +379,6 @@ namespace brep
#pragma db column("")
package_version_id data;
std::string upstream;
- std::uint16_t revision;
};
_id_type
@@ -396,7 +389,6 @@ namespace brep
#pragma db member(version) transient
#pragma db member(package) transient
- #pragma db member(repository) transient
#pragma db member(id) virtual(_id_type) before id(data) \
get(_id) set(_id (std::move (?), (!))) column("")
@@ -454,6 +446,11 @@ namespace brep
set(_set (this.requirements, (?))) \
id_column("") key_column("") value_column("id")
+ #pragma db member(external_repositories) \
+ id_column("") \
+ value_column("repository") \
+ value_not_null
+
private:
friend class odb::access;
package_version () = default;
@@ -462,7 +459,7 @@ namespace brep
#pragma db view object(package_version) \
query((?) + "ORDER BY" + package_version::id.data.epoch + "DESC," + \
package_version::id.data.canonical_upstream + "DESC," + \
- package_version::id.revision + "DESC LIMIT 1")
+ package_version::id.data.revision + "DESC LIMIT 1")
struct max_package_version
{
using version_type = brep::version;