From 7e4c92e29954c14f9c1dd51aff95fff25d3ced32 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Wed, 22 May 2019 14:15:44 +0300 Subject: Add support for package manifest upstream-version value --- libbrep/package.cxx | 5 +++++ libbrep/package.hxx | 12 ++++++++---- libbrep/package.xml | 6 ++++++ load/load.cxx | 1 + mod/mod-package-details.cxx | 2 +- mod/mod-package-version-details.cxx | 2 +- mod/page.cxx | 17 ++++++++++------- mod/page.hxx | 16 ++++++++++++---- tests/load/1/math/libexp-+2-1.2+1.tar.gz | Bin 408 -> 426 bytes tests/load/1/math/packages.manifest | 3 ++- tests/load/driver.cxx | 3 ++- 11 files changed, 48 insertions(+), 19 deletions(-) diff --git a/libbrep/package.cxx b/libbrep/package.cxx index a01ed14..763cec9 100644 --- a/libbrep/package.cxx +++ b/libbrep/package.cxx @@ -52,6 +52,7 @@ namespace brep package:: package (package_name nm, version_type vr, + optional uv, package_name pn, priority_type pr, string sm, @@ -81,6 +82,7 @@ namespace brep tenant (id.tenant), name (id.name), version (move (vr)), + upstream_version (move (uv)), project (move (pn)), priority (move (pr)), summary (move (sm)), @@ -144,6 +146,9 @@ namespace brep string k (project.string () + " " + name.string () + " " + version.string () + " " + version.string (true)); + if (upstream_version) + k += " " + *upstream_version; + // Add tags to keywords. // for (const auto& t: tags) diff --git a/libbrep/package.hxx b/libbrep/package.hxx index 2e31ff4..f59c0d8 100644 --- a/libbrep/package.hxx +++ b/libbrep/package.hxx @@ -21,7 +21,7 @@ // #define LIBBREP_PACKAGE_SCHEMA_VERSION_BASE 11 -#pragma db model version(LIBBREP_PACKAGE_SCHEMA_VERSION_BASE, 12, closed) +#pragma db model version(LIBBREP_PACKAGE_SCHEMA_VERSION_BASE, 13, closed) namespace brep { @@ -344,6 +344,7 @@ namespace brep public: using repository_type = brep::repository; using version_type = brep::version; + using upstream_version_type = brep::upstream_version; using priority_type = brep::priority; using license_alternatives_type = brep::license_alternatives; using url_type = brep::url; @@ -357,6 +358,7 @@ namespace brep // package (package_name, version_type, + optional upstream_version, package_name project, priority_type, string summary, @@ -399,9 +401,11 @@ namespace brep // package_id id; - const string& tenant; // Tracks id.tenant. - const package_name& name; // Tracks id.name. - upstream_version version; + const string& tenant; // Tracks id.tenant. + const package_name& name; // Tracks id.name. + upstream_version_type version; + + optional upstream_version; // Matches the package name if the project name is not specified in // the manifest. diff --git a/libbrep/package.xml b/libbrep/package.xml index fdb4f04..a1e7602 100644 --- a/libbrep/package.xml +++ b/libbrep/package.xml @@ -1,4 +1,10 @@ + + + + + + diff --git a/load/load.cxx b/load/load.cxx index c5fa3cd..9b414d5 100644 --- a/load/load.cxx +++ b/load/load.cxx @@ -502,6 +502,7 @@ load_packages (const shared_ptr& rp, p = make_shared ( move (pm.name), move (pm.version), + move (pm.upstream_version), move (project), pm.priority ? move (*pm.priority) : priority (), move (pm.summary), diff --git a/mod/mod-package-details.cxx b/mod/mod-package-details.cxx index 5074eca..7b75e62 100644 --- a/mod/mod-package-details.cxx +++ b/mod/mod-package-details.cxx @@ -254,7 +254,7 @@ handle (request& rq, response& rs) s << TABLE(CLASS="proplist version") << TBODY - << TR_VERSION (name, p->version, root, tenant) + << TR_VERSION (name, p->version, root, tenant, p->upstream_version) // @@ Shouldn't we skip low priority row ? Don't think so, why? // diff --git a/mod/mod-package-version-details.cxx b/mod/mod-package-version-details.cxx index 40cbad6..437bff4 100644 --- a/mod/mod-package-version-details.cxx +++ b/mod/mod-package-version-details.cxx @@ -210,7 +210,7 @@ handle (request& rq, response& rs) // Repeat version here since it can be cut out in the header. // - << TR_VERSION (pkg->version) + << TR_VERSION (pkg->version, pkg->upstream_version) << TR_PRIORITY (pkg->priority) << TR_LICENSES (pkg->license_alternatives) diff --git a/mod/page.cxx b/mod/page.cxx index 228a137..0c4c257 100644 --- a/mod/page.cxx +++ b/mod/page.cxx @@ -153,8 +153,8 @@ namespace brep if (!value_.empty ()) s << VALUE(value_); - if (!placeholder_.empty ()) - s << PLACEHOLDER(placeholder_); + if (placeholder_ != nullptr) + s << PLACEHOLDER(*placeholder_); if (autofocus_) s << AUTOFOCUS(""); @@ -249,7 +249,9 @@ namespace brep { s << version_; - if (stub_) + if (upstream_version_ != nullptr) + s << " (" << *upstream_version_ << ')'; + else if (stub_) s << " (stub)"; } else @@ -259,12 +261,13 @@ namespace brep s << A(HREF=tenant_dir (*root_, *tenant_) / dir_path (mime_url_encode (package_->string (), false)) / path (version_)) - << version_; + << version_ + << ~A; - if (stub_) + if (upstream_version_ != nullptr) + s << " (" << *upstream_version_ << ')'; + else if (stub_) s << " (stub)"; - - s << ~A; } s << ~SPAN diff --git a/mod/page.hxx b/mod/page.hxx index 7260031..28257c1 100644 --- a/mod/page.hxx +++ b/mod/page.hxx @@ -129,7 +129,11 @@ namespace brep const string& v, const string& p = string (), bool a = false) - : label_ (l), name_ (n), value_ (v), placeholder_ (p), autofocus_ (a) + : label_ (l), + name_ (n), + value_ (v), + placeholder_ (!p.empty () ? &p : nullptr), + autofocus_ (a) { } @@ -140,7 +144,7 @@ namespace brep const string& label_; const string& name_; const string& value_; - const string& placeholder_; + const string* placeholder_; bool autofocus_; }; @@ -222,9 +226,11 @@ namespace brep TR_VERSION (const package_name& p, const version& v, const dir_path& r, - const string& t) + const string& t, + const optional& u = nullopt) : package_ (&p), version_ (v.string ()), + upstream_version_ (u ? &*u : nullptr), stub_ (v.compare (wildcard_version, true) == 0), root_ (&r), tenant_ (&t) @@ -233,9 +239,10 @@ namespace brep // Display the version as a regular text. // - TR_VERSION (const version& v) + TR_VERSION (const version& v, const optional& u = nullopt) : package_ (nullptr), version_ (v.string ()), + upstream_version_ (u ? &*u : nullptr), stub_ (v.compare (wildcard_version, true) == 0), root_ (nullptr), tenant_ (nullptr) @@ -248,6 +255,7 @@ namespace brep private: const package_name* package_; string version_; + const string* upstream_version_; bool stub_; const dir_path* root_; const string* tenant_; 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 index 20c8434..5beeb84 100644 Binary files a/tests/load/1/math/libexp-+2-1.2+1.tar.gz and b/tests/load/1/math/libexp-+2-1.2+1.tar.gz differ diff --git a/tests/load/1/math/packages.manifest b/tests/load/1/math/packages.manifest index 1bb1c57..49caea6 100644 --- a/tests/load/1/math/packages.manifest +++ b/tests/load/1/math/packages.manifest @@ -3,6 +3,7 @@ sha256sum: b85ba3a0ba45b98e1fbb2507f199bc4b218a4a413ec6ba4094e214a7507490a2 : name: libexp version: +2-1.2+1 +upstream-version: 1.2.abc.15-x project: mathLab summary: The exponent license: MIT @@ -19,7 +20,7 @@ build-include: windows**d/x86_64** build-include: windows-vc_13** build-exclude: **; Only supported on Windows. location: libexp-+2-1.2+1.tar.gz -sha256sum: 4f476dab0cd13d4c7a4676b50180e66a9a10a65f92a3d335b8227a9a8ca58e21 +sha256sum: 317c8c6f45d9dfdfdef3a823411920cecd51729c7c4f58f9a0b0bbd681c07bd6 : name: libfoo version: +0-X.Y diff --git a/tests/load/driver.cxx b/tests/load/driver.cxx index 27be0da..18c601e 100644 --- a/tests/load/driver.cxx +++ b/tests/load/driver.cxx @@ -792,6 +792,7 @@ test_pkg_repos (const cstrings& loader_args, db.load ( package_id (tenant, package_name ("libexp"), version ("+2-1.2+1")))); + assert (epv->upstream_version && *epv->upstream_version == "1.2.abc.15-x"); assert (epv->project == "mathLab"); assert (epv->summary == "The exponent"); assert (epv->tags == strings ({"mathlab", "c++", "exponent"})); @@ -836,7 +837,7 @@ test_pkg_repos (const cstrings& loader_args, assert (check_location (epv)); assert (epv->sha256sum && *epv->sha256sum == - "4f476dab0cd13d4c7a4676b50180e66a9a10a65f92a3d335b8227a9a8ca58e21"); + "317c8c6f45d9dfdfdef3a823411920cecd51729c7c4f58f9a0b0bbd681c07bd6"); // Verify libpq package version. // -- cgit v1.1