diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2018-07-11 15:51:59 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2018-07-11 16:51:21 +0300 |
commit | 6a41864fdb57c75be3db87b357063b0c828dbc18 (patch) | |
tree | b2f9a56555cd7b642529842013528c95072cd606 | |
parent | 21033565488f6c63b4c40962cccfdc8b6ca32b2a (diff) |
Add support for package project manifest value
-rw-r--r-- | libbrep/package.cxx | 4 | ||||
-rw-r--r-- | libbrep/package.hxx | 9 | ||||
-rw-r--r-- | libbrep/package.xml | 1 | ||||
-rw-r--r-- | load/load.cxx | 5 | ||||
-rw-r--r-- | mod/mod-package-details.cxx | 3 | ||||
-rw-r--r-- | mod/mod-package-search.cxx | 2 | ||||
-rw-r--r-- | mod/mod-package-version-details.cxx | 3 | ||||
-rw-r--r-- | mod/page.cxx | 43 | ||||
-rw-r--r-- | mod/page.hxx | 31 | ||||
-rw-r--r-- | tests/load/1/math/libexp-+2-1.2+1.tar.gz | bin | 351 -> 367 bytes | |||
-rw-r--r-- | tests/load/1/math/packages.manifest | 5 | ||||
-rw-r--r-- | tests/load/driver.cxx | 6 |
12 files changed, 96 insertions, 16 deletions
diff --git a/libbrep/package.cxx b/libbrep/package.cxx index 3e457b2..8c0abfe 100644 --- a/libbrep/package.cxx +++ b/libbrep/package.cxx @@ -49,6 +49,7 @@ namespace brep package:: package (package_name nm, version_type vr, + package_name pn, priority_type pr, string sm, license_alternatives_type la, @@ -70,6 +71,7 @@ namespace brep shared_ptr<repository_type> rp) : id (move (nm), vr), version (move (vr)), + project (move (pn)), priority (move (pr)), summary (move (sm)), license_alternatives (move (la)), @@ -124,7 +126,7 @@ namespace brep // the available internal repositories. // string k (id.name.string () + " " + version.string () + " " + - version.string (true)); + version.string (true) + " " + project.string ()); // Add tags to keywords. // diff --git a/libbrep/package.hxx b/libbrep/package.hxx index 0f3f181..e7a8338 100644 --- a/libbrep/package.hxx +++ b/libbrep/package.hxx @@ -298,8 +298,9 @@ namespace brep // Create internal package object. Note that for stubs the build // constraints are meaningless, and so not saved. // - package (package_name name, + package (package_name, version_type, + package_name project, priority_type, string summary, license_alternatives_type, @@ -336,6 +337,12 @@ namespace brep // package_id id; upstream_version version; + + // Matches the package name if the project name is not specified in + // the manifest. + // + package_name project; + priority_type priority; string summary; license_alternatives_type license_alternatives; diff --git a/libbrep/package.xml b/libbrep/package.xml index 08ecc61..47ff071 100644 --- a/libbrep/package.xml +++ b/libbrep/package.xml @@ -77,6 +77,7 @@ <column name="version_revision" type="INTEGER" null="false"/> <column name="version_upstream" type="TEXT" null="false"/> <column name="version_release" type="TEXT" null="true"/> + <column name="project" type="CITEXT" null="false"/> <column name="priority" type="INTEGER" null="false"/> <column name="priority_comment" type="TEXT" null="false"/> <column name="summary" type="TEXT" null="false"/> diff --git a/load/load.cxx b/load/load.cxx index ca7c6c7..1875f2a 100644 --- a/load/load.cxx +++ b/load/load.cxx @@ -402,9 +402,14 @@ load_packages (const shared_ptr<repository>& rp, database& db) move (pd.constraint)}); } + // Cache before the package name is moved. + // + package_name project (pm.effective_project ()); + p = make_shared<package> ( move (pm.name), move (pm.version), + move (project), pm.priority ? move (*pm.priority) : priority (), move (pm.summary), move (pm.license_alternatives), diff --git a/mod/mod-package-details.cxx b/mod/mod-package-details.cxx index ffd0ae7..3db9e1f 100644 --- a/mod/mod-package-details.cxx +++ b/mod/mod-package-details.cxx @@ -186,7 +186,8 @@ handle (request& rq, response& rs) s << TABLE(CLASS="proplist", ID="package") << TBODY - << TR_LICENSE (licenses); + << TR_LICENSE (licenses) + << TR_PROJECT (pkg->project, root); if (pkg->url) s << TR_URL (*pkg->url); diff --git a/mod/mod-package-search.cxx b/mod/mod-package-search.cxx index d53397e..a86e5a7 100644 --- a/mod/mod-package-search.cxx +++ b/mod/mod-package-search.cxx @@ -163,7 +163,7 @@ handle (request& rq, response& rs) << TR_NAME (p->id.name, squery_param, root) << TR_SUMMARY (p->summary) << TR_LICENSE (p->license_alternatives) - << TR_TAGS (p->tags, root) + << TR_TAGS (p->project, p->tags, root) << TR_DEPENDS (p->dependencies, root) << TR_REQUIRES (p->requirements) << ~TBODY diff --git a/mod/mod-package-version-details.cxx b/mod/mod-package-version-details.cxx index 833b802..0e3b3f7 100644 --- a/mod/mod-package-version-details.cxx +++ b/mod/mod-package-version-details.cxx @@ -205,7 +205,8 @@ handle (request& rq, response& rs) << ~TABLE << TABLE(CLASS="proplist", ID="package") - << TBODY; + << TBODY + << TR_PROJECT (pkg->project, root); const auto& u (pkg->url); diff --git a/mod/page.cxx b/mod/page.cxx index 614bf79..3a6e989 100644 --- a/mod/page.cxx +++ b/mod/page.cxx @@ -8,7 +8,7 @@ #include <ios> // hex, uppercase, right #include <sstream> #include <iomanip> // setw(), setfill() -#include <algorithm> // min() +#include <algorithm> // min(), find() #include <libstudxml/serializer.hxx> @@ -238,6 +238,26 @@ namespace brep << ~TR; } + // TR_PROJECT + // + void TR_PROJECT:: + operator() (serializer& s) const + { + s << TR(CLASS="project") + << TH << "project" << ~TH + << TD + << SPAN(CLASS="value") + << A + << HREF + << root_ << "?q=" << mime_url_encode (project_.string ()) + << ~HREF + << project_ + << ~A + << ~SPAN + << ~TD + << ~TR; + } + // TR_SUMMARY // void TR_SUMMARY:: @@ -318,21 +338,32 @@ namespace brep void TR_TAGS:: operator() (serializer& s) const { - if (!tags_.empty ()) + if (!tags_.empty () || project_) { s << TR(CLASS="tags") << TH << "tags" << ~TH << TD << SPAN(CLASS="value"); - for (const auto& t: tags_) + auto print = [&s, this] (const string& t) { - if (&t != &tags_[0]) - s << " "; - s << A << HREF << root_ << "?q=" << mime_url_encode (t) << ~HREF << t << ~A; + }; + + bool pt (project_ != nullptr && + find (tags_.begin (), tags_.end (), *project_) == tags_.end ()); + + if (pt) + print (project_->string ()); + + for (const string& t: tags_) + { + if (&t != &tags_[0] || pt) + s << " "; + + print (t); } s << ~SPAN diff --git a/mod/page.hxx b/mod/page.hxx index 2b8c31f..759984e 100644 --- a/mod/page.hxx +++ b/mod/page.hxx @@ -210,6 +210,25 @@ namespace brep const dir_path* root_; }; + // Generates package project name element. + // + // Displays a link to the package search page with the project name + // specified as a keyword. + // + class TR_PROJECT + { + public: + TR_PROJECT (const package_name& p, const dir_path& r) + : project_ (p), root_ (r) {} + + void + operator() (xml::serializer&) const; + + private: + const package_name& project_; + const dir_path& root_; + }; + // Generates package summary element. // class TR_SUMMARY @@ -258,12 +277,22 @@ namespace brep class TR_TAGS { public: - TR_TAGS (const strings& ts, const dir_path& r): tags_ (ts), root_ (r) {} + // Display the tag link list. + // + TR_TAGS (const strings& ts, const dir_path& r) + : project_ (nullptr), tags_ (ts), root_ (r) {} + + // As above but prepend the list with a tag link produced from the project + // name, if it differs from other tags. + // + TR_TAGS (const package_name& pr, const strings& ts, const dir_path& r) + : project_ (&pr), tags_ (ts), root_ (r) {} void operator() (xml::serializer&) const; private: + const package_name* project_; const strings& tags_; const dir_path& root_; }; diff --git a/tests/load/1/math/libexp-+2-1.2+1.tar.gz b/tests/load/1/math/libexp-+2-1.2+1.tar.gz Binary files differindex 084de3f..56f877e 100644 --- a/tests/load/1/math/libexp-+2-1.2+1.tar.gz +++ b/tests/load/1/math/libexp-+2-1.2+1.tar.gz diff --git a/tests/load/1/math/packages.manifest b/tests/load/1/math/packages.manifest index 9b39555..3ac5efd 100644 --- a/tests/load/1/math/packages.manifest +++ b/tests/load/1/math/packages.manifest @@ -3,9 +3,10 @@ sha256sum: b85ba3a0ba45b98e1fbb2507f199bc4b218a4a413ec6ba4094e214a7507490a2 : name: libexp version: +2-1.2+1 +project: mathLab summary: The exponent license: MIT -tags: c++, exponent +tags: mathlab, c++, exponent description: The exponent math function. url: http://www.exp.com email: users@exp.com @@ -15,7 +16,7 @@ depends: libpq >= 9.0.0 build-exclude: *; Only supported on Linux. build-include: linux* location: libexp-+2-1.2+1.tar.gz -sha256sum: 040b3817418121e8e922ac3a6d3752378f78239faad7d257de87019557fdd245 +sha256sum: bc68940a1b3b7e345cbceac35d308b4e04b304f49ff2087340949f2879709967 : name: libfoo version: +0-X.Y diff --git a/tests/load/driver.cxx b/tests/load/driver.cxx index f6a4268..8e7c86e 100644 --- a/tests/load/driver.cxx +++ b/tests/load/driver.cxx @@ -196,6 +196,7 @@ main (int argc, char* argv[]) db.load<package> ( package_id (package_name ("libfoo"), version ("+0-X.Y")))); + assert (fpvxy->project == package_name ("libfoo")); assert (fpvxy->summary == "The Foo Library"); assert (fpvxy->tags.empty ()); assert (!fpvxy->description); @@ -662,8 +663,9 @@ main (int argc, char* argv[]) db.load<package> ( package_id (package_name ("libexp"), version ("+2-1.2+1")))); + assert (epv->project == "mathLab"); assert (epv->summary == "The exponent"); - assert (epv->tags == strings ({"c++", "exponent"})); + assert (epv->tags == strings ({"mathlab", "c++", "exponent"})); assert (epv->description && *epv->description == "The exponent math function."); assert (epv->url && *epv->url == "http://www.exp.com"); @@ -704,7 +706,7 @@ main (int argc, char* argv[]) assert (check_location (epv)); assert (epv->sha256sum && *epv->sha256sum == - "040b3817418121e8e922ac3a6d3752378f78239faad7d257de87019557fdd245"); + "bc68940a1b3b7e345cbceac35d308b4e04b304f49ff2087340949f2879709967"); // Verify libpq package version. // |