Просмотр исходного кода

cleanup upgrade API some more (thanks for the feedback from David)

Michael Vogt лет назад: 12
Родитель
Сommit
5ca0cf5119
5 измененных файлов с 52 добавлено и 65 удалено
  1. 15 10
      apt-pkg/algorithms.cc
  2. 6 4
      apt-pkg/algorithms.h
  3. 30 25
      apt-private/private-upgrade.cc
  4. 1 0
      apt-private/private-upgrade.h
  5. 0 26
      cmdline/apt-get.cc

+ 15 - 10
apt-pkg/algorithms.cc

@@ -554,18 +554,23 @@ bool pkgMinimizeUpgrade(pkgDepCache &Cache)
 }
 }
 									/*}}}*/
 									/*}}}*/
 // APT::Upgrade::Upgrade - Upgrade using a specific strategy     	/*{{{*/
 // 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;
    return false;
 }
 }
 									/*}}}*/
 									/*}}}*/

+ 6 - 4
apt-pkg/algorithms.h

@@ -47,10 +47,12 @@ class pkgAcquireStatus;
 
 
 namespace APT {
 namespace APT {
    namespace Upgrade {
    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);
    }
    }
 }
 }
 
 

+ 30 - 25
apt-private/private-upgrade.cc

@@ -1,54 +1,59 @@
 // Includes								/*{{{*/
 // Includes								/*{{{*/
 #include <apt-pkg/algorithms.h>
 #include <apt-pkg/algorithms.h>
-
+#include <iostream>
 #include "private-install.h"
 #include "private-install.h"
 #include "private-cachefile.h"
 #include "private-cachefile.h"
 #include "private-upgrade.h"
 #include "private-upgrade.h"
 #include "private-output.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;
    CacheFile Cache;
    if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false)
    if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false)
       return 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);
       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
    // parse additional cmdline pkg manipulation switches
    if(!DoCacheManipulationFromCommandLine(CmdL, Cache))
    if(!DoCacheManipulationFromCommandLine(CmdL, Cache))
       return false;
       return false;
+
+   //c0out << _("Done") << std::endl;
    
    
    return InstallPackages(Cache,true);
    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	/*{{{*/
 // DoSafeUpgrade - Upgrade all packages with install but not remove	/*{{{*/
 bool DoUpgradeWithAllowNewPackages(CommandLine &CmdL)
 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);
 }
 }
 									/*}}}*/
 									/*}}}*/

+ 1 - 0
apt-private/private-upgrade.h

@@ -4,6 +4,7 @@
 #include <apt-pkg/cmndline.h>
 #include <apt-pkg/cmndline.h>
 
 
 
 
+bool DoDistUpgrade(CommandLine &CmdL);
 bool DoUpgradeNoNewPackages(CommandLine &CmdL);
 bool DoUpgradeNoNewPackages(CommandLine &CmdL);
 bool DoUpgradeWithAllowNewPackages(CommandLine &CmdL);
 bool DoUpgradeWithAllowNewPackages(CommandLine &CmdL);
 
 

+ 0 - 26
cmdline/apt-get.cc

@@ -342,32 +342,6 @@ bool DoMarkAuto(CommandLine &CmdL)
    return false;
    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	/*{{{*/
 // DoDSelectUpgrade - Do an upgrade by following dselects selections	/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* Follows dselect's selections */
 /* Follows dselect's selections */