BPackageManager: Add alternate Install()/Uninstall()/Update()
This commit is contained in:
@@ -77,10 +77,16 @@ public:
|
|||||||
|
|
||||||
void Install(const char* const* packages,
|
void Install(const char* const* packages,
|
||||||
int packageCount);
|
int packageCount);
|
||||||
|
void Install(const BSolverPackageSpecifierList&
|
||||||
|
packages);
|
||||||
void Uninstall(const char* const* packages,
|
void Uninstall(const char* const* packages,
|
||||||
int packageCount);
|
int packageCount);
|
||||||
|
void Uninstall(const BSolverPackageSpecifierList&
|
||||||
|
packages);
|
||||||
void Update(const char* const* packages,
|
void Update(const char* const* packages,
|
||||||
int packageCount);
|
int packageCount);
|
||||||
|
void Update(const BSolverPackageSpecifierList&
|
||||||
|
packages);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
InstalledRepository& InstallationRepository();
|
InstalledRepository& InstallationRepository();
|
||||||
|
|||||||
@@ -123,19 +123,23 @@ BPackageManager::Init(uint32 flags)
|
|||||||
|
|
||||||
void
|
void
|
||||||
BPackageManager::Install(const char* const* packages, int packageCount)
|
BPackageManager::Install(const char* const* packages, int packageCount)
|
||||||
|
{
|
||||||
|
BSolverPackageSpecifierList packagesToInstall;
|
||||||
|
if (!packagesToInstall.AppendSpecifiers(packages, packageCount))
|
||||||
|
throw std::bad_alloc();
|
||||||
|
Install(packagesToInstall);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
BPackageManager::Install(const BSolverPackageSpecifierList& packages)
|
||||||
{
|
{
|
||||||
Init(B_ADD_INSTALLED_REPOSITORIES | B_ADD_REMOTE_REPOSITORIES
|
Init(B_ADD_INSTALLED_REPOSITORIES | B_ADD_REMOTE_REPOSITORIES
|
||||||
| B_REFRESH_REPOSITORIES);
|
| B_REFRESH_REPOSITORIES);
|
||||||
|
|
||||||
// solve
|
// solve
|
||||||
BSolverPackageSpecifierList packagesToInstall;
|
|
||||||
for (int i = 0; i < packageCount; i++) {
|
|
||||||
if (!packagesToInstall.AppendSpecifier(packages[i]))
|
|
||||||
throw std::bad_alloc();
|
|
||||||
}
|
|
||||||
|
|
||||||
const BSolverPackageSpecifier* unmatchedSpecifier;
|
const BSolverPackageSpecifier* unmatchedSpecifier;
|
||||||
status_t error = fSolver->Install(packagesToInstall, &unmatchedSpecifier);
|
status_t error = fSolver->Install(packages, &unmatchedSpecifier);
|
||||||
if (error != B_OK) {
|
if (error != B_OK) {
|
||||||
if (unmatchedSpecifier != NULL) {
|
if (unmatchedSpecifier != NULL) {
|
||||||
DIE(error, "failed to find a match for \"%s\"",
|
DIE(error, "failed to find a match for \"%s\"",
|
||||||
@@ -155,19 +159,23 @@ BPackageManager::Install(const char* const* packages, int packageCount)
|
|||||||
|
|
||||||
void
|
void
|
||||||
BPackageManager::Uninstall(const char* const* packages, int packageCount)
|
BPackageManager::Uninstall(const char* const* packages, int packageCount)
|
||||||
|
{
|
||||||
|
BSolverPackageSpecifierList packagesToUninstall;
|
||||||
|
if (!packagesToUninstall.AppendSpecifiers(packages, packageCount))
|
||||||
|
throw std::bad_alloc();
|
||||||
|
Uninstall(packagesToUninstall);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
BPackageManager::Uninstall(const BSolverPackageSpecifierList& packages)
|
||||||
{
|
{
|
||||||
Init(B_ADD_INSTALLED_REPOSITORIES);
|
Init(B_ADD_INSTALLED_REPOSITORIES);
|
||||||
|
|
||||||
// find the packages that match the specification
|
// find the packages that match the specification
|
||||||
BSolverPackageSpecifierList packagesToUninstall;
|
|
||||||
for (int i = 0; i < packageCount; i++) {
|
|
||||||
if (!packagesToUninstall.AppendSpecifier(packages[i]))
|
|
||||||
throw std::bad_alloc();
|
|
||||||
}
|
|
||||||
|
|
||||||
const BSolverPackageSpecifier* unmatchedSpecifier;
|
const BSolverPackageSpecifier* unmatchedSpecifier;
|
||||||
PackageList foundPackages;
|
PackageList foundPackages;
|
||||||
status_t error = fSolver->FindPackages(packagesToUninstall,
|
status_t error = fSolver->FindPackages(packages,
|
||||||
BSolver::B_FIND_INSTALLED_ONLY, foundPackages, &unmatchedSpecifier);
|
BSolver::B_FIND_INSTALLED_ONLY, foundPackages, &unmatchedSpecifier);
|
||||||
if (error != B_OK) {
|
if (error != B_OK) {
|
||||||
if (unmatchedSpecifier != NULL) {
|
if (unmatchedSpecifier != NULL) {
|
||||||
@@ -243,19 +251,23 @@ BPackageManager::Uninstall(const char* const* packages, int packageCount)
|
|||||||
|
|
||||||
void
|
void
|
||||||
BPackageManager::Update(const char* const* packages, int packageCount)
|
BPackageManager::Update(const char* const* packages, int packageCount)
|
||||||
|
{
|
||||||
|
BSolverPackageSpecifierList packagesToUpdate;
|
||||||
|
if (!packagesToUpdate.AppendSpecifiers(packages, packageCount))
|
||||||
|
throw std::bad_alloc();
|
||||||
|
Update(packagesToUpdate);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
BPackageManager::Update(const BSolverPackageSpecifierList& packages)
|
||||||
{
|
{
|
||||||
Init(B_ADD_INSTALLED_REPOSITORIES | B_ADD_REMOTE_REPOSITORIES
|
Init(B_ADD_INSTALLED_REPOSITORIES | B_ADD_REMOTE_REPOSITORIES
|
||||||
| B_REFRESH_REPOSITORIES);
|
| B_REFRESH_REPOSITORIES);
|
||||||
|
|
||||||
// solve
|
// solve
|
||||||
BSolverPackageSpecifierList packagesToUpdate;
|
|
||||||
for (int i = 0; i < packageCount; i++) {
|
|
||||||
if (!packagesToUpdate.AppendSpecifier(packages[i]))
|
|
||||||
throw std::bad_alloc();
|
|
||||||
}
|
|
||||||
|
|
||||||
const BSolverPackageSpecifier* unmatchedSpecifier;
|
const BSolverPackageSpecifier* unmatchedSpecifier;
|
||||||
status_t error = fSolver->Update(packagesToUpdate, true,
|
status_t error = fSolver->Update(packages, true,
|
||||||
&unmatchedSpecifier);
|
&unmatchedSpecifier);
|
||||||
if (error != B_OK) {
|
if (error != B_OK) {
|
||||||
if (unmatchedSpecifier != NULL) {
|
if (unmatchedSpecifier != NULL) {
|
||||||
|
|||||||
Reference in New Issue
Block a user