aboutsummaryrefslogtreecommitdiff
path: root/brep
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-11-12 17:25:36 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2015-11-16 16:41:50 +0200
commit96281a6c4f818311a6df90c0d8b8f537a61e1090 (patch)
treed0c0ccacda5ccfb94b98d018abb273b554eb2f77 /brep
parente80ebd1c1a6fe7749c1565c4a9e2fccaa07d5d95 (diff)
Add url, email, summary, description members to the repository class
Diffstat (limited to 'brep')
-rw-r--r--brep/package15
-rw-r--r--brep/package-version-details.cxx43
-rw-r--r--brep/package.cxx20
-rw-r--r--brep/page.cxx21
4 files changed, 71 insertions, 28 deletions
diff --git a/brep/package b/brep/package
index 8fc6a43..f56906a 100644
--- a/brep/package
+++ b/brep/package
@@ -14,6 +14,7 @@
#include <cstddef> // size_t
#include <utility> // move()
#include <cstdint> // uint16
+#include <ostream>
#include <odb/core.hxx>
#include <odb/forward.hxx> // 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<dependency>
{
@@ -310,6 +314,14 @@ namespace brep
repository_location location;
std::string display_name;
+ optional<std::string> url;
+
+ // Set only for internal repositories.
+ //
+ optional<std::string> email;
+ optional<std::string> summary;
+ optional<std::string> 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<repository_type> 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<path> 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<package> 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<repository> r (
+ p->internal ()
+ ? p->internal_repository.load ()
+ : p->other_repositories[0].load ());
- if (d.constraint)
- {
- s << ' ';
+ optional<string> 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 <utility> // move()
#include <cassert>
+#include <ostream>
#include <odb/database.hxx>
@@ -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<package> 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<repository> r (
+ p->internal ()
+ ? p->internal_repository.load ()
+ : p->other_repositories[0].load ());
+
+ optional<string> 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;
}