diff --git a/libpkg/algo/search.cpp b/libpkg/algo/search.cpp index 145dd41..8688482 100644 --- a/libpkg/algo/search.cpp +++ b/libpkg/algo/search.cpp @@ -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); } /*! diff --git a/libpkg/data/config.h b/libpkg/data/config.h index fe057ec..ba10c9e 100644 --- a/libpkg/data/config.h +++ b/libpkg/data/config.h @@ -136,9 +136,9 @@ struct LIBPKG_EXPORT Config : public Lockable, public ReflectiveRapidJSON::Binar static std::pair 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 parsePackageDenotation(std::string_view packageDenotation); std::vector findPackages(std::string_view packageDenotation, std::size_t limit = std::numeric_limits::max()); std::vector findPackages( diff --git a/libpkg/data/database.cpp b/libpkg/data/database.cpp index f5d5257..9d6d16c 100644 --- a/libpkg/data/database.cpp +++ b/libpkg/data/database.cpp @@ -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; } diff --git a/libpkg/data/database.h b/libpkg/data/database.h index f6f0f8e..e92264a 100644 --- a/libpkg/data/database.h +++ b/libpkg/data/database.h @@ -144,7 +144,7 @@ struct LIBPKG_EXPORT Database : public ReflectiveRapidJSON::JsonSerializabletoBeDiscarded = 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;