]> git.saurik.com Git - apt.git/commitdiff
cleanup upgrade API some more (thanks for the feedback from David)
authorMichael Vogt <mvo@debian.org>
Sat, 5 Oct 2013 09:54:08 +0000 (11:54 +0200)
committerMichael Vogt <mvo@debian.org>
Sat, 5 Oct 2013 09:54:08 +0000 (11:54 +0200)
apt-pkg/algorithms.cc
apt-pkg/algorithms.h
apt-private/private-upgrade.cc
apt-private/private-upgrade.h
cmdline/apt-get.cc

index 68531f3cac8fdff770ab79eed59e76bae61e128f..b015ed20e2b06fa0c968576df54332b501427562 100644 (file)
@@ -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;
 }
                                                                        /*}}}*/
index 9ff84e3ffd4781031e0c958085431eef122344e0..d0de724620a28e56f1b0b4c8b726e492f31f67be 100644 (file)
@@ -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);
    }
 }
 
index 6ea7c19d6ba29f33b1106b92f9af2235059baadb..00608866f8fdb9956ee19a47d027b25ca78c533c 100644 (file)
@@ -1,54 +1,59 @@
 // Includes                                                            /*{{{*/
 #include <apt-pkg/algorithms.h>
-
+#include <iostream>
 #include "private-install.h"
 #include "private-cachefile.h"
 #include "private-upgrade.h"
 #include "private-output.h"
                                                                        /*}}}*/
 
-// DoUpgradeNoNewPackages - Upgrade all packages                       /*{{{*/
-// ---------------------------------------------------------------------
-/* Upgrade all packages without installing new packages or erasing old
-   packages */
-bool DoUpgradeNoNewPackages(CommandLine &CmdL)
+// this is actually performing the various upgrade operations 
+static bool UpgradeHelper(CommandLine &CmdL, int UpgradeFlags)
 {
    CacheFile Cache;
    if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false)
       return false;
 
-   // Do the upgrade
-   if (pkgAllUpgrade(Cache) == false)
+   //c0out << _("Calculating upgrade... ") << std::flush;
+   if (APT::Upgrade::Upgrade(Cache, UpgradeFlags) == false)
    {
+      c0out << _("Failed") << std::endl;
       ShowBroken(c1out,Cache,false);
-      return _error->Error(_("Internal error, AllUpgrade broke stuff"));
+      return _error->Error(_("Internal error, Upgrade broke stuff"));
    }
 
    // parse additional cmdline pkg manipulation switches
    if(!DoCacheManipulationFromCommandLine(CmdL, Cache))
       return false;
+
+   //c0out << _("Done") << std::endl;
    
    return InstallPackages(Cache,true);
 }
+
+// DoDistUpgrade - Automatic smart upgrader                            /*{{{*/
+// ---------------------------------------------------------------------
+/* Intelligent upgrader that will install and remove packages at will */
+bool DoDistUpgrade(CommandLine &CmdL)
+{
+   return UpgradeHelper(CmdL, 0);
+}
+                                                                       /*}}}*/
+// DoUpgradeNoNewPackages - Upgrade all packages                       /*{{{*/
+// ---------------------------------------------------------------------
+/* Upgrade all packages without installing new packages or erasing old
+   packages */
+bool DoUpgradeNoNewPackages(CommandLine &CmdL)
+{
+   // Do the upgrade
+   return UpgradeHelper(CmdL, 
+                        APT::Upgrade::FORBID_REMOVE_PACKAGES|
+                        APT::Upgrade::FORBID_NEW_INSTALL_PACKAGES);
+}
                                                                        /*}}}*/
 // DoSafeUpgrade - Upgrade all packages with install but not remove    /*{{{*/
 bool DoUpgradeWithAllowNewPackages(CommandLine &CmdL)
 {
-   CacheFile Cache;
-   if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false)
-      return false;
-
-   // Do the upgrade
-   if (APT::Upgrade::Upgrade(Cache, APT::Upgrade::ALLOW_NEW_INSTALLS) == false)
-   {
-      ShowBroken(c1out,Cache,false);
-      return _error->Error(_("Internal error, AllUpgrade broke stuff"));
-   }
-
-   // parse additional cmdline pkg manipulation switches
-   if(!DoCacheManipulationFromCommandLine(CmdL, Cache))
-      return false;
-   
-   return InstallPackages(Cache,true);
+   return UpgradeHelper(CmdL, APT::Upgrade::FORBID_REMOVE_PACKAGES);
 }
                                                                        /*}}}*/
index 6ede6f96caa78b53674d54411ae0d080b4186cc1..050d3a66825344fdb5ae970d2b7f8fd5d34d39e0 100644 (file)
@@ -4,6 +4,7 @@
 #include <apt-pkg/cmndline.h>
 
 
+bool DoDistUpgrade(CommandLine &CmdL);
 bool DoUpgradeNoNewPackages(CommandLine &CmdL);
 bool DoUpgradeWithAllowNewPackages(CommandLine &CmdL);
 
index 8a30ac38d5e602ba3c857fab3c649f468627e997..64c7506ae7283109ce491079c4a9b79f1c9d3caa 100644 (file)
@@ -342,32 +342,6 @@ bool DoMarkAuto(CommandLine &CmdL)
    return false;
 }
                                                                        /*}}}*/
-// DoDistUpgrade - Automatic smart upgrader                            /*{{{*/
-// ---------------------------------------------------------------------
-/* Intelligent upgrader that will install and remove packages at will */
-bool DoDistUpgrade(CommandLine &CmdL)
-{
-   CacheFile Cache;
-   if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false)
-      return false;
-
-   c0out << _("Calculating upgrade... ") << flush;
-   if (pkgDistUpgrade(*Cache) == false)
-   {
-      c0out << _("Failed") << endl;
-      ShowBroken(c1out,Cache,false);
-      return false;
-   }
-   
-   // parse additional cmdline pkg manipulation switches
-   if(!DoCacheManipulationFromCommandLine(CmdL, Cache))
-      return false;
-
-   c0out << _("Done") << endl;
-   
-   return InstallPackages(Cache,true);
-}
-                                                                       /*}}}*/
 // DoDSelectUpgrade - Do an upgrade by following dselects selections   /*{{{*/
 // ---------------------------------------------------------------------
 /* Follows dselect's selections */