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-10 19:14:17 +02:00
parent c138f1f2af
commit cf3bb0d753
4 changed files with 42 additions and 28 deletions
@@ -37,8 +37,8 @@ public:
class RemoteRepository; class RemoteRepository;
class InstalledRepository; class InstalledRepository;
class Transaction; class Transaction;
class TransactionHandler; class InstallationInterface;
class DaemonClientTransactionHandler; class ClientInstallationInterface;
class UserInteractionHandler; class UserInteractionHandler;
class RequestHandler; class RequestHandler;
@@ -122,7 +122,7 @@ protected:
TransactionList fTransactions; TransactionList fTransactions;
// must be set by the derived class // must be set by the derived class
TransactionHandler* fTransactionHandler; InstallationInterface* fInstallationInterface;
RequestHandler* fRequestHandler; RequestHandler* fRequestHandler;
UserInteractionHandler* fUserInteractionHandler; UserInteractionHandler* fUserInteractionHandler;
}; };
@@ -195,9 +195,12 @@ private:
}; };
class BPackageManager::TransactionHandler { class BPackageManager::InstallationInterface {
public: public:
virtual ~TransactionHandler(); virtual ~InstallationInterface();
virtual void InitInstalledRepository(
InstalledRepository& repository) = 0;
virtual status_t PrepareTransaction(Transaction& transaction) virtual status_t PrepareTransaction(Transaction& transaction)
= 0; = 0;
@@ -207,11 +210,14 @@ public:
}; };
class BPackageManager::DaemonClientTransactionHandler class BPackageManager::ClientInstallationInterface
: public TransactionHandler { : public InstallationInterface {
public: public:
DaemonClientTransactionHandler(); ClientInstallationInterface();
virtual ~DaemonClientTransactionHandler(); virtual ~ClientInstallationInterface();
virtual void InitInstalledRepository(
InstalledRepository& repository);
virtual status_t PrepareTransaction(Transaction& transaction); virtual status_t PrepareTransaction(Transaction& transaction);
virtual status_t CommitTransaction(Transaction& transaction, virtual status_t CommitTransaction(Transaction& transaction,
+2 -2
View File
@@ -28,9 +28,9 @@ PackageManager::PackageManager(BPackageInstallationLocation location)
fDecisionProvider(), fDecisionProvider(),
fJobStateListener(JobStateListener::EXIT_ON_ABORT), fJobStateListener(JobStateListener::EXIT_ON_ABORT),
fContext(fDecisionProvider, fJobStateListener), fContext(fDecisionProvider, fJobStateListener),
fDaemonClientTransactionHandler() fClientInstallationInterface()
{ {
fTransactionHandler = &fDaemonClientTransactionHandler; fInstallationInterface = &fClientInstallationInterface;
fRequestHandler = this; fRequestHandler = this;
fUserInteractionHandler = this; fUserInteractionHandler = this;
} }
+2 -2
View File
@@ -59,8 +59,8 @@ private:
DecisionProvider fDecisionProvider; DecisionProvider fDecisionProvider;
JobStateListener fJobStateListener; JobStateListener fJobStateListener;
BContext fContext; BContext fContext;
BPackageManager::DaemonClientTransactionHandler BPackageManager::ClientInstallationInterface
fDaemonClientTransactionHandler; fClientInstallationInterface;
}; };
+23 -15
View File
@@ -49,7 +49,7 @@ BPackageManager::BPackageManager(BPackageInstallationLocation location)
fInstalledRepositories(10), fInstalledRepositories(10),
fOtherRepositories(10, true), fOtherRepositories(10, true),
fTransactions(5, true), fTransactions(5, true),
fTransactionHandler(NULL), fInstallationInterface(NULL),
fRequestHandler(NULL), fRequestHandler(NULL),
fUserInteractionHandler(NULL) fUserInteractionHandler(NULL)
{ {
@@ -399,7 +399,7 @@ BPackageManager::_PreparePackageChanges(
throw std::bad_alloc(); throw std::bad_alloc();
} }
status_t error = fTransactionHandler->PrepareTransaction(*transaction); status_t error = fInstallationInterface->PrepareTransaction(*transaction);
if (error != B_OK) if (error != B_OK)
DIE(error, "failed to create transaction"); DIE(error, "failed to create transaction");
@@ -463,7 +463,7 @@ BPackageManager::_CommitPackageChanges(Transaction& transaction)
// commit the transaction // commit the transaction
BDaemonClient::BCommitTransactionResult transactionResult; BDaemonClient::BCommitTransactionResult transactionResult;
status_t error = fTransactionHandler->CommitTransaction(transaction, status_t error = fInstallationInterface->CommitTransaction(transaction,
transactionResult); transactionResult);
if (error != B_OK) { if (error != B_OK) {
DIE("failed to commit transaction: %s", DIE("failed to commit transaction: %s",
@@ -576,9 +576,9 @@ BPackageManager::_InstallationRepository()
void void
BPackageManager::_AddInstalledRepository(InstalledRepository* repository) BPackageManager::_AddInstalledRepository(InstalledRepository* repository)
{ {
const char* name = repository->InitialName(); fInstallationInterface->InitInstalledRepository(*repository);
BRepositoryBuilder(*repository, name)
.AddPackages(repository->Location(), name) BRepositoryBuilder(*repository)
.AddToSolver(fSolver, repository->Location() == fLocation); .AddToSolver(fSolver, repository->Location() == fLocation);
repository->SetPriority(repository->InitialPriority()); 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 BPackageManager::ClientInstallationInterface::ClientInstallationInterface()
::DaemonClientTransactionHandler()
: :
fDaemonClient() fDaemonClient()
{ {
} }
BPackageManager::DaemonClientTransactionHandler BPackageManager::ClientInstallationInterface::~ClientInstallationInterface()
::~DaemonClientTransactionHandler()
{ {
} }
void
BPackageManager::ClientInstallationInterface::InitInstalledRepository(
InstalledRepository& repository)
{
const char* name = repository.InitialName();
BRepositoryBuilder(repository, name)
.AddPackages(repository.Location(), name);
}
status_t status_t
BPackageManager::DaemonClientTransactionHandler::PrepareTransaction( BPackageManager::ClientInstallationInterface::PrepareTransaction(
Transaction& transaction) Transaction& transaction)
{ {
return fDaemonClient.CreateTransaction(transaction.Repository().Location(), return fDaemonClient.CreateTransaction(transaction.Repository().Location(),
@@ -793,7 +801,7 @@ BPackageManager::DaemonClientTransactionHandler::PrepareTransaction(
status_t status_t
BPackageManager::DaemonClientTransactionHandler::CommitTransaction( BPackageManager::ClientInstallationInterface::CommitTransaction(
Transaction& transaction, BDaemonClient::BCommitTransactionResult& _result) Transaction& transaction, BDaemonClient::BCommitTransactionResult& _result)
{ {
return fDaemonClient.CommitTransaction(transaction.ActivationTransaction(), return fDaemonClient.CommitTransaction(transaction.ActivationTransaction(),