Package Kit: Always allocate local repository

Consequently always register it with the solver in Init(). This solves the
problem that it made a difference at which time Init() is called. Init() is
called at the beginning of Install() and Uninstall(), but HaikuDepot was
calling it before that for other reasons. A second call to Init() will exit
early. If local package files were added to the PackageManager instance,
the local repository was created lazily, but because Init() did not run a
second time, the local repository was not registered with the solver. Now
it already is, since it is no longer created on demand, but always.
This commit is contained in:
Stephan Aßmus 2014-10-25 10:58:08 +02:00
parent 448f707cea
commit 9002c94345
1 changed files with 6 additions and 7 deletions

View File

@ -59,7 +59,7 @@ BPackageManager::BPackageManager(BPackageInstallationLocation location,
B_PACKAGE_INSTALLATION_LOCATION_HOME, -3)),
fInstalledRepositories(10),
fOtherRepositories(10, true),
fLocalRepository(NULL),
fLocalRepository(new (std::nothrow) MiscLocalRepository),
fTransactions(5, true),
fInstallationInterface(installationInterface),
fUserInteractionHandler(userInteractionHandler)
@ -87,11 +87,12 @@ BPackageManager::Init(uint32 flags)
if (error != B_OK)
DIE(error, "failed to create solver");
if (fSystemRepository == NULL || fHomeRepository == NULL)
if (fSystemRepository == NULL || fHomeRepository == NULL
|| fLocalRepository == NULL) {
throw std::bad_alloc();
}
if (fLocalRepository != NULL)
BRepositoryBuilder(*fLocalRepository).AddToSolver(fSolver, false);
BRepositoryBuilder(*fLocalRepository).AddToSolver(fSolver, false);
// add installation location repositories
if ((flags & B_ADD_INSTALLED_REPOSITORIES) != 0) {
@ -763,10 +764,8 @@ BPackageManager::_IsLocalPackage(const char* fileName)
BSolverPackage*
BPackageManager::_AddLocalPackage(const char* fileName)
{
// We need a local repository.
if (fLocalRepository == NULL)
fLocalRepository = new MiscLocalRepository;
throw std::bad_alloc();
return fLocalRepository->AddLocalPackage(fileName);
}