From cf3bb0d753b4cf0a90db533152c58af2a568fc9e Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sun, 1 Sep 2013 12:19:09 +0200 Subject: [PATCH] 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. --- .../private/package/manager/PackageManager.h | 24 +++++++----- src/bin/pkgman/PackageManager.cpp | 4 +- src/bin/pkgman/PackageManager.h | 4 +- src/kits/package/manager/PackageManager.cpp | 38 +++++++++++-------- 4 files changed, 42 insertions(+), 28 deletions(-) diff --git a/headers/private/package/manager/PackageManager.h b/headers/private/package/manager/PackageManager.h index d4518b0cde..a69fb3ea09 100644 --- a/headers/private/package/manager/PackageManager.h +++ b/headers/private/package/manager/PackageManager.h @@ -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, diff --git a/src/bin/pkgman/PackageManager.cpp b/src/bin/pkgman/PackageManager.cpp index d0cabbfbab..02c610635d 100644 --- a/src/bin/pkgman/PackageManager.cpp +++ b/src/bin/pkgman/PackageManager.cpp @@ -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; } diff --git a/src/bin/pkgman/PackageManager.h b/src/bin/pkgman/PackageManager.h index ca7846264a..effbf2b8ed 100644 --- a/src/bin/pkgman/PackageManager.h +++ b/src/bin/pkgman/PackageManager.h @@ -59,8 +59,8 @@ private: DecisionProvider fDecisionProvider; JobStateListener fJobStateListener; BContext fContext; - BPackageManager::DaemonClientTransactionHandler - fDaemonClientTransactionHandler; + BPackageManager::ClientInstallationInterface + fClientInstallationInterface; }; diff --git a/src/kits/package/manager/PackageManager.cpp b/src/kits/package/manager/PackageManager.cpp index 66bf9a4e9a..577db36f61 100644 --- a/src/kits/package/manager/PackageManager.cpp +++ b/src/kits/package/manager/PackageManager.cpp @@ -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(),