Keep local pkg paths deduced from pacman config

It makes the setup easier and shouldn't hurt otherwise.
This commit is contained in:
Martchus 2022-03-15 00:22:03 +01:00
parent b0234ff02e
commit 11f1849fde
5 changed files with 23 additions and 14 deletions

View File

@ -51,11 +51,11 @@ Database *Config::createDatabase(std::string &&name)
* \brief Returns the database with the specified \a name and \a architecture or creates a new one if it doesn't exist.
* \remarks Resets the database's configuration. You'll end up with a blank database in any case.
*/
Database *Config::findOrCreateDatabase(std::string &&name, std::string_view architecture)
Database *Config::findOrCreateDatabase(std::string &&name, std::string_view architecture, bool keepLocalPaths)
{
auto *db = findDatabase(name, architecture);
if (db) {
db->resetConfiguration();
db->resetConfiguration(keepLocalPaths);
} else {
db = createDatabase(std::move(name));
}
@ -69,11 +69,11 @@ Database *Config::findOrCreateDatabase(std::string &&name, std::string_view arch
* \brief Returns the database with the specified \a name and \a architecture or creates a new one if it doesn't exist.
* \remarks Resets the database's configuration. You'll end up with a blank database in any case.
*/
Database *Config::findOrCreateDatabase(std::string_view name, std::string_view architecture)
Database *Config::findOrCreateDatabase(std::string_view name, std::string_view architecture, bool keepLocalPaths)
{
auto *db = findDatabase(name, architecture);
if (db) {
db->resetConfiguration();
db->resetConfiguration(keepLocalPaths);
} else {
db = createDatabase(std::string(name));
}
@ -88,10 +88,10 @@ Database *Config::findOrCreateDatabase(std::string_view name, std::string_view a
* \remarks Resets the database's configuration. You'll end up with a blank database in any case.
* \sa parseDatabaseDenotation() for the format of \a databaseDenotation
*/
Database *Config::findOrCreateDatabaseFromDenotation(std::string_view databaseDenotation)
Database *Config::findOrCreateDatabaseFromDenotation(std::string_view databaseDenotation, bool keepLocalPaths)
{
const auto dbInfo = parseDatabaseDenotation(databaseDenotation);
return findOrCreateDatabase(dbInfo.first, dbInfo.second);
return findOrCreateDatabase(dbInfo.first, dbInfo.second, keepLocalPaths);
}
/*!

View File

@ -136,9 +136,9 @@ struct LIBPKG_EXPORT Config : public Lockable, public ReflectiveRapidJSON::Binar
static std::pair<std::string_view, std::string_view> parseDatabaseDenotation(std::string_view databaseDenotation);
Database *findDatabase(std::string_view name, std::string_view architecture);
Database *findDatabaseFromDenotation(std::string_view databaseDenotation);
Database *findOrCreateDatabase(std::string &&name, std::string_view architecture);
Database *findOrCreateDatabase(std::string_view name, std::string_view architecture);
Database *findOrCreateDatabaseFromDenotation(std::string_view databaseDenotation);
Database *findOrCreateDatabase(std::string &&name, std::string_view architecture, bool keepLocalPaths = false);
Database *findOrCreateDatabase(std::string_view name, std::string_view architecture, bool keepLocalPaths = false);
Database *findOrCreateDatabaseFromDenotation(std::string_view databaseDenotation, bool keepLocalPaths = false);
static std::tuple<std::string_view, std::string_view, std::string_view> parsePackageDenotation(std::string_view packageDenotation);
std::vector<PackageSearchResult> findPackages(std::string_view packageDenotation, std::size_t limit = std::numeric_limits<std::size_t>::max());
std::vector<PackageSearchResult> findPackages(

View File

@ -81,7 +81,7 @@ void LibPkg::Database::deducePathsFromLocalDirs()
}
}
void Database::resetConfiguration()
void Database::resetConfiguration(bool keepLocalPaths)
{
path.clear();
filesPath.clear();
@ -90,8 +90,10 @@ void Database::resetConfiguration()
signatureLevel = SignatureLevel::Default;
arch = "x86_64";
dependencies.clear();
localPkgDir.clear();
localDbDir.clear();
if (!keepLocalPaths) {
localPkgDir.clear();
localDbDir.clear();
}
syncFromMirror = false;
}

View File

@ -144,7 +144,7 @@ struct LIBPKG_EXPORT Database : public ReflectiveRapidJSON::JsonSerializable<Dat
void initStorage(StorageDistribution &storage);
void deducePathsFromLocalDirs();
void resetConfiguration();
void resetConfiguration(bool keepLocalPaths = false);
void clearPackages();
void loadPackagesFromConfiguredPaths(bool withFiles = false, bool force = false);
void loadPackages(const std::string &databaseData, CppUtilities::DateTime lastModified);

View File

@ -521,6 +521,9 @@ void ServiceSetup::loadConfigFiles(bool doFirstTimeSetup)
config.setPackageCacheLimit(packageCacheLimit);
}
// avoid stale values
config.packageCacheDirs.clear();
// read pacman config
try {
config.loadPacmanConfig(pacmanConfigFilePath.data());
@ -545,7 +548,7 @@ void ServiceSetup::loadConfigFiles(bool doFirstTimeSetup)
continue;
}
// find existing database or create a new one; clear mirrors and other data from existing DBs
auto *const db = config.findOrCreateDatabaseFromDenotation(std::string_view(iniSection.data() + 9, iniSection.size() - 9));
auto *const db = config.findOrCreateDatabaseFromDenotation(std::string_view(iniSection.data() + 9, iniSection.size() - 9), true);
db->toBeDiscarded = false;
dbDefinitions.clear();
dbDefinitions["$repo"] = db->name;
@ -595,6 +598,10 @@ void ServiceSetup::loadConfigFiles(bool doFirstTimeSetup)
// log the most important config values
cerr << Phrases::InfoMessage << "Working directory: " << workingDirectory << Phrases::End;
cerr << Phrases::InfoMessage << "Package cache dirs:" << Phrases::End;
for (const auto &dir : config.packageCacheDirs) {
cerr << Phrases::SubMessage << dir << Phrases::End;
}
cerr << Phrases::InfoMessage << "Build configuration:" << Phrases::End;
cerr << Phrases::SubMessage << "Package cache directory: " << building.packageCacheDir << Phrases::End;
cerr << Phrases::SubMessage << "Package download limit: " << dataSizeToString(building.packageDownloadSizeLimit) << Phrases::End;