diff --git a/headers/os/package/solver/SolverRepository.h b/headers/os/package/solver/SolverRepository.h index 2d470d131b..6df25931ef 100644 --- a/headers/os/package/solver/SolverRepository.h +++ b/headers/os/package/solver/SolverRepository.h @@ -16,6 +16,7 @@ namespace BPackageKit { class BPackageInfo; +class BRepositoryCache; class BRepositoryConfig; class BSolverPackage; @@ -42,6 +43,7 @@ public: status_t SetTo(BPackageInstallationLocation location); status_t SetTo(BAllInstallationLocations); status_t SetTo(const BRepositoryConfig& config); + status_t SetTo(const BRepositoryCache& cache); void Unset(); status_t InitCheck(); diff --git a/src/kits/package/solver/SolverRepository.cpp b/src/kits/package/solver/SolverRepository.cpp index 63f3136e03..e813d59273 100644 --- a/src/kits/package/solver/SolverRepository.cpp +++ b/src/kits/package/solver/SolverRepository.cpp @@ -169,6 +169,31 @@ BSolverRepository::SetTo(const BRepositoryConfig& config) } +status_t +BSolverRepository::SetTo(const BRepositoryCache& cache) +{ + Unset(); + + const BRepositoryInfo& info = cache.Info(); + if (info.InitCheck() != B_OK) + return B_BAD_VALUE; + + fName = info.Name(); + fPriority = info.Priority(); + + BRepositoryCache::Iterator it = cache.GetIterator(); + while (const BPackageInfo* packageInfo = it.Next()) { + status_t error = AddPackage(*packageInfo); + if (error != B_OK) { + Unset(); + return error; + } + } + + return B_OK; +} + + void BSolverRepository::Unset() {