From 8deeb0a82bed626c92392f1c15d408c23007863b Mon Sep 17 00:00:00 2001 From: Martchus Date: Tue, 19 Dec 2023 21:34:18 +0100 Subject: [PATCH] Remove non-forcing package updates This was only used in tests but was otherwise not very useful as we normally need to ensure the persistent database is updated as well. --- libpkg/data/database.cpp | 23 ++--------------------- libpkg/data/database.h | 1 - libpkg/data/storage.cpp | 10 +++------- libpkg/data/storagegeneric.h | 2 +- libpkg/tests/data.cpp | 8 ++++---- librepomgr/tests/buildactions.cpp | 4 ++-- 6 files changed, 12 insertions(+), 36 deletions(-) diff --git a/libpkg/data/database.cpp b/libpkg/data/database.cpp index 66d47f2..bf2f143 100644 --- a/libpkg/data/database.cpp +++ b/libpkg/data/database.cpp @@ -510,26 +510,7 @@ StorageID Database::updatePackage(const std::shared_ptr &package) } const auto lock = std::unique_lock(m_storage->updateMutex); auto txn = m_storage->packages.getRWTransaction(); - const auto res = m_storage->packageCache.store(*m_storage, txn, package, false); - if (!res.updated) { - return res.id; - } - if (res.oldEntry) { - removePackageDependencies(*m_storage, txn.getTransactionHandle(), res.id, res.oldEntry); - } - addPackageDependencies(*m_storage, txn.getTransactionHandle(), res.id, package); - txn.commit(); - return res.id; -} - -StorageID Database::forceUpdatePackage(const std::shared_ptr &package) -{ - if (package->name.empty()) { - return 0; - } - const auto lock = std::unique_lock(m_storage->updateMutex); - auto txn = m_storage->packages.getRWTransaction(); - const auto res = m_storage->packageCache.store(*m_storage, txn, package, true); + const auto res = m_storage->packageCache.store(*m_storage, txn, package); if (res.oldEntry) { removePackageDependencies(*m_storage, txn.getTransactionHandle(), res.id, res.oldEntry); } @@ -913,7 +894,7 @@ PackageSpec LibPkg::PackageUpdater::findPackageWithID(const std::string &package StorageID PackageUpdater::update(const std::shared_ptr &package) { const auto &storage = m_database.m_storage; - const auto res = storage->packageCache.store(*m_database.m_storage, m_d->packagesTxn, package, true); + const auto res = storage->packageCache.store(*m_database.m_storage, m_d->packagesTxn, package); m_d->update(res, package); return res.id; } diff --git a/libpkg/data/database.h b/libpkg/data/database.h index ba85cf0..fa74eb3 100644 --- a/libpkg/data/database.h +++ b/libpkg/data/database.h @@ -187,7 +187,6 @@ struct LIBPKG_EXPORT Database : public ReflectiveRapidJSON::JsonSerializable &package); - StorageID forceUpdatePackage(const std::shared_ptr &package); std::unordered_map detectUnresolvedPackages(Config &config, const std::vector> &newPackages, const DependencySet &removedPackages, const std::unordered_set &depsToIgnore = std::unordered_set(), diff --git a/libpkg/data/storage.cpp b/libpkg/data/storage.cpp index 23e7cc6..ab18e6e 100644 --- a/libpkg/data/storage.cpp +++ b/libpkg/data/storage.cpp @@ -130,8 +130,7 @@ auto StorageCache::retrieve(Storage & } template -auto StorageCache::store(Storage &storage, RWTxn &txn, const std::shared_ptr &entry, bool force) - -> StoreResult +auto StorageCache::store(Storage &storage, RWTxn &txn, const std::shared_ptr &entry) -> StoreResult { // check for package in cache using CacheEntry = typename Entries::StorageEntry; @@ -144,13 +143,10 @@ auto StorageCache::store(Storage &sto auto lock = std::unique_lock(m_mutex); auto *cacheEntry = m_entries.find(ref); if (cacheEntry) { - if (cacheEntry->entry == entry && !force) { - // do nothing if cached package is the same as specified one - return res; - } // retain certain information obtained from package contents if this is actually the same package as before res.id = cacheEntry->id; - entry->addDepsAndProvidesFromOtherPackage(*(res.oldEntry = cacheEntry->entry)); + res.oldEntry = cacheEntry->entry; + entry->addDepsAndProvidesFromOtherPackage(*res.oldEntry); } lock.unlock(); // check for package in storage diff --git a/libpkg/data/storagegeneric.h b/libpkg/data/storagegeneric.h index 0bc658f..756ff01 100644 --- a/libpkg/data/storagegeneric.h +++ b/libpkg/data/storagegeneric.h @@ -151,7 +151,7 @@ template SpecType retrieve(Storage &storage, StorageID storageID); SpecType retrieve(Storage &storage, RWTxn *, const std::string &entryName); SpecType retrieve(Storage &storage, const std::string &entryName); - StoreResult store(Storage &storage, RWTxn &txn, const std::shared_ptr &entry, bool force); + StoreResult store(Storage &storage, RWTxn &txn, const std::shared_ptr &entry); bool invalidate(Storage &storage, const std::string &entryName); bool invalidateCacheOnly(Storage &storage, const std::string &entryName); void clear(Storage &storage); diff --git a/libpkg/tests/data.cpp b/libpkg/tests/data.cpp index 9fb0dd8..5769b67 100644 --- a/libpkg/tests/data.cpp +++ b/libpkg/tests/data.cpp @@ -326,8 +326,8 @@ void DataTests::testComputingBuildOrder() tar->version = "5.6-6"; tar->dependencies.emplace_back("foo"); m_pkg2->dependencies.emplace_back("tar"); // let bar depend on tar - db.forceUpdatePackage(tar); - db.forceUpdatePackage(m_pkg2); + db.updatePackage(tar); + db.updatePackage(m_pkg2); // fail due to cycle res = m_config.computeBuildOrder({ "foo", "bar", "tar" }, BuildOrderOptions::None); @@ -354,8 +354,8 @@ void DataTests::testComputingBuildOrder() tar->packageInfo = std::make_optional(); tar->dependencies.clear(); tar->dependencies.emplace_back("bar"); - db.forceUpdatePackage(tar); - db.forceUpdatePackage(m_pkg2); + db.updatePackage(tar); + db.updatePackage(m_pkg2); res = m_config.computeBuildOrder({ "foo" }, BuildOrderOptions::None); CPPUNIT_ASSERT_EQUAL(true, res.success); CPPUNIT_ASSERT_EQUAL(0_st, res.cycle.size()); diff --git a/librepomgr/tests/buildactions.cpp b/librepomgr/tests/buildactions.cpp index 8425b70..9326607 100644 --- a/librepomgr/tests/buildactions.cpp +++ b/librepomgr/tests/buildactions.cpp @@ -602,13 +602,13 @@ void BuildActionsTests::testConductingBuild() CPPUNIT_ASSERT_MESSAGE("boost-libs package present", boostLibsPackage); boostLibsPackage->libprovides = { "elf-x86_64::libboost_regex.so.1.72.0" }; boostLibsPackage->libdepends = { "elf-x86_64::libstdc++.so.6" }; - boostDb->forceUpdatePackage(boostLibsPackage); + boostDb->updatePackage(boostLibsPackage); auto sourceHighlightPackage = miscDb->findPackage("source-highlight"); CPPUNIT_ASSERT_MESSAGE("source-highlight package present", sourceHighlightPackage); sourceHighlightPackage->libprovides = { "elf-x86_64::libsource-highlight.so.4" }; sourceHighlightPackage->libdepends = { "elf-x86_64::libboost_regex.so.1.72.0", "elf-x86_64::libsource-highlight.so.4", "elf-x86_64::libstdc++.so.6" }; - miscDb->forceUpdatePackage(sourceHighlightPackage); + miscDb->updatePackage(sourceHighlightPackage); m_setup.printDatabases(); logTestSetup();