Fix passing architecture when creating database
When adding a new database when reloading the config at runtime the architecture must be passed when creating the database. Otherwise we end up with the new database sharing the internal storage with the x86_64 database which leads to very confusing behavior.
This commit is contained in:
parent
0a536a992a
commit
9f5474e128
|
@ -38,9 +38,10 @@ Database *Config::findDatabaseFromDenotation(std::string_view databaseDenotation
|
|||
/*!
|
||||
* \brief Creates a database with the specified \a name and appends it to the configuration.
|
||||
*/
|
||||
Database *Config::createDatabase(std::string &&name)
|
||||
Database *Config::createDatabase(std::string &&name, std::string &&architecture)
|
||||
{
|
||||
auto *const db = &databases.emplace_back(std::string(name));
|
||||
auto *const db = &databases.emplace_back(std::move(name));
|
||||
db->arch = std::move(architecture);
|
||||
if (storage()) {
|
||||
db->initStorage(*storage());
|
||||
}
|
||||
|
@ -56,11 +57,11 @@ Database *Config::findOrCreateDatabase(std::string &&name, std::string_view arch
|
|||
auto *db = findDatabase(name, architecture);
|
||||
if (db) {
|
||||
db->resetConfiguration(keepLocalPaths);
|
||||
if (!architecture.empty()) {
|
||||
db->arch = architecture;
|
||||
}
|
||||
} else {
|
||||
db = createDatabase(std::move(name));
|
||||
}
|
||||
if (!architecture.empty()) {
|
||||
db->arch = architecture;
|
||||
db = createDatabase(std::move(name), std::string(architecture));
|
||||
}
|
||||
return db;
|
||||
}
|
||||
|
@ -74,11 +75,11 @@ Database *Config::findOrCreateDatabase(std::string_view name, std::string_view a
|
|||
auto *db = findDatabase(name, architecture);
|
||||
if (db) {
|
||||
db->resetConfiguration(keepLocalPaths);
|
||||
if (!architecture.empty()) {
|
||||
db->arch = architecture;
|
||||
}
|
||||
} else {
|
||||
db = createDatabase(std::string(name));
|
||||
}
|
||||
if (!architecture.empty()) {
|
||||
db->arch = architecture;
|
||||
db = createDatabase(std::string(name), std::string(architecture));
|
||||
}
|
||||
return db;
|
||||
}
|
||||
|
|
|
@ -185,7 +185,7 @@ struct LIBPKG_EXPORT Config : public Lockable, public ReflectiveRapidJSON::Binar
|
|||
SignatureLevelConfig signatureLevel;
|
||||
|
||||
private:
|
||||
Database *createDatabase(std::string &&name);
|
||||
Database *createDatabase(std::string &&name, std::string &&architecture);
|
||||
bool addDepsRecursivelyInTopoOrder(std::vector<std::unique_ptr<TopoSortItem>> &allItems, std::vector<TopoSortItem *> &items,
|
||||
std::vector<std::string> &ignored, std::vector<PackageSearchResult> &cycleTracking, const Dependency &dependency, BuildOrderOptions options,
|
||||
bool onlyDependency);
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
#include "./storageprivate.h"
|
||||
|
||||
#include <c++utilities/conversion/stringbuilder.h>
|
||||
#include <c++utilities/io/ansiescapecodes.h>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
using namespace CppUtilities;
|
||||
|
||||
|
@ -289,6 +292,7 @@ DatabaseStorage::DatabaseStorage(const std::shared_ptr<LMDBSafe::MDBEnv> &env, P
|
|||
, requiredLibs(env, argsToString(uniqueDatabaseName, "_librequires"))
|
||||
, m_env(env)
|
||||
{
|
||||
std::cout << EscapeCodes::Phrases::InfoMessage << "Initialized database storage for \"" << uniqueDatabaseName << "\"\n";
|
||||
}
|
||||
|
||||
std::size_t hash_value(const PackageCacheRef &ref)
|
||||
|
|
|
@ -96,11 +96,11 @@ void DataTests::setupPackages()
|
|||
m_pkg3 = std::make_shared<Package>();
|
||||
m_pkg3->name = "foo";
|
||||
m_pkg3->version = "5.7-1";
|
||||
auto *const db1 = m_config.findOrCreateDatabase("db1"sv, std::string_view());
|
||||
auto *const db1 = m_config.findOrCreateDatabase("db1"sv, "x86_64"sv);
|
||||
CPPUNIT_ASSERT_MESSAGE("ID for pkg 1 returned", m_pkgId1 = db1->updatePackage(m_pkg1));
|
||||
CPPUNIT_ASSERT_MESSAGE("ID for pkg 2 returned", m_pkgId2 = db1->updatePackage(m_pkg2));
|
||||
CPPUNIT_ASSERT_EQUAL_MESSAGE("packages added to db 1", 2_st, db1->packageCount());
|
||||
auto *const db2 = m_config.findOrCreateDatabase("db2"sv, std::string_view());
|
||||
auto *const db2 = m_config.findOrCreateDatabase("db2"sv, "x86_64"sv);
|
||||
CPPUNIT_ASSERT_MESSAGE("ID for pkg 3 returned", m_pkgId3 = db2->updatePackage(m_pkg3));
|
||||
CPPUNIT_ASSERT_EQUAL_MESSAGE("package added to db 2", 1_st, db2->packageCount());
|
||||
}
|
||||
|
|
|
@ -302,7 +302,7 @@ void BuildActionsTests::testParsingInfoFromPkgFiles()
|
|||
initStorage();
|
||||
auto &config = m_setup.config;
|
||||
for (const auto dbName : { "foo.db"sv, "bar.db"sv, "baz.db"sv }) {
|
||||
config.findOrCreateDatabase(dbName, std::string_view());
|
||||
config.findOrCreateDatabase(dbName, "x86_64"sv);
|
||||
}
|
||||
|
||||
// init db object
|
||||
|
@ -707,7 +707,7 @@ void BuildActionsTests::testCleanup()
|
|||
// parse db
|
||||
// note: The db actually only contains source-highlight and mingw-w64-harfbuzz
|
||||
initStorage();
|
||||
auto *const miscDb = m_setup.config.findOrCreateDatabase("misc"sv, std::string_view());
|
||||
auto *const miscDb = m_setup.config.findOrCreateDatabase("misc"sv, "x86_64"sv);
|
||||
miscDb->path = repoDir64 / "misc.db";
|
||||
miscDb->localDbDir = miscDb->localPkgDir = repoDir64;
|
||||
miscDb->loadPackagesFromConfiguredPaths();
|
||||
|
|
Loading…
Reference in New Issue