From dea81cc7816a0b393564f4c1c94951dc7f4e277b Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Wed, 29 May 2019 18:51:27 +0300 Subject: Adapt to making bpkg::url inheriting from butl::url --- libbrep/package.hxx | 5 +++- mod/page.cxx | 38 ++++++++++-------------- tests/load/1/stable/libfoo-1.2.2-alpha.1.tar.gz | Bin 353 -> 353 bytes tests/load/1/stable/packages.manifest | 4 +-- tests/load/1/stable/signature.manifest | 20 ++++++------- tests/load/driver.cxx | 22 +++++++------- 6 files changed, 43 insertions(+), 46 deletions(-) diff --git a/libbrep/package.hxx b/libbrep/package.hxx index f59c0d8..c4304f6 100644 --- a/libbrep/package.hxx +++ b/libbrep/package.hxx @@ -65,7 +65,10 @@ namespace brep using bpkg::url; #pragma db value(url) definition - #pragma db member(url::value) virtual(string) before access(this) column("") + #pragma db member(url::value) virtual(string) before \ + get(this.string ()) \ + set(this = brep::url ((?), "" /* comment */)) \ + column("") // email // diff --git a/mod/page.cxx b/mod/page.cxx index e03ee4b..706d052 100644 --- a/mod/page.cxx +++ b/mod/page.cxx @@ -577,32 +577,26 @@ namespace brep void TR_URL:: operator() (serializer& s) const { - // Strip the URL prefix for the link text. - // - // Note that it may not be a valid URL (see bpkg::url). - // - // @@ We should probably inherit bpkg::url from butl::url and make sure - // that it is "rootfull" and the authority is present. Should we also - // white-list the schema for security reasons? Then the offset will - // always be: url_.string ().find ("://") + 3. - // - size_t p (string::npos); + s << TR(CLASS=label_) + << TH << label_ << ~TH + << TD + << SPAN(CLASS="value"); - if (butl::url::traits::find (url_) == 0) // Is it a "rootfull" URL ? + // Display HTTP(S) URL as link, striping the scheme prefix for the link + // text. Display URL with a different scheme as plain text. + // + if (casecmp (url_.scheme, "https") == 0 || + casecmp (url_.scheme, "http") == 0) { - size_t n (url_.find (":/") + 2); - if (url_[n] == '/' && url_[n + 1] != '\0') // Has authority? - p = n + 1; + butl::url u (url_); + u.scheme.clear (); + + s << A(HREF=url_) << u << ~A; } + else + s << url_; - s << TR(CLASS=label_) - << TH << label_ << ~TH - << TD - << SPAN(CLASS="value") - << A(HREF=url_) - << (p != string::npos ? url_.c_str () + p : url_.c_str ()) - << ~A - << ~SPAN + s << ~SPAN << SPAN_COMMENT (url_.comment) << ~TD << ~TR; diff --git a/tests/load/1/stable/libfoo-1.2.2-alpha.1.tar.gz b/tests/load/1/stable/libfoo-1.2.2-alpha.1.tar.gz index cb50945..aa5665e 100644 Binary files a/tests/load/1/stable/libfoo-1.2.2-alpha.1.tar.gz and b/tests/load/1/stable/libfoo-1.2.2-alpha.1.tar.gz differ diff --git a/tests/load/1/stable/packages.manifest b/tests/load/1/stable/packages.manifest index 2eb96eb..c1d4f1a 100644 --- a/tests/load/1/stable/packages.manifest +++ b/tests/load/1/stable/packages.manifest @@ -18,13 +18,13 @@ priority: security summary: The Foo library license: MIT tags: c++, foo -url: http://www.example.com/foo/ +url: ftp://www.example.com/foo/ email: foo-users@example.com depends: libmisc [0.1 2.0-) | libmisc [2.0 5.0] depends: libgenx (0.2 3.0) depends: libexpat < 5.2 | libexpat (1 5.1] location: libfoo-1.2.2-alpha.1.tar.gz -sha256sum: e769cc99fd58a433beb817882cbf9dc04ce0872fbe3f2d9b43d9f627e67a85ea +sha256sum: f5d3e9e6e8f9621a638b1375d31f0eb50e6279d8066170b25da21e84198cfd82 : name: libfoo version: 1.2.2 diff --git a/tests/load/1/stable/signature.manifest b/tests/load/1/stable/signature.manifest index d9cb1f8..931ecd4 100644 --- a/tests/load/1/stable/signature.manifest +++ b/tests/load/1/stable/signature.manifest @@ -1,13 +1,13 @@ : 1 -sha256sum: 83677600921f649fb98cdc5eef918dc14759e380fcc52e06c471f88ab3aa4907 +sha256sum: 880d24ea372048c9d250410d747b330503bdf216df70e3ea11ad6aef7a58b7b9 signature: \ -JAdvW0tgOj2mJec3Bn9gD85MfLtKn0Eczq9zrpb0iNwWTFA1pwN/cInUclaorKJfj3JyZ6jt+RSf -2nDvyMDFXMl1c5+ii4ANrVgjLAMHDE6kFdg+EKKR36feQi7Gx3U3gd8eP/uWbSlHoj43ni9MLZ3K -58fP4u+SKRPKwFehhFUAriaxDjzG7recvGPhbdSwHQxNg0pmmNw0HcJdiU8LEM4kTGEh8oC3zr4i -gMe6jMxUP9V/q03sa8pfF4WhdFD2x48BoHg1EKkNJNaWCjJj9yIAn+CnjLssXOxASoAagoxZa0/E -jCFY7j1DGKV+BOjgirgh/Gx/WnsTfLt1SCvbQTyl1czm6Jg+VxGSTNZx++sGTSn02pVxyChkBEfp -6Uq4CZOKcK7yTHOj9ZQokPxmImHbveYJMzo0sQXpIbR0MXAaxvpVpHCA+f9xy/iKv5xSnepBOlIu -hivLHegNHD3fvbJpbrAoM+dtNHTaUXr0zhn38vXMrS5liQp4JDkFvF4JOw5ezv/Y509YytX6dEC7 -5arHHa/mu8BJmZd1OyXkl5f7+ZBEtfAV+tQAcSPs/PB7L7hCJTcNJ7sYm9FUH6KkyGiKetqqM7xZ -itjiz3h8V+D6SrBnRskO0rKEF4FzjQgI/wUoWQhaFw8D/zE1mFeoO+xHFvhVwV4Uqkc00wogJbc= +rYCyTiDI3qJ7XD1IfzLiJcnUO6hEToJYHH/WwCYXuwWULHZL/utADNVh2dB0zN/Rzm5ONy9qK9Ik +560sE00tZ1XusU9C4o8B/WGvP2yEDIstF4E1ExwhIO8Y9sDgXpqCZfG/iw7hZYsZNJuzTnArUnSu +TK/Eubg8tbKolqVlx9GJ2/LXgbZsi0ZiKmEuY7T1IWboU5xMjfBuGEmh2pe838X4VfyhHanmV3S9 +jvthQJ3BR4vZW66UM20/ZWgKw32baYLKbq9br0lXsfnoEPDXDjtb0lOYjy9osa0dKLRF5++Owg2y +Mtd9RcmI0b8bGdfU8Z176sVXIp53RXlyMgjyewd4ycwWrz+VbIbR0c9AL8ZPHAwBpj8EHh/0IPPI +CqoEnYChJqWZaUQPzIdS7a+6rXbCllGXyyT3RZjgIiY+PCIp7ZMvcOArfOFzqOTMPOptF0JKUIoC +v+dzrrzHTA7duu9g+CT5Ag0WKLR0g+Izq3zyQa6YvOAdTFgUaPzd3W7NWP6N+YNeCc8jzGpCdFHY +1vvDHdNuKVNjSlUtXU5jjJglH2qgnct5SCav76lCKmQBF5PNznwp8R/mb5amIGBOzfRlB9ZN/fSL +XBM66Z5ObCDViMAliO4RBzoVnSv0y2SwpW+phqrSOzFTm+tDZE63oNh802yf+9/PHcIe48nMuhk= \ diff --git a/tests/load/driver.cxx b/tests/load/driver.cxx index 7012660..4f075aa 100644 --- a/tests/load/driver.cxx +++ b/tests/load/driver.cxx @@ -416,7 +416,7 @@ test_pkg_repos (const cstrings& loader_args, assert (fpv2->summary == "The Foo library"); assert (fpv2->tags == strings ({"c++", "foo"})); assert (!fpv2->description); - assert (fpv2->url && *fpv2->url == "http://www.example.com/foo/"); + assert (fpv2->url && fpv2->url->string () == "http://www.example.com/foo/"); assert (!fpv2->package_url); assert (fpv2->email && *fpv2->email == "foo-users@example.com"); assert (!fpv2->package_email); @@ -460,7 +460,7 @@ test_pkg_repos (const cstrings& loader_args, assert (fpv2a->summary == "The Foo library"); assert (fpv2a->tags == strings ({"c++", "foo"})); assert (!fpv2a->description); - assert (fpv2a->url && *fpv2a->url == "http://www.example.com/foo/"); + assert (fpv2a->url && fpv2a->url->string () == "ftp://www.example.com/foo/"); assert (!fpv2a->package_url); assert (fpv2a->email && *fpv2a->email == "foo-users@example.com"); assert (!fpv2a->package_email); @@ -509,7 +509,7 @@ test_pkg_repos (const cstrings& loader_args, assert (check_location (fpv2a)); assert (fpv2a->sha256sum && *fpv2a->sha256sum == - "e769cc99fd58a433beb817882cbf9dc04ce0872fbe3f2d9b43d9f627e67a85ea"); + "f5d3e9e6e8f9621a638b1375d31f0eb50e6279d8066170b25da21e84198cfd82"); // libfoo-1.2.3-4 // @@ -520,7 +520,7 @@ test_pkg_repos (const cstrings& loader_args, assert (fpv3->summary == "The Foo library"); assert (fpv3->tags == strings ({"c++", "foo"})); assert (!fpv3->description); - assert (fpv3->url && *fpv3->url == "http://www.example.com/foo/"); + assert (fpv3->url && fpv3->url->string () == "http://www.example.com/foo/"); assert (!fpv3->package_url); assert (fpv3->email && *fpv3->email == "foo-users@example.com"); assert (!fpv3->package_email); @@ -556,7 +556,7 @@ test_pkg_repos (const cstrings& loader_args, assert (fpv4->summary == "The Foo Library"); assert (fpv4->tags == strings ({"c++", "foo"})); assert (*fpv4->description == "Very good foo library."); - assert (fpv4->url && *fpv4->url == "http://www.example.com/foo/"); + assert (fpv4->url && fpv4->url->string () == "http://www.example.com/foo/"); assert (!fpv4->package_url); assert (fpv4->email && *fpv4->email == "foo-users@example.com"); assert (!fpv4->package_email); @@ -626,7 +626,7 @@ test_pkg_repos (const cstrings& loader_args, "pull", "streaming", "modern"})); assert (!xpv->description); assert (xpv->url && - *xpv->url == "http://www.codesynthesis.com/projects/libstudxml/"); + xpv->url->string () == "http://www.codesynthesis.com/projects/libstudxml/"); assert (!xpv->package_url); assert (xpv->email && *xpv->email == email ("studxml-users@example.com", "Public mailing list, posts by non-members " @@ -686,18 +686,18 @@ test_pkg_repos (const cstrings& loader_args, "~~mathlab~~ **MATLAB**.\n\nUseful for conversion of research " "code into production environments."); - assert (fpv5->url && *fpv5->url == "http://www.example.com/foo/"); + assert (fpv5->url && fpv5->url->string () == "http://www.example.com/foo/"); - assert (fpv5->doc_url && *fpv5->doc_url == + assert (fpv5->doc_url && fpv5->doc_url->string () == "http://www.example.org/projects/libfoo/man.xhtml" && fpv5->doc_url->comment == "Documentation page."); - assert (fpv5->src_url && *fpv5->src_url == + assert (fpv5->src_url && fpv5->src_url->string () == "http://scm.example.com/?p=odb/libodb.git;a=tree" && fpv5->src_url->comment == "Source tree url."); assert (fpv5->package_url && - *fpv5->package_url == "http://www.example.com/foo/pack"); + fpv5->package_url->string () == "http://www.example.com/foo/pack"); assert (fpv5->email && *fpv5->email == "foo-users@example.com"); assert (fpv5->package_email && *fpv5->package_email == "pack@example.com"); @@ -798,7 +798,7 @@ test_pkg_repos (const cstrings& loader_args, assert (epv->tags == strings ({"mathlab", "c++", "exponent"})); assert (epv->description && *epv->description == "The exponent math function."); - assert (epv->url && *epv->url == "http://exp.example.com"); + assert (epv->url && epv->url->string () == "http://exp.example.com"); assert (!epv->package_url); assert (epv->email && *epv->email == email ("users@exp.example.com")); assert (!epv->package_email); -- cgit v1.1