void
BPackageManager::ClientInstallationInterface::InitInstalledRepository(
	InstalledRepository& repository)
{
	const char* name = repository.InitialName();
	BRepositoryBuilder(repository, name)
		.AddPackages(repository.Location(), name);
}
Beispiel #2
0
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.
	}
}
Beispiel #3
0
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;
			}
		}
	}
}