summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gentoobrowse-api/service/maintenance/updatesProcessor.cpp74
-rw-r--r--gentoobrowse-api/service/sql/maintenance/updatesMovePackages.sql8
-rw-r--r--gentoobrowse-api/unittests/fixtures/756569aa764177340726dd3d40b41d89b11b20c7/profiles/use.local.desc1
-rw-r--r--gentoobrowse-api/unittests/testMaintenance.cpp12
4 files changed, 37 insertions, 58 deletions
diff --git a/gentoobrowse-api/service/maintenance/updatesProcessor.cpp b/gentoobrowse-api/service/maintenance/updatesProcessor.cpp
index 530c445..77e55e1 100644
--- a/gentoobrowse-api/service/maintenance/updatesProcessor.cpp
+++ b/gentoobrowse-api/service/maintenance/updatesProcessor.cpp
@@ -9,7 +9,7 @@
#include <fstream>
#include <boost/bind.hpp>
#include <sql/maintenance/categoryInsert.sql.h>
-#include <sql/maintenance/updatesMovePackages.sql.h>
+#include <sql/maintenance/packageInsert.sql.h>
#include <sql/maintenance/updatesMoveUserPackages.sql.h>
#include <sql/portage/findPackage.sql.h>
#include <boost/algorithm/string/predicate.hpp>
@@ -33,9 +33,9 @@ namespace Gentoo {
public:
UpdatesPatch(DB::Connection * db) :
categoryInsert(sql::maintenance::categoryInsert.modify(db)),
+ packageInsert(sql::maintenance::packageInsert.modify(db)),
findPackage(sql::portage::findPackage.select(db)),
- movePackages(sql::maintenance::updatesMovePackages.modify(db)),
- moveUserPackages(sql::maintenance::updatesMoveUserPackages.modify(db)),
+ updatesMoveUserPackages(sql::maintenance::updatesMoveUserPackages.modify(db)),
changes(nullptr),
updatePacks("updatePack")
{
@@ -63,9 +63,9 @@ namespace Gentoo {
DB::ModifyCommandPtr drop;
DB::ModifyCommandPtr categoryInsert;
+ DB::ModifyCommandPtr packageInsert;
DB::SelectCommandPtr findPackage;
- DB::ModifyCommandPtr movePackages;
- DB::ModifyCommandPtr moveUserPackages;
+ DB::ModifyCommandPtr updatesMoveUserPackages;
ChangeSet * changes;
Utils::EntityWhereFilter<std::string> updatePacks;
@@ -73,51 +73,37 @@ namespace Gentoo {
move(DB::SelectCommandPtr s)
{
s->forEachRow<std::string, std::string, std::string, std::string, std::string>([this](auto catfrom, auto catto, auto namefrom, auto nameto, auto) {
- findPackage->bindParamS(0, catto);
- findPackage->bindParamS(1, nameto);
- if (findPackage->fetch()) { // Does target already exist?
- // Merge
- moveUserPackages->bindParamS(0, catfrom);
- moveUserPackages->bindParamS(1, namefrom);
- moveUserPackages->bindParamS(2, catto);
- moveUserPackages->bindParamS(3, nameto);
- moveUserPackages->execute();
- }
- else {
- // Move
+ if (this->exists(catfrom, namefrom) && !this->exists(catto, nameto)) { // Does target already exist?
+ // Create category
categoryInsert->bindParamS(0, catto);
categoryInsert->bindParamS(1, catto);
categoryInsert->execute();
- movePackages->bindParamS(0, nameto);
- movePackages->bindParamS(1, namefrom);
- movePackages->bindParamS(2, catfrom);
- movePackages->bindParamS(3, catto);
- movePackages->execute();
- // Move and/or merge file list entries
- for(auto changei = changes->begin(); changei != changes->end();) {
- auto & pp = changei->second.pathParts;
- if (pp.size() == 4 && pp[0] == "metadata" && pp[1] == "md5-cache" && pp[2] == catfrom && boost::algorithm::starts_with(pp[3], namefrom + "-")) {
- auto cd = changei->second;
- cd.pathParts[2] = catto;
- cd.pathParts[3] = nameto + cd.pathParts[3].substr(namefrom.length());
- auto path = boost::algorithm::join(cd.pathParts, "/");
- auto target = changes->find(path);
- if (target == changes->end()) {
- changes->insert({ path, cd });
- }
- else if (cd.changeType == GIT_DELTA_DELETED && target->second.changeType == GIT_DELTA_ADDED) {
- target->second.changeType = GIT_DELTA_MODIFIED;
- }
- changei = changes->erase(changei);
- }
- else {
- changei++;
- }
- }
+ // Create package
+ packageInsert->bindParamS(0, nameto);
+ packageInsert->bindParamS(1, "Created by package move");
+ packageInsert->bindParamS(2, nameto);
+ packageInsert->bindParamS(3, catto);
+ packageInsert->execute();
}
- while (findPackage->fetch()) ;
+ updatesMoveUserPackages->bindParamS(0, catfrom);
+ updatesMoveUserPackages->bindParamS(1, namefrom);
+ updatesMoveUserPackages->bindParamS(2, catto);
+ updatesMoveUserPackages->bindParamS(3, nameto);
+ updatesMoveUserPackages->execute();
});
}
+
+ bool
+ exists(const std::string & cat, const std::string & pkg)
+ {
+ bool found = false;
+ findPackage->bindParamS(0, cat);
+ findPackage->bindParamS(1, pkg);
+ while (findPackage->fetch()) {
+ found = true;
+ }
+ return found;
+ }
};
void
diff --git a/gentoobrowse-api/service/sql/maintenance/updatesMovePackages.sql b/gentoobrowse-api/service/sql/maintenance/updatesMovePackages.sql
deleted file mode 100644
index 1dfe419..0000000
--- a/gentoobrowse-api/service/sql/maintenance/updatesMovePackages.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-UPDATE gentoobrowse.packages p SET
- name = ?,
- categoryid = cn.categoryid
-FROM gentoobrowse.categories co, gentoobrowse.categories cn
-WHERE p.name = ?
-AND p.categoryid = co.categoryid
-AND co.name = ?
-AND cn.name = ?
diff --git a/gentoobrowse-api/unittests/fixtures/756569aa764177340726dd3d40b41d89b11b20c7/profiles/use.local.desc b/gentoobrowse-api/unittests/fixtures/756569aa764177340726dd3d40b41d89b11b20c7/profiles/use.local.desc
index 0240b4d..aea3813 100644
--- a/gentoobrowse-api/unittests/fixtures/756569aa764177340726dd3d40b41d89b11b20c7/profiles/use.local.desc
+++ b/gentoobrowse-api/unittests/fixtures/756569aa764177340726dd3d40b41d89b11b20c7/profiles/use.local.desc
@@ -1,6 +1,7 @@
# This file is deprecated as per GLEP 56 in favor of metadata.xml.
# Please add your descriptions to your package's metadata.xml ONLY.
# * generated automatically using pmaint *
+# Changed size with this line
app-accessibility/brltty:api - build brltty's application program interface
app-accessibility/brltty:beeper - support the console tone generator
diff --git a/gentoobrowse-api/unittests/testMaintenance.cpp b/gentoobrowse-api/unittests/testMaintenance.cpp
index 2bdba64..ab9786d 100644
--- a/gentoobrowse-api/unittests/testMaintenance.cpp
+++ b/gentoobrowse-api/unittests/testMaintenance.cpp
@@ -277,16 +277,16 @@ BOOST_AUTO_TEST_CASE( testRefreshGitRepository )
SQL_REQUIRE_EQUAL(R"SQL(SELECT COUNT(*) FROM gentoobrowse.categories c, gentoobrowse.packages p
WHERE c.categoryid = p.categoryid AND p.name = 'libkgapi' AND c.name='net-libs')SQL", int64_t, 0);
}
- BOOST_TEST_CONTEXT("And it maintained its original packageId, but changed categoryId") {
+ BOOST_TEST_CONTEXT("And it was created new in the right category") {
SQL_REQUIRE_EQUAL(R"SQL(SELECT p.packageid FROM gentoobrowse.categories c, gentoobrowse.packages p
- WHERE c.categoryid = p.categoryid AND p.name = 'libkgapi' AND c.name='kde-apps')SQL", int64_t, 9);
+ WHERE c.categoryid = p.categoryid AND p.name = 'libkgapi' AND c.name='kde-apps')SQL", int64_t, 28);
SQL_REQUIRE_EQUAL(R"SQL(SELECT p.categoryid FROM gentoobrowse.categories c, gentoobrowse.packages p
WHERE c.categoryid = p.categoryid AND p.name = 'libkgapi' AND c.name='kde-apps')SQL", int64_t, 8);
}
- BOOST_TEST_CONTEXT("Original ebuilds in moved package were not deleted and replaced") {
- SQL_REQUIRE_EQUAL(R"SQL(SELECT COUNT(*) FROM gentoobrowse.ebuilds e WHERE e.packageid = 9)SQL", int64_t, 2);
- SQL_REQUIRE_EQUAL(R"SQL(SELECT COUNT(*) FROM gentoobrowse.ebuilds e WHERE e.ebuildid in (12, 13))SQL", int64_t, 2);
- SQL_REQUIRE_EQUAL(R"SQL(SELECT MIN(e.packageid) FROM gentoobrowse.ebuilds e WHERE e.ebuildid in (12, 13))SQL", int64_t, 9);
+ BOOST_TEST_CONTEXT("Original ebuilds in moved package were deleted") {
+ SQL_REQUIRE_EQUAL(R"SQL(SELECT COUNT(*) FROM gentoobrowse.ebuilds e WHERE e.packageid = 9)SQL", int64_t, 0);
+ SQL_REQUIRE_EQUAL(R"SQL(SELECT COUNT(*) FROM gentoobrowse.ebuilds e WHERE e.packageid = 28)SQL", int64_t, 2);
+ SQL_REQUIRE_EQUAL(R"SQL(SELECT COUNT(*) FROM gentoobrowse.ebuilds e WHERE e.ebuildid in (12, 13))SQL", int64_t, 0);
}
}
BOOST_TEST_CONTEXT("Change log was imported correctly") {