From 96281a6c4f818311a6df90c0d8b8f537a61e1090 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 12 Nov 2015 17:25:36 +0200 Subject: Add url, email, summary, description members to the repository class --- brep/package | 15 ++++++++++++-- brep/package-version-details.cxx | 43 +++++++++++++++++++++++----------------- brep/package.cxx | 20 +++++++++++++++---- brep/page.cxx | 21 ++++++++++++++++---- 4 files changed, 71 insertions(+), 28 deletions(-) (limited to 'brep') diff --git a/brep/package b/brep/package index 8fc6a43..f56906a 100644 --- a/brep/package +++ b/brep/package @@ -14,6 +14,7 @@ #include // size_t #include // move() #include // uint16 +#include #include #include // database @@ -261,6 +262,9 @@ namespace brep #pragma db member(package) column("") not_null }; + std::ostream& + operator<< (std::ostream&, const dependency&); + #pragma db value class dependency_alternatives: public std::vector { @@ -310,6 +314,14 @@ namespace brep repository_location location; std::string display_name; + optional url; + + // Set only for internal repositories. + // + optional email; + optional summary; + optional description; + // Non empty for internal repositories and external ones with a filesystem // path location. // @@ -428,8 +440,7 @@ namespace brep requirements_type requirements; odb::lazy_shared_ptr internal_repository; - // Path to the package file. Set only for packages present in internal - // repository. + // Path to the package file. Set only for internal packages. // optional location; diff --git a/brep/package-version-details.cxx b/brep/package-version-details.cxx index 9c90b8d..ce25a44 100644 --- a/brep/package-version-details.cxx +++ b/brep/package-version-details.cxx @@ -212,29 +212,36 @@ namespace brep shared_ptr p (d.package.load ()); string en (mime_url_encode (p->id.name)); - if (p->internal ()) - s << A << HREF << "/go/" << en << ~HREF << p->id.name << ~A; - else - // @@ Refer to package repository URL when supported in repository - // manifest. - // - s << p->id.name; + assert (p->internal () || !p->other_repositories.empty ()); + shared_ptr r ( + p->internal () + ? p->internal_repository.load () + : p->other_repositories[0].load ()); - if (d.constraint) - { - s << ' '; + optional u (r->url); // Repository web interface URL. + if (!u && p->internal ()) + u = ""; // Make URL to reference the current web interface. - if (p->internal ()) - s << A - << HREF << "/go/" << en << "/" << p->version.string () << ~HREF + if (u) + { + s << A << HREF << *u << "/go/" << en << ~HREF << p->id.name << ~A; + + if (d.constraint) + { + s << ' ' + << A + << HREF + << *u << "/go/" << en << "/" << p->version.string () + << ~HREF << *d.constraint << ~A; - else - // @@ Refer to package repository URL when supported in - // repository manifest. - // - s << *d.constraint; + } } + else + // Display the dependency as a plain text in no repository URL + // available. + // + s << d; } s << ~SPAN diff --git a/brep/package.cxx b/brep/package.cxx index 853d484..d99819c 100644 --- a/brep/package.cxx +++ b/brep/package.cxx @@ -6,6 +6,7 @@ #include // move() #include +#include #include @@ -24,6 +25,17 @@ namespace brep return package.object_id ().name; } + ostream& + operator<< (ostream& o, const dependency& d) + { + o << d.name (); + + if (d.constraint) + o << ' ' << *d.constraint; + + return o; + } + // package // package:: @@ -120,19 +132,19 @@ namespace brep // repository:: repository (repository_location l, string d, dir_path p) - : location (move (l)), + : name (l.canonical_name ()), + location (move (l)), display_name (move (d)), local_path (move (p)), internal (true) { - name = location.canonical_name (); } repository:: repository (repository_location l) - : location (move (l)), + : name (l.canonical_name ()), + location (move (l)), internal (false) { - name = location.canonical_name (); } } diff --git a/brep/page.cxx b/brep/page.cxx index 481825b..81a7de5 100644 --- a/brep/page.cxx +++ b/brep/page.cxx @@ -284,11 +284,24 @@ namespace brep shared_ptr p (da.package.load ()); - if (p->internal ()) - s << A << HREF << "/go/" << mime_url_encode (n) << ~HREF << n << ~A; + assert (p->internal () || !p->other_repositories.empty ()); + shared_ptr r ( + p->internal () + ? p->internal_repository.load () + : p->other_repositories[0].load ()); + + optional u (r->url); // Repository web interface URL. + if (!u && p->internal ()) + u = ""; // Make URL to reference the current web interface. + + if (u) + s << A + << HREF << *u << "/go/" << mime_url_encode (n) << ~HREF + << n + << ~A; else - // @@ Refer to package repository URL when supported in repository - // manifest. + // Display the dependency as a plain text in no repository URL + // available. // s << n; } -- cgit v1.1