HaikuDepot: Init with correct repo flags before performing actions.

Still something not entirely correct with the uninstall case though.
This commit is contained in:
Rene Gollent
2013-09-21 16:58:14 -04:00
parent e550d7b8c5
commit c996b65a89
+19 -1
View File
@@ -77,6 +77,9 @@ public:
virtual status_t Perform()
{
fPackageManager->Init(BPackageManager::B_ADD_INSTALLED_REPOSITORIES
| BPackageManager::B_ADD_REMOTE_REPOSITORIES
| BPackageManager::B_REFRESH_REPOSITORIES);
PackageInfoRef ref(Package());
fPackageManager->SetCurrentActionPackage(ref, true);
const char* packageName = ref->Title().String();
@@ -90,6 +93,7 @@ public:
} catch (BAbortedByUserException ex) {
return B_OK;
} catch (BNothingToDoException ex) {
return B_OK;
} catch (BException ex) {
fprintf(stderr, "Exception occurred while installing package "
"%s: %s\n", packageName, ex.Message().String());
@@ -121,6 +125,7 @@ public:
virtual status_t Perform()
{
fPackageManager->Init(BPackageManager::B_ADD_INSTALLED_REPOSITORIES);
PackageInfoRef ref(Package());
fPackageManager->SetCurrentActionPackage(ref, false);
const char* packageName = ref->Title().String();
@@ -132,7 +137,10 @@ public:
ex.Details().String());
return ex.Error();
} catch (BAbortedByUserException ex) {
return B_OK;
} catch (BNothingToDoException ex) {
return B_OK;
} catch (BException ex) {
fprintf(stderr, "Exception occurred while uninstalling package "
"%s: %s\n", packageName, ex.Message().String());
return B_ERROR;
@@ -197,6 +205,7 @@ PackageManager::GetPackageState(const PackageInfo& package)
PackageActionList
PackageManager::GetPackageActions(PackageInfoRef package)
{
Init(B_ADD_INSTALLED_REPOSITORIES | B_ADD_REMOTE_REPOSITORIES);
PackageActionList actionList;
bool installed = false;
@@ -433,14 +442,23 @@ PackageManager::_AddResults(InstalledRepository& repository,
BSolverPackage*
PackageManager::_GetSolverPackage(PackageInfoRef package)
{
int32 flags = BSolver::B_FIND_IN_NAME;
if (package->State() == ACTIVATED || package->State() == INSTALLED)
flags |= BSolver::B_FIND_INSTALLED_ONLY;
BObjectList<BSolverPackage> packages;
status_t result = Solver()->FindPackages(package->Title(),
BSolver::B_FIND_IN_NAME, packages);
flags, packages);
if (result == B_OK) {
for (int32 i = 0; i < packages.CountItems(); i++) {
BSolverPackage* solverPackage = packages.ItemAt(i);
if (solverPackage->Name() != package->Title())
continue;
else if (package->State() == NONE
&& dynamic_cast<BPackageManager::RemoteRepository*>(
solverPackage->Repository()) == NULL) {
continue;
}
return solverPackage;
}
}