From a64dad6a0a6f6893bbb6eed7065485c1965ff70b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 17 Sep 2015 16:59:56 +0200 Subject: Package object model refactoring --- brep/package | 55 ++++++++++++++++++++++++++----------------------------- 1 file changed, 26 insertions(+), 29 deletions(-) (limited to 'brep/package') 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>; - using prerequisite_repositories_type = - std::vector>; - // 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, - odb::lazy_shared_ptr, + package_version (odb::lazy_shared_ptr, version_type, priority_type, license_alternatives_type, std::string changes, dependencies_type, requirements_type, - optional location); + optional location, + odb::lazy_shared_ptr); // Manifest data. // - odb::lazy_shared_ptr repository; odb::lazy_shared_ptr 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 internal_repository; + + // Path to the package file. Set only for package versions present in + // internal repository. + // optional location; + std::vector> 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; -- cgit v1.1