summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/algorithms.cc25
-rw-r--r--apt-pkg/algorithms.h10
2 files changed, 21 insertions, 14 deletions
diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc
index 68531f3ca..b015ed20e 100644
--- a/apt-pkg/algorithms.cc
+++ b/apt-pkg/algorithms.cc
@@ -554,18 +554,23 @@ bool pkgMinimizeUpgrade(pkgDepCache &Cache)
}
/*}}}*/
// APT::Upgrade::Upgrade - Upgrade using a specific strategy /*{{{*/
-bool APT::Upgrade::Upgrade(pkgDepCache &Cache, APT::Upgrade::UpgradeMode mode)
+bool APT::Upgrade::Upgrade(pkgDepCache &Cache, int mode)
{
- switch(mode) {
- case APT::Upgrade::NO_INSTALL_OR_REMOVE:
- return pkgAllUpgradeNoNewPackages(Cache);
- case APT::Upgrade::ALLOW_NEW_INSTALLS:
- return pkgAllUpgradeWithNewPackages(Cache);
- case APT::Upgrade::ALLOW_REMOVAL_AND_NEW_INSTALLS:
- return pkgDistUpgrade(Cache);
- default:
- _error->Error("pkgAllUpgrade called with unknwon mode %i", mode);
+ if (mode == 0)
+ {
+ return pkgDistUpgrade(Cache);
+ }
+ else if ((mode & ~FORBID_REMOVE_PACKAGES) == 0)
+ {
+ return pkgAllUpgradeWithNewPackages(Cache);
+ }
+ else if ((mode & ~(FORBID_REMOVE_PACKAGES|FORBID_NEW_INSTALL_PACKAGES)) == 0)
+ {
+ return pkgAllUpgradeNoNewPackages(Cache);
}
+ else
+ _error->Error("pkgAllUpgrade called with unsupported mode %i", mode);
+
return false;
}
/*}}}*/
diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h
index 9ff84e3ff..d0de72462 100644
--- a/apt-pkg/algorithms.h
+++ b/apt-pkg/algorithms.h
@@ -47,10 +47,12 @@ class pkgAcquireStatus;
namespace APT {
namespace Upgrade {
- enum UpgradeMode {NO_INSTALL_OR_REMOVE,
- ALLOW_NEW_INSTALLS,
- ALLOW_REMOVAL_AND_NEW_INSTALLS};
- bool Upgrade(pkgDepCache &Cache, UpgradeMode mode);
+ // FIXME: make this "enum class UpgradeMode {" once we enable c++11
+ enum UpgradeMode {
+ FORBID_REMOVE_PACKAGES = 1,
+ FORBID_NEW_INSTALL_PACKAGES = 2,
+ };
+ bool Upgrade(pkgDepCache &Cache, int UpgradeMode);
}
}