Avoid redundant code in PackageUpdaterPrivate::submit() applying previous commit in all versions

This commit is contained in:
Martchus 2022-02-04 17:57:11 +01:00
parent e5a3b5f311
commit ff8b644221
1 changed files with 18 additions and 22 deletions

View File

@ -630,6 +630,22 @@ void PackageUpdaterPrivate::update(const StorageID packageID, bool removed, cons
}
}
template <typename Dependency, typename MappedType, typename Txn>
static void submitExistingDependency(StorageID id, Dependency &existingDependency, MappedType &affected, Txn &txn)
{
auto &pkgs = existingDependency.relevantPackages;
auto change = false;
for (auto &toRemove : affected.removedPackages) {
change = pkgs.erase(toRemove) || change;
}
auto size = pkgs.size();
pkgs.merge(affected.newPackages);
change = change || pkgs.size() != size;
if (change) {
txn.put(existingDependency, id);
}
}
void PackageUpdaterPrivate::submit(const std::string &dependencyName, AffectedDeps::mapped_type &affected, DependencyStorage::RWTransaction &txn)
{
for (auto [i, end] = txn.equal_range<0>(dependencyName); i != end; ++i) {
@ -637,17 +653,7 @@ void PackageUpdaterPrivate::submit(const std::string &dependencyName, AffectedDe
if (static_cast<const Dependency &>(existingDependency).version != affected.version) {
continue;
}
auto &pkgs = existingDependency.relevantPackages;
auto change = false;
for (auto &toRemove : affected.removedPackages) {
change = pkgs.erase(toRemove) || change;
}
auto size = pkgs.size();
pkgs.merge(affected.newPackages);
change = change || pkgs.size() != size;
if (change) {
txn.put(existingDependency, i.getID());
}
submitExistingDependency(i.getID(), existingDependency, affected, txn);
return;
}
auto newDependency = DatabaseDependency(dependencyName, affected.version, affected.mode);
@ -658,17 +664,7 @@ void PackageUpdaterPrivate::submit(const std::string &dependencyName, AffectedDe
void PackageUpdaterPrivate::submit(const std::string &libraryName, AffectedLibs::mapped_type &affected, LibraryDependencyStorage::RWTransaction &txn)
{
for (auto [i, end] = txn.equal_range<0>(libraryName); i != end; ++i) {
auto &existingDependency = i.value();
auto &pkgs = existingDependency.relevantPackages;
auto size = pkgs.size();
pkgs.merge(affected.newPackages);
auto change = pkgs.size() != size;
for (auto &toRemove : affected.removedPackages) {
change = pkgs.erase(toRemove) || change;
}
if (change) {
txn.put(existingDependency, i.getID());
}
submitExistingDependency(i.getID(), i.value(), affected, txn);
return;
}
auto newDependency = DatabaseLibraryDependency(libraryName);