BPackageManager: Abstract installed repository initialization

* Rename TransactionHandler -> InstallationInterface and
  DaemonClientTransactionHandler -> ClientInstallationInterface.
* Add InstallationInterface::InitInstalledRepository(). Use in
  _AddInstalledRepository() to get the repository packages instead of
  using the package roster. The ClientInstallationInterface
  implementation does it that way.
This commit is contained in:
Ingo Weinhold 2013-09-01 12:19:09 +02:00
parent c138f1f2af
commit cf3bb0d753
4 changed files with 42 additions and 28 deletions

View File

@ -37,8 +37,8 @@ public:
class RemoteRepository;
class InstalledRepository;
class Transaction;
class TransactionHandler;
class DaemonClientTransactionHandler;
class InstallationInterface;
class ClientInstallationInterface;
class UserInteractionHandler;
class RequestHandler;
@ -122,7 +122,7 @@ protected:
TransactionList fTransactions;
// must be set by the derived class
TransactionHandler* fTransactionHandler;
InstallationInterface* fInstallationInterface;
RequestHandler* fRequestHandler;
UserInteractionHandler* fUserInteractionHandler;
};
@ -195,9 +195,12 @@ private:
};
class BPackageManager::TransactionHandler {
class BPackageManager::InstallationInterface {
public:
virtual ~TransactionHandler();
virtual ~InstallationInterface();
virtual void InitInstalledRepository(
InstalledRepository& repository) = 0;
virtual status_t PrepareTransaction(Transaction& transaction)
= 0;
@ -207,11 +210,14 @@ public:
};
class BPackageManager::DaemonClientTransactionHandler
: public TransactionHandler {
class BPackageManager::ClientInstallationInterface
: public InstallationInterface {
public:
DaemonClientTransactionHandler();
virtual ~DaemonClientTransactionHandler();
ClientInstallationInterface();
virtual ~ClientInstallationInterface();
virtual void InitInstalledRepository(
InstalledRepository& repository);
virtual status_t PrepareTransaction(Transaction& transaction);
virtual status_t CommitTransaction(Transaction& transaction,

View File

@ -28,9 +28,9 @@ PackageManager::PackageManager(BPackageInstallationLocation location)
fDecisionProvider(),
fJobStateListener(JobStateListener::EXIT_ON_ABORT),
fContext(fDecisionProvider, fJobStateListener),
fDaemonClientTransactionHandler()
fClientInstallationInterface()
{
fTransactionHandler = &fDaemonClientTransactionHandler;
fInstallationInterface = &fClientInstallationInterface;
fRequestHandler = this;
fUserInteractionHandler = this;
}

View File

@ -59,8 +59,8 @@ private:
DecisionProvider fDecisionProvider;
JobStateListener fJobStateListener;
BContext fContext;
BPackageManager::DaemonClientTransactionHandler
fDaemonClientTransactionHandler;
BPackageManager::ClientInstallationInterface
fClientInstallationInterface;
};

View File

@ -49,7 +49,7 @@ BPackageManager::BPackageManager(BPackageInstallationLocation location)
fInstalledRepositories(10),
fOtherRepositories(10, true),
fTransactions(5, true),
fTransactionHandler(NULL),
fInstallationInterface(NULL),
fRequestHandler(NULL),
fUserInteractionHandler(NULL)
{
@ -399,7 +399,7 @@ BPackageManager::_PreparePackageChanges(
throw std::bad_alloc();
}
status_t error = fTransactionHandler->PrepareTransaction(*transaction);
status_t error = fInstallationInterface->PrepareTransaction(*transaction);
if (error != B_OK)
DIE(error, "failed to create transaction");
@ -463,7 +463,7 @@ BPackageManager::_CommitPackageChanges(Transaction& transaction)
// commit the transaction
BDaemonClient::BCommitTransactionResult transactionResult;
status_t error = fTransactionHandler->CommitTransaction(transaction,
status_t error = fInstallationInterface->CommitTransaction(transaction,
transactionResult);
if (error != B_OK) {
DIE("failed to commit transaction: %s",
@ -576,9 +576,9 @@ BPackageManager::_InstallationRepository()
void
BPackageManager::_AddInstalledRepository(InstalledRepository* repository)
{
const char* name = repository->InitialName();
BRepositoryBuilder(*repository, name)
.AddPackages(repository->Location(), name)
fInstallationInterface->InitInstalledRepository(*repository);
BRepositoryBuilder(*repository)
.AddToSolver(fSolver, repository->Location() == fLocation);
repository->SetPriority(repository->InitialPriority());
@ -757,33 +757,41 @@ BPackageManager::Transaction::~Transaction()
}
// #pragma mark - TransactionHandler
// #pragma mark - InstallationInterface
BPackageManager::TransactionHandler::~TransactionHandler()
BPackageManager::InstallationInterface::~InstallationInterface()
{
}
// #pragma mark - DaemonClientTransactionHandler
// #pragma mark - ClientInstallationInterface
BPackageManager::DaemonClientTransactionHandler
::DaemonClientTransactionHandler()
BPackageManager::ClientInstallationInterface::ClientInstallationInterface()
:
fDaemonClient()
{
}
BPackageManager::DaemonClientTransactionHandler
::~DaemonClientTransactionHandler()
BPackageManager::ClientInstallationInterface::~ClientInstallationInterface()
{
}
void
BPackageManager::ClientInstallationInterface::InitInstalledRepository(
InstalledRepository& repository)
{
const char* name = repository.InitialName();
BRepositoryBuilder(repository, name)
.AddPackages(repository.Location(), name);
}
status_t
BPackageManager::DaemonClientTransactionHandler::PrepareTransaction(
BPackageManager::ClientInstallationInterface::PrepareTransaction(
Transaction& transaction)
{
return fDaemonClient.CreateTransaction(transaction.Repository().Location(),
@ -793,7 +801,7 @@ BPackageManager::DaemonClientTransactionHandler::PrepareTransaction(
status_t
BPackageManager::DaemonClientTransactionHandler::CommitTransaction(
BPackageManager::ClientInstallationInterface::CommitTransaction(
Transaction& transaction, BDaemonClient::BCommitTransactionResult& _result)
{
return fDaemonClient.CommitTransaction(transaction.ActivationTransaction(),