diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-10-03 18:43:20 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-10-03 18:43:20 +0100 |
commit | af55d929088e25204b4626486c4e19070f9cefdd (patch) | |
tree | 186edd3199b1fb2a86cdf8106d152e7be0f71d21 | |
parent | Template PqArray (diff) | |
download | gentoobrowse-api-af55d929088e25204b4626486c4e19070f9cefdd.tar.bz2 gentoobrowse-api-af55d929088e25204b4626486c4e19070f9cefdd.tar.xz gentoobrowse-api-af55d929088e25204b4626486c4e19070f9cefdd.zip |
Add methods for getting dependencies and masks
-rw-r--r-- | gentoobrowse-api/api/portage.ice | 4 | ||||
-rw-r--r-- | gentoobrowse-api/domain/converters.cpp | 2 | ||||
-rw-r--r-- | gentoobrowse-api/domain/extended-models.ice | 11 | ||||
-rw-r--r-- | gentoobrowse-api/domain/portage-models.ice | 13 | ||||
-rw-r--r-- | gentoobrowse-api/service/portageimpl.cpp | 28 | ||||
-rw-r--r-- | gentoobrowse-api/service/portageimpl.h | 4 | ||||
-rw-r--r-- | gentoobrowse-api/service/sql/portage/getPackageDependencies.sql | 6 | ||||
-rw-r--r-- | gentoobrowse-api/service/sql/portage/getPackageMasks.sql | 7 | ||||
-rw-r--r-- | gentoobrowse-api/service/sql/portage/getPackageRuntimeDependencies.sql | 7 | ||||
-rw-r--r-- | gentoobrowse-api/service/sql/portage/getPackagesDepending.sql | 11 | ||||
-rw-r--r-- | gentoobrowse-api/unittests/fixtures/masksets.dat | 2 | ||||
-rw-r--r-- | gentoobrowse-api/unittests/testPortage.cpp | 45 |
12 files changed, 139 insertions, 1 deletions
diff --git a/gentoobrowse-api/api/portage.ice b/gentoobrowse-api/api/portage.ice index aed2293..98b39fe 100644 --- a/gentoobrowse-api/api/portage.ice +++ b/gentoobrowse-api/api/portage.ice @@ -24,6 +24,10 @@ module Gentoo { idempotent Packages getPackagesWithRecentAdditions(int syncs); idempotent Categories getCategoriesWithRecentAdditions(int syncs); idempotent Packages getTopTrackedPackages(int n); + idempotent PackageDependencyPackages getPackageDependencies(int id); + idempotent PackageDependencyPackages getPackageRuntimeDependencies(int id); + idempotent PackageDependencyPackages getPackagesDepending(int id); + idempotent PackageMasks getPackageMasks(int id); idempotent Bug getBug(int id) throws Slicer::NoRowsReturned; idempotent Bugs getPackageBugs(int packageId); diff --git a/gentoobrowse-api/domain/converters.cpp b/gentoobrowse-api/domain/converters.cpp index 6cedbcd..33a479f 100644 --- a/gentoobrowse-api/domain/converters.cpp +++ b/gentoobrowse-api/domain/converters.cpp @@ -64,6 +64,8 @@ namespace Slicer { s->get("{" + boost::algorithm::join(l2, ",") + "}"); } + template class PqArray<Ice::Int>; + ::Gentoo::StringList unpackPqTextArray(const std::string & s) { diff --git a/gentoobrowse-api/domain/extended-models.ice b/gentoobrowse-api/domain/extended-models.ice index fabf0f3..de9e514 100644 --- a/gentoobrowse-api/domain/extended-models.ice +++ b/gentoobrowse-api/domain/extended-models.ice @@ -23,11 +23,22 @@ module Gentoo { StringList archs; }; + class PackageDependencyPackage extends Package { + IntList ebuildids; + bool block; + }; + + class PackageMask extends Mask { + IntList ebuildids; + }; + sequence<SearchResultPackage> SearchResultPackages; sequence<SearchResultBug> SearchResultBugs; sequence<OverviewCategory> OverviewCategories; sequence<EbuildDetail> EbuildDetails; dictionary<string, OverviewCategories> OverviewCategoriesBySuper; + sequence<PackageDependencyPackage> PackageDependencyPackages; + sequence<PackageMask> PackageMasks; }; #endif diff --git a/gentoobrowse-api/domain/portage-models.ice b/gentoobrowse-api/domain/portage-models.ice index 28083e8..42eb0c0 100644 --- a/gentoobrowse-api/domain/portage-models.ice +++ b/gentoobrowse-api/domain/portage-models.ice @@ -7,6 +7,8 @@ module Gentoo { sequence<byte> Image; [ "slicer:custommodelpart:PqArray<std::string>" ] sequence<string> StringList; + [ "slicer:custommodelpart:PqArray<Ice::Int>" ] + sequence<int> IntList; class Category { ["slicer:db:pkey"] @@ -89,6 +91,16 @@ module Gentoo { StringList use; }; + class Mask { + int setno; + optional(0) string person; + string email; + [ "slicer:conversion:boost.posix_time.ptime:posixTimeToShortDate:shortDateToPosixTime" ] + string dateadded; + string message; + StringList atomspec; + }; + struct Sync { [ "slicer:conversion:boost.posix_time.ptime:boost.posix_time.to_iso_extended_string:boost.posix_time.time_from_string:nodeclare" ] string timestamp; @@ -102,6 +114,7 @@ module Gentoo { sequence<ChangeLogEntry> ChangeLog; sequence<NewsItem> News; sequence<Sync> Syncs; + sequence<Mask> Masks; }; #endif diff --git a/gentoobrowse-api/service/portageimpl.cpp b/gentoobrowse-api/service/portageimpl.cpp index 9854230..689b173 100644 --- a/gentoobrowse-api/service/portageimpl.cpp +++ b/gentoobrowse-api/service/portageimpl.cpp @@ -17,6 +17,10 @@ #include <sql/portage/getPackagesWithRecentAdditions.sql.h> #include <sql/portage/getTopTrackedPackages.sql.h> #include <sql/portage/getRecentAdditions.sql.h> +#include <sql/portage/getPackageDependencies.sql.h> +#include <sql/portage/getPackageRuntimeDependencies.sql.h> +#include <sql/portage/getPackagesDepending.sql.h> +#include <sql/portage/getPackageMasks.sql.h> #include <sql/portage/getSyncs.sql.h> #include <sql/portage/getBug.sql.h> #include <sql/portage/getPackageBugs.sql.h> @@ -152,6 +156,30 @@ Portage::getCategoriesWithRecentAdditions(Ice::Int syncs, const Ice::Current &) return fetchCache<Gentoo::Categories>(sql::portage::getCategoriesWithRecentAdditions, 30, syncs); } +Gentoo::PackageDependencyPackages +Portage::getPackageDependencies(Ice::Int id, const Ice::Current &) +{ + return fetchCache<Gentoo::PackageDependencyPackages>(sql::portage::getPackageDependencies, 30, id); +} + +Gentoo::PackageDependencyPackages +Portage::getPackageRuntimeDependencies(Ice::Int id, const Ice::Current &) +{ + return fetchCache<Gentoo::PackageDependencyPackages>(sql::portage::getPackageRuntimeDependencies, 30, id); +} + +Gentoo::PackageDependencyPackages +Portage::getPackagesDepending(Ice::Int id, const Ice::Current &) +{ + return fetchCache<Gentoo::PackageDependencyPackages>(sql::portage::getPackagesDepending, 30, id); +} + +Gentoo::PackageMasks +Portage::getPackageMasks(Ice::Int id, const Ice::Current &) +{ + return fetchCache<Gentoo::PackageMasks>(sql::portage::getPackageMasks, 30, id); +} + Gentoo::BugPtr Portage::getBug(Ice::Int id, const Ice::Current &) { diff --git a/gentoobrowse-api/service/portageimpl.h b/gentoobrowse-api/service/portageimpl.h index 86608d5..8810068 100644 --- a/gentoobrowse-api/service/portageimpl.h +++ b/gentoobrowse-api/service/portageimpl.h @@ -31,6 +31,10 @@ class DLL_PUBLIC Portage : public Gentoo::Portage, IceTray::AbstractCachingDatab Gentoo::Packages getPackagesWithRecentAdditions(Ice::Int syncs, const Ice::Current &) override; Gentoo::Categories getCategoriesWithRecentAdditions(Ice::Int syncs, const Ice::Current &) override; Gentoo::Packages getTopTrackedPackages(Ice::Int n, const Ice::Current &) override; + Gentoo::PackageDependencyPackages getPackageDependencies(Ice::Int id, const Ice::Current &) override; + Gentoo::PackageDependencyPackages getPackageRuntimeDependencies(Ice::Int id, const Ice::Current &) override; + Gentoo::PackageDependencyPackages getPackagesDepending(Ice::Int id, const Ice::Current &) override; + Gentoo::PackageMasks getPackageMasks(Ice::Int id, const Ice::Current &) override; Gentoo::BugPtr getBug(Ice::Int id, const Ice::Current &) override; Gentoo::Bugs getPackageBugs(Ice::Int packageId, const Ice::Current &) override; diff --git a/gentoobrowse-api/service/sql/portage/getPackageDependencies.sql b/gentoobrowse-api/service/sql/portage/getPackageDependencies.sql new file mode 100644 index 0000000..5a6b6c9 --- /dev/null +++ b/gentoobrowse-api/service/sql/portage/getPackageDependencies.sql @@ -0,0 +1,6 @@ +SELECT p.packageid, p.categoryid, p.name, p.description, p.summary, p.firstseen, p.maintainer, p.maintainername, p.herd, array_agg(e.ebuildid order by e.ebuildid) ebuildids, position('!' in d.op) > 0 block +FROM gentoobrowse.packages p, gentoobrowse.ebuilds e, gentoobrowse.ebuild_deps d +WHERE e.packageid = ? +AND e.ebuildid = d.ebuildid +AND p.packageid = d.packageid +GROUP BY p.packageid, block diff --git a/gentoobrowse-api/service/sql/portage/getPackageMasks.sql b/gentoobrowse-api/service/sql/portage/getPackageMasks.sql new file mode 100644 index 0000000..bc05f4b --- /dev/null +++ b/gentoobrowse-api/service/sql/portage/getPackageMasks.sql @@ -0,0 +1,7 @@ +SELECT ms.setno, ms.person, ms.email, ms.dateadded, ms.message, ms.atomspec, ms.n, ARRAY_AGG(e.ebuildid ORDER BY e.ebuildid) ebuildids +FROM gentoobrowse.ebuild_masks em, gentoobrowse.masksets ms, gentoobrowse.ebuilds e +WHERE em.setno = ms.setno +AND em.ebuildid = e.ebuildid +AND e.packageid = ? +GROUP BY ms.setno +ORDER BY dateadded diff --git a/gentoobrowse-api/service/sql/portage/getPackageRuntimeDependencies.sql b/gentoobrowse-api/service/sql/portage/getPackageRuntimeDependencies.sql new file mode 100644 index 0000000..e74d0d0 --- /dev/null +++ b/gentoobrowse-api/service/sql/portage/getPackageRuntimeDependencies.sql @@ -0,0 +1,7 @@ +SELECT p.packageid, p.categoryid, p.name, p.description, p.summary, p.firstseen, p.maintainer, p.maintainername, p.herd, array_agg(e.ebuildid order by e.ebuildid) ebuildids, position('!' in d.op) > 0 block +FROM gentoobrowse.packages p, gentoobrowse.ebuilds e, gentoobrowse.ebuild_rdeps d +WHERE e.packageid = ? +AND e.ebuildid = d.ebuildid +AND p.packageid = d.packageid +GROUP BY p.packageid, block + diff --git a/gentoobrowse-api/service/sql/portage/getPackagesDepending.sql b/gentoobrowse-api/service/sql/portage/getPackagesDepending.sql new file mode 100644 index 0000000..c86d1f9 --- /dev/null +++ b/gentoobrowse-api/service/sql/portage/getPackagesDepending.sql @@ -0,0 +1,11 @@ +SELECT p.packageid, p.categoryid, p.name, p.description, p.summary, p.firstseen, p.maintainer, p.maintainername, p.herd, array_agg(e.ebuildid order by e.ebuildid) ebuildids, position('!' in d.op) > 0 block +FROM gentoobrowse.packages p, gentoobrowse.ebuilds e, ( + SELECT d.ebuildid, d.packageid, d.op + FROM gentoobrowse.ebuild_rdeps d + UNION ALL + SELECT d.ebuildid, d.packageid, d.op + FROM gentoobrowse.ebuild_deps d) d +WHERE d.packageid = ? +AND e.ebuildid = d.ebuildid +AND p.packageid = e.packageid +GROUP BY p.packageid, block diff --git a/gentoobrowse-api/unittests/fixtures/masksets.dat b/gentoobrowse-api/unittests/fixtures/masksets.dat index d73443e..c523a3a 100644 --- a/gentoobrowse-api/unittests/fixtures/masksets.dat +++ b/gentoobrowse-api/unittests/fixtures/masksets.dat @@ -1,4 +1,4 @@ -3 Robin H. Johnson robbat2@gentoo.org 2006-02-11 zlib interaction is badly broken. See bug #124733. 1 {} +3 Robin H. Johnson robbat2@gentoo.org 2006-02-11 zlib interaction is badly broken. See bug #124733. 1 {<dev-vcs/cvs-1.12.10} 4 Tavis Ormandy taviso@gentoo.org 2006-03-21 masked pending unresolved security issues #125902 1 {} 5 Tavis Ormandy taviso@gentoo.org 2006-03-21 masked pending unresolved security issues #127167 2 {} 6 MATSUU Takuto matsuu@gentoo.org 2007-04-05 to be tested, seems unstable 1 {} diff --git a/gentoobrowse-api/unittests/testPortage.cpp b/gentoobrowse-api/unittests/testPortage.cpp index 263c707..135ae7f 100644 --- a/gentoobrowse-api/unittests/testPortage.cpp +++ b/gentoobrowse-api/unittests/testPortage.cpp @@ -253,6 +253,51 @@ BOOST_AUTO_TEST_CASE( getRecentAdditions ) BOOST_REQUIRE_EQUAL("GPL-2", es.front()->license); } +BOOST_AUTO_TEST_CASE( getPackageDependencies ) +{ + auto d = p->getPackageDependencies(54144); + BOOST_REQUIRE_EQUAL(2, d.size()); + BOOST_REQUIRE_EQUAL("gnupg", d.front()->name); + // This is right... git-9999 requires a version of itself + BOOST_REQUIRE_EQUAL("git", d.back()->name); + BOOST_REQUIRE_EQUAL(4, d.back()->ebuildids.size()); + BOOST_REQUIRE_EQUAL(628953, d.back()->ebuildids.front()); + BOOST_REQUIRE_EQUAL(629007, d.back()->ebuildids.back()); +} + +BOOST_AUTO_TEST_CASE( getPackageRuntimeDependencies ) +{ + auto d = p->getPackageRuntimeDependencies(54144); + BOOST_REQUIRE_EQUAL(3, d.size()); + BOOST_REQUIRE_EQUAL("gnupg", d[0]->name); + BOOST_REQUIRE_EQUAL("cvsps", d[1]->name); + BOOST_REQUIRE_EQUAL("subversion", d[2]->name); +} + +BOOST_AUTO_TEST_CASE( getPackagesDepending ) +{ + auto d = p->getPackagesDepending(55923); + BOOST_REQUIRE_EQUAL(6, d.size()); + BOOST_REQUIRE_EQUAL("statcvs", d.front()->name); + BOOST_REQUIRE_EQUAL("tkcvs", d.back()->name); +} + +BOOST_AUTO_TEST_CASE( getPackageMasks ) +{ + auto ms = p->getPackageMasks(55923); + BOOST_REQUIRE_EQUAL(1, ms.size()); + BOOST_REQUIRE_EQUAL(3, ms.front()->setno); + BOOST_REQUIRE_EQUAL("robbat2@gentoo.org", ms.front()->email); + BOOST_REQUIRE_EQUAL("Robin H. Johnson", ms.front()->person); + BOOST_REQUIRE_EQUAL("2006-02-11", ms.front()->dateadded); + BOOST_REQUIRE_EQUAL("zlib interaction is badly broken. See bug #124733.", ms.front()->message); + BOOST_REQUIRE_EQUAL(1, ms.front()->atomspec.size()); + BOOST_REQUIRE_EQUAL("<dev-vcs/cvs-1.12.10", ms.front()->atomspec.front()); + BOOST_REQUIRE_EQUAL(5, ms.front()->ebuildids.size()); + BOOST_REQUIRE_EQUAL(628951, ms.front()->ebuildids.front()); + BOOST_REQUIRE_EQUAL(629114, ms.front()->ebuildids.back()); +} + BOOST_AUTO_TEST_CASE( getBugMissing ) { BOOST_REQUIRE_THROW(p->getBug(10), Slicer::NoRowsReturned); |