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:
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,8 +59,8 @@ private:
|
|||||||
DecisionProvider fDecisionProvider;
|
DecisionProvider fDecisionProvider;
|
||||||
JobStateListener fJobStateListener;
|
JobStateListener fJobStateListener;
|
||||||
BContext fContext;
|
BContext fContext;
|
||||||
BPackageManager::DaemonClientTransactionHandler
|
BPackageManager::ClientInstallationInterface
|
||||||
fDaemonClientTransactionHandler;
|
fClientInstallationInterface;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
Reference in New Issue
Block a user