void BPackageManager::ClientInstallationInterface::InitInstalledRepository( InstalledRepository& repository) { const char* name = repository.InitialName(); BRepositoryBuilder(repository, name) .AddPackages(repository.Location(), name); }
void PackageManager::ResultComputed(InstalledRepository& repository) { // Normalize the result, i.e. remove the packages added by the user which // have been removed again in the problem resolution process, and vice // versa. if (repository.Location() != fVolume->Location()) return; PackageList& packagesToActivate = repository.PackagesToActivate(); PackageList& packagesToDeactivate = repository.PackagesToDeactivate(); for (int32 i = 0; BSolverPackage* package = packagesToDeactivate.ItemAt(i); i++) { if (fPackagesAddedByUser.erase(package) == 0) continue; for (SolverPackageMap::iterator it = fSolverPackages.begin(); it != fSolverPackages.end(); ++it) { if (it->second == package) { fSolverPackages.erase(it); break; } } repository.EnablePackage(package); packagesToDeactivate.RemoveItemAt(i--); packagesToActivate.RemoveItem(package); repository.DeletePackage(package); } for (int32 i = 0; BSolverPackage* package = packagesToActivate.ItemAt(i); i++) { if (fPackagesRemovedByUser.erase(package) == 0) continue; repository.EnablePackage(package); packagesToActivate.RemoveItemAt(i--); packagesToDeactivate.RemoveItem(package); // Note: We keep the package activated, but nonetheless it is gone, // since the user has removed it from the packages directory. So unless // the user moves it back, we won't find it upon next reboot. // TODO: We probable even run into trouble when the user moves in a // replacement afterward. } }
void PackageManager::InitInstalledRepository(InstalledRepository& repository) { const char* name = repository.InitialName(); BRepositoryBuilder repositoryBuilder(repository, name); if (Volume* volume = fRoot->GetVolume(repository.Location())) { for (PackageFileNameHashTable::Iterator it = volume->PackagesByFileNameIterator(); it.HasNext();) { Package* package = it.Next(); if (package->IsActive()) { BSolverPackage* solverPackage; repositoryBuilder.AddPackage(package->Info(), NULL, &solverPackage); fSolverPackages[package] = solverPackage; } } } }