improve the API for Upgrade()
[ntk/apt.git] / apt-pkg / algorithms.cc
index 69d4acd..68531f3 100644 (file)
@@ -422,12 +422,8 @@ bool pkgDistUpgrade(pkgDepCache &Cache)
    return Fix.Resolve();
 }
                                                                        /*}}}*/
-// AllUpgrade - Upgrade as many packages as possible                   /*{{{*/
-// ---------------------------------------------------------------------
-/* Right now the system must be consistent before this can be called.
-   It also will not change packages marked for install, it only tries
-   to install packages not marked for install */
-bool pkgAllUpgrade(pkgDepCache &Cache)
+// AllUpgradeNoNewPackages - Upgrade but no removals or new pkgs        /*{{{*/
+bool pkgAllUpgradeNoNewPackages(pkgDepCache &Cache)
 {
    std::string const solver = _config->Find("APT::Solver", "internal");
    if (solver != "internal") {
@@ -459,13 +455,13 @@ bool pkgAllUpgrade(pkgDepCache &Cache)
    return Fix.ResolveByKeep();
 }
                                                                        /*}}}*/
-// AllUpgradeNoDelete - Upgrade without removing packages              /*{{{*/
+// AllUpgradeWithNewInstalls - Upgrade + install new packages as needed /*{{{*/
 // ---------------------------------------------------------------------
 /* Right now the system must be consistent before this can be called.
  * Upgrade as much as possible without deleting anything (useful for
  * stable systems)
  */
-bool pkgAllUpgradeNoDelete(pkgDepCache &Cache)
+bool pkgAllUpgradeWithNewPackages(pkgDepCache &Cache)
 {
    pkgDepCache::ActionGroup group(Cache);
 
@@ -502,6 +498,16 @@ bool pkgAllUpgradeNoDelete(pkgDepCache &Cache)
    return Fix.ResolveByKeep();
 }
                                                                        /*}}}*/
+// AllUpgrade - Upgrade as many packages as possible                   /*{{{*/
+// ---------------------------------------------------------------------
+/* Right now the system must be consistent before this can be called.
+   It also will not change packages marked for install, it only tries
+   to install packages not marked for install */
+bool pkgAllUpgrade(pkgDepCache &Cache)
+{
+   return pkgAllUpgradeNoNewPackages(Cache);
+}
+                                                                       /*}}}*/
 // MinimizeUpgrade - Minimizes the set of packages to be upgraded      /*{{{*/
 // ---------------------------------------------------------------------
 /* This simply goes over the entire set of packages and tries to keep 
@@ -547,6 +553,22 @@ bool pkgMinimizeUpgrade(pkgDepCache &Cache)
    return true;
 }
                                                                        /*}}}*/
+// APT::Upgrade::Upgrade - Upgrade using a specific strategy           /*{{{*/
+bool APT::Upgrade::Upgrade(pkgDepCache &Cache, APT::Upgrade::UpgradeMode 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);
+   }
+   return false;
+}
+                                                                       /*}}}*/
 // ProblemResolver::pkgProblemResolver - Constructor                   /*{{{*/
 // ---------------------------------------------------------------------
 /* */