From 20a456e33222ed31008db3c328f1e10c212acf00 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Tue, 12 Jun 2018 13:57:31 +0300 Subject: Make project url and email optional in package manifest --- libbrep/package.cxx | 4 +-- libbrep/package.hxx | 12 ++++----- libbrep/package.xml | 10 +++---- mod/mod-build-result.cxx | 23 ++++++++++------- mod/mod-package-details.cxx | 12 ++++++--- mod/mod-package-version-details.cxx | 20 +++++++++----- tests/load/1/math/libfoo-1.0.tar.gz | Bin 258 -> 219 bytes tests/load/1/math/packages.manifest | 4 +-- tests/load/1/stable/libfoo-1.0.tar.gz | Bin 258 -> 219 bytes tests/load/1/stable/packages.manifest | 4 +-- tests/load/1/stable/signature.manifest | 20 +++++++------- tests/load/driver.cxx | 46 ++++++++++++++++----------------- 12 files changed, 82 insertions(+), 73 deletions(-) diff --git a/libbrep/package.cxx b/libbrep/package.cxx index 7d94422..3e457b2 100644 --- a/libbrep/package.cxx +++ b/libbrep/package.cxx @@ -55,11 +55,11 @@ namespace brep strings tg, optional ds, string ch, - url_type ur, + optional ur, optional du, optional su, optional pu, - email_type em, + optional em, optional pe, optional be, dependencies_type dp, diff --git a/libbrep/package.hxx b/libbrep/package.hxx index b86350e..d403784 100644 --- a/libbrep/package.hxx +++ b/libbrep/package.hxx @@ -19,9 +19,9 @@ // Used by the data migration entries. // -#define LIBBREP_PACKAGE_SCHEMA_VERSION_BASE 6 +#define LIBBREP_PACKAGE_SCHEMA_VERSION_BASE 7 -#pragma db model version(LIBBREP_PACKAGE_SCHEMA_VERSION_BASE, 6, closed) +#pragma db model version(LIBBREP_PACKAGE_SCHEMA_VERSION_BASE, 7, open) namespace brep { @@ -306,11 +306,11 @@ namespace brep strings tags, optional description, string changes, - url_type, + optional, optional doc_url, optional src_url, optional package_url, - email_type, + optional, optional package_email, optional build_email, dependencies_type, @@ -342,11 +342,11 @@ namespace brep strings tags; optional description; string changes; - url_type url; + optional url; optional doc_url; optional src_url; optional package_url; - email_type email; + optional email; optional package_email; optional build_email; dependencies_type dependencies; diff --git a/libbrep/package.xml b/libbrep/package.xml index 9b83bb2..08ecc61 100644 --- a/libbrep/package.xml +++ b/libbrep/package.xml @@ -1,5 +1,5 @@ - + @@ -82,16 +82,16 @@ - - + + - - + + diff --git a/mod/mod-build-result.cxx b/mod/mod-build-result.cxx index 1253d14..7891fe1 100644 --- a/mod/mod-build-result.cxx +++ b/mod/mod-build-result.cxx @@ -379,6 +379,18 @@ handle (request& rq, response&) if (!notify || (build_email && build_email->empty ())) return true; + // If the package build address is not specified, then it is assumed to be + // the same as the package email address, if specified, otherwise as the + // project email address, if specified, otherwise the notification email is + // not sent. + // + const optional& to (build_email ? build_email + : p->package_email + ? p->package_email + : p->email); + if (!to) + return true; + assert (b != nullptr); // Send email to the package owner. @@ -391,15 +403,6 @@ handle (request& rq, response&) b->package_version.string () + '/' + b->configuration + '/' + b->toolchain_name + '-' + b->toolchain_version.string ()); - // If the package build address is not specified, then it is assumed to be - // the same as the package email address, if specified, otherwise as the - // project email address. - // - const string& to (build_email ? *build_email - : p->package_email - ? *p->package_email - : p->email); - // Redirect the diagnostics to webserver error log. // // Note: if using this somewhere else, then need to factor out all this @@ -409,7 +412,7 @@ handle (request& rq, response&) 2, options_->email (), subj, - {to}); + {*to}); if (b->results.empty ()) sm.out << "No operation results available." << endl; diff --git a/mod/mod-package-details.cxx b/mod/mod-package-details.cxx index c56d91a..a348d95 100644 --- a/mod/mod-package-details.cxx +++ b/mod/mod-package-details.cxx @@ -186,8 +186,10 @@ handle (request& rq, response& rs) s << TABLE(CLASS="proplist", ID="package") << TBODY - << TR_LICENSE (licenses) - << TR_URL (pkg->url); + << TR_LICENSE (licenses); + + if (pkg->url) + s << TR_URL (*pkg->url); if (pkg->doc_url) s << TR_URL (*pkg->doc_url, "doc-url"); @@ -195,8 +197,10 @@ handle (request& rq, response& rs) if (pkg->src_url) s << TR_URL (*pkg->src_url, "src-url"); - s << TR_EMAIL (pkg->email) - << TR_TAGS (pkg->tags, root) + if (pkg->email) + s << TR_EMAIL (*pkg->email); + + s << TR_TAGS (pkg->tags, root) << ~TBODY << ~TABLE; } diff --git a/mod/mod-package-version-details.cxx b/mod/mod-package-version-details.cxx index 2134cc6..cef9357 100644 --- a/mod/mod-package-version-details.cxx +++ b/mod/mod-package-version-details.cxx @@ -205,8 +205,12 @@ handle (request& rq, response& rs) << ~TABLE << TABLE(CLASS="proplist", ID="package") - << TBODY - << TR_URL (pkg->url); + << TBODY; + + const auto& u (pkg->url); + + if (u) + s << TR_URL (*u); if (pkg->doc_url) s << TR_URL (*pkg->doc_url, "doc-url"); @@ -215,18 +219,20 @@ handle (request& rq, response& rs) s << TR_URL (*pkg->src_url, "src-url"); const auto& pu (pkg->package_url); - if (pu && *pu != pkg->url) + if (pu && pu != u) s << TR_URL (*pu, "package-url"); - const email& em (pkg->email); - s << TR_EMAIL (em); + const auto& em (pkg->email); + + if (em) + s << TR_EMAIL (*em); const auto& pe (pkg->package_email); - if (pe && *pe != em) + if (pe && pe != em) s << TR_EMAIL (*pe, "package-email"); const auto& be (pkg->build_email); - if (be && ((pe && *be != *pe) || (!pe && *be != em))) + if (be && ((pe && be != pe) || (!pe && be != em))) s << TR_EMAIL (*be, "build-email"); s << TR_TAGS (pkg->tags, root) diff --git a/tests/load/1/math/libfoo-1.0.tar.gz b/tests/load/1/math/libfoo-1.0.tar.gz index 5063f1b..2014fc1 100644 Binary files a/tests/load/1/math/libfoo-1.0.tar.gz and b/tests/load/1/math/libfoo-1.0.tar.gz differ diff --git a/tests/load/1/math/packages.manifest b/tests/load/1/math/packages.manifest index 3c6e325..50db2dc 100644 --- a/tests/load/1/math/packages.manifest +++ b/tests/load/1/math/packages.manifest @@ -21,10 +21,8 @@ name: libfoo version: 1.0 summary: The Foo Library license: MIT -url: http://www.example.com/foo/ -email: foo-users@example.com location: libfoo-1.0.tar.gz -sha256sum: d8ad319b55fdd19ff24cb0fcf9d61101289569f80b8688884389587cfafa1f1e +sha256sum: 0df6d45a3514c6101609bdcfefe7659b5754e505c6cf6b4107141d8217bb981d : name: libfoo version: 1.2.4+1 diff --git a/tests/load/1/stable/libfoo-1.0.tar.gz b/tests/load/1/stable/libfoo-1.0.tar.gz index 5063f1b..2014fc1 100644 Binary files a/tests/load/1/stable/libfoo-1.0.tar.gz and b/tests/load/1/stable/libfoo-1.0.tar.gz differ diff --git a/tests/load/1/stable/packages.manifest b/tests/load/1/stable/packages.manifest index d61b6e2..af3bc32 100644 --- a/tests/load/1/stable/packages.manifest +++ b/tests/load/1/stable/packages.manifest @@ -5,10 +5,8 @@ name: libfoo version: 1.0 summary: The Foo Library license: MIT -url: http://www.example.com/foo/ -email: foo-users@example.com location: libfoo-1.0.tar.gz -sha256sum: d8ad319b55fdd19ff24cb0fcf9d61101289569f80b8688884389587cfafa1f1e +sha256sum: 0df6d45a3514c6101609bdcfefe7659b5754e505c6cf6b4107141d8217bb981d : name: libfoo version: 1.2.2-alpha.1 diff --git a/tests/load/1/stable/signature.manifest b/tests/load/1/stable/signature.manifest index ccd7b66..b0fd9a8 100644 --- a/tests/load/1/stable/signature.manifest +++ b/tests/load/1/stable/signature.manifest @@ -1,13 +1,13 @@ : 1 -sha256sum: 5ecbb89c8e36b9743fe08a3e53ceefe410ac13f9e1549300a58bcf83aa17e30c +sha256sum: 6eaeabb5824a3174435c9dbfdd8eba8a6b3e29133dcd2963f69745a4bb704ed2 signature: \ -X16KuI/I780t/KA34PgPgxWMu6mELo08WQVm0Z8f00KvPR1xKow2NMNatDZmtA4oAgAnkUA0tU0Z -G1qdAxwRwCcAYGwKPDT/3hX2oExbyBpU22pTJyQ9nG67CTdv8FXaCrcEP2ZWX43LfQBqagYwNZYH -ZGKloFNwyT5dAc1z2eMBOqQ8cgT8glGOnk9p39Hb02HGhbeUiO/gLwVr7u76sibXZ9TjuXdiE4SE -uBByHhoQOPPvoBtBilDy5S0XqQAig3Rg1qDpURodXz7fgebbQ2HtjS9MNeU0kmdkKUxWjnvu13Gl -Y1VShELMXSdEVLBMYt+hUgrZnYIDN4DrYsMznsMs5qhmarJEs97Fu3oAhXaiaJaFiBQ2ZfbeTasR -apxe2IFzid70+xMTk5Z9HgGNyorNCPCgd6aia9yDqsdgxI4mw396JQjiwGhftwj9VFXPc95ZtDAu -0koVpL3S88jsIykIkmROo2ZldpKYb6TcegEgAwecnBp8dtZD8j4NnS4mS4qtgEwsiCP7JGCHpiPO -FbB697+Pekha81eMSyD7nQOztn0psXc/Qzy9q8LTDqfv/lOZEmvlKVCWoQaoJ8AaTAOs1jcsoS3H -msluQ6WrzbUkH7k79i1t7nOCRd7JzYYDKLvGx9kXBg0y7tZ6la1g05meDyqq0Udw5jUGqy1OW5I= +bA1yuTMl1f5jtqttXynHoFzNj3qzGftTSyphz2FGNIqVCaOc2NOYDQiKwmmC/atYiRr+mJ1DoTa5 +GHt7esk0sW2ozx8qRazZRmdh+kXveyRhBsGqtOFtpM7au+MOq/X9HaBz3xxc2sd21tw7nwbWSevS +mBtpZyvFNW3xO/ecj5XgfzoyrEiXxw1Uf7SGOso4gErddTZVZeV2XqGrEn4pulOEv1w595yvQ3R5 +9eiPj5eYr7ofFaXCHybIi2LQJOifieqQgkwKrMdck18B8XBp/GR3+uP9paHWQKVoRZGusKaNl12F +TaJkerP+I/WFiu/It0N/6foz57f7OyYAIL086/g7MXb1UwK0MhqkytuoJY2sy8PUUyD4HuNFkSYn +Xm25OqYALoX8e4Gzbr9VkpR+r6O3EO7FmyCPl/ivhjxyrl+Npj9qARwBstu+i3C0jtxRe3V5jVNV +D0q7w5MzU9GhZQpN3lW1nVn68dshLtNo5KYFHZtvLnL11Cis3ax0BE1cEPs37rStmJhQDBUnCC1z +oDPBZRi7EPHEkCyhq1/JBQT3kzbl7Ns24HZZJSUEDSya/vjTxyyoYT7Xry45sYiHCCIZ9mHSArLS +CFJa+27UdqPhIPt9um1sRLCW15djib3lvqqcfAykWyS3ELAduP3vV3CGxyCuSm6He91Y9S9OoIE= \ diff --git a/tests/load/driver.cxx b/tests/load/driver.cxx index 3538863..c86258b 100644 --- a/tests/load/driver.cxx +++ b/tests/load/driver.cxx @@ -43,12 +43,11 @@ check_location (shared_ptr& p) static bool check_external (const package& p) { - return p.summary.empty () && p.tags.empty () && !p.description && - p.url.empty () && !p.package_url && p.email.empty () && - !p.package_email && !p.internal () && p.other_repositories.size () > 0 && - p.priority == priority () && p.changes.empty () && - p.license_alternatives.empty () && p.dependencies.empty () && - p.requirements.empty () && !p.sha256sum; + return p.summary.empty () && p.tags.empty () && !p.description && !p.url && + !p.package_url && !p.email && !p.package_email && !p.internal () && + p.other_repositories.size () > 0 && p.priority == priority () && + p.changes.empty () && p.license_alternatives.empty () && + p.dependencies.empty () && p.requirements.empty () && !p.sha256sum; } namespace bpkg @@ -200,9 +199,9 @@ main (int argc, char* argv[]) assert (fpv1->summary == "The Foo Library"); assert (fpv1->tags.empty ()); assert (!fpv1->description); - assert (fpv1->url == "http://www.example.com/foo/"); + assert (!fpv1->url); assert (!fpv1->package_url); - assert (fpv1->email == "foo-users@example.com"); + assert (!fpv1->email); assert (!fpv1->package_email); assert (fpv1->internal_repository.load () == sr); @@ -223,7 +222,7 @@ main (int argc, char* argv[]) assert (check_location (fpv1)); assert (fpv1->sha256sum && *fpv1->sha256sum == - "d8ad319b55fdd19ff24cb0fcf9d61101289569f80b8688884389587cfafa1f1e"); + "0df6d45a3514c6101609bdcfefe7659b5754e505c6cf6b4107141d8217bb981d"); // libfoo-1.2.2 // @@ -234,9 +233,9 @@ main (int argc, char* argv[]) assert (fpv2->summary == "The Foo library"); assert (fpv2->tags == strings ({"c++", "foo"})); assert (!fpv2->description); - assert (fpv2->url == "http://www.example.com/foo/"); + assert (fpv2->url && *fpv2->url == "http://www.example.com/foo/"); assert (!fpv2->package_url); - assert (fpv2->email == "foo-users@example.com"); + assert (fpv2->email && *fpv2->email == "foo-users@example.com"); assert (!fpv2->package_email); assert (fpv2->internal_repository.load () == sr); @@ -287,9 +286,9 @@ main (int argc, char* argv[]) assert (fpv2a->summary == "The Foo library"); assert (fpv2a->tags == strings ({"c++", "foo"})); assert (!fpv2a->description); - assert (fpv2a->url == "http://www.example.com/foo/"); + assert (fpv2a->url && *fpv2a->url == "http://www.example.com/foo/"); assert (!fpv2a->package_url); - assert (fpv2a->email == "foo-users@example.com"); + assert (fpv2a->email && *fpv2a->email == "foo-users@example.com"); assert (!fpv2a->package_email); assert (fpv2a->internal_repository.load () == sr); @@ -357,9 +356,9 @@ main (int argc, char* argv[]) assert (fpv3->summary == "The Foo library"); assert (fpv3->tags == strings ({"c++", "foo"})); assert (!fpv3->description); - assert (fpv3->url == "http://www.example.com/foo/"); + assert (fpv3->url && *fpv3->url == "http://www.example.com/foo/"); assert (!fpv3->package_url); - assert (fpv3->email == "foo-users@example.com"); + assert (fpv3->email && *fpv3->email == "foo-users@example.com"); assert (!fpv3->package_email); assert (fpv3->internal_repository.load () == sr); @@ -395,9 +394,9 @@ main (int argc, char* argv[]) assert (fpv4->summary == "The Foo Library"); assert (fpv4->tags == strings ({"c++", "foo"})); assert (*fpv4->description == "Very good foo library."); - assert (fpv4->url == "http://www.example.com/foo/"); + assert (fpv4->url && *fpv4->url == "http://www.example.com/foo/"); assert (!fpv4->package_url); - assert (fpv4->email == "foo-users@example.com"); + assert (fpv4->email && *fpv4->email == "foo-users@example.com"); assert (!fpv4->package_email); assert (fpv4->internal_repository.load () == sr); @@ -464,9 +463,10 @@ main (int argc, char* argv[]) assert (xpv->tags == strings ({"c++", "xml", "parser", "serializer", "pull", "streaming", "modern"})); assert (!xpv->description); - assert (xpv->url == "http://www.codesynthesis.com/projects/libstudxml/"); + assert (xpv->url && + *xpv->url == "http://www.codesynthesis.com/projects/libstudxml/"); assert (!xpv->package_url); - assert (xpv->email == + assert (xpv->email && *xpv->email == email ("studxml-users@codesynthesis.com", "Public mailing list, posts by non-members " "are allowed but moderated.")); @@ -519,7 +519,7 @@ main (int argc, char* argv[]) "MATLAB.\n\nUseful for conversion of research code into " "production environments."); - assert (fpv5->url == "http://www.example.com/foo/"); + assert (fpv5->url && *fpv5->url == "http://www.example.com/foo/"); assert (fpv5->doc_url && *fpv5->doc_url == "http://www.example.org/projects/libfoo/man.xhtml" && @@ -531,7 +531,7 @@ main (int argc, char* argv[]) assert (fpv5->package_url && *fpv5->package_url == "http://www.example.com/foo/pack"); - assert (fpv5->email == "foo-users@example.com"); + assert (fpv5->email && *fpv5->email == "foo-users@example.com"); assert (fpv5->package_email && *fpv5->package_email == "pack@example.com"); @@ -634,9 +634,9 @@ main (int argc, char* argv[]) assert (epv->tags == strings ({"c++", "exponent"})); assert (epv->description && *epv->description == "The exponent math function."); - assert (epv->url == "http://www.exp.com"); + assert (epv->url && *epv->url == "http://www.exp.com"); assert (!epv->package_url); - assert (epv->email == email ("users@exp.com")); + assert (epv->email && *epv->email == email ("users@exp.com")); assert (!epv->package_email); assert (epv->build_email && *epv->build_email == "builds@exp.com"); -- cgit v1.1