diff options
-rw-r--r-- | apt-pkg/algorithms.cc | 25 | ||||
-rw-r--r-- | apt-pkg/algorithms.h | 10 | ||||
-rw-r--r-- | apt-private/private-upgrade.cc | 55 | ||||
-rw-r--r-- | apt-private/private-upgrade.h | 1 | ||||
-rw-r--r-- | cmdline/apt-get.cc | 26 |
5 files changed, 52 insertions, 65 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); } } diff --git a/apt-private/private-upgrade.cc b/apt-private/private-upgrade.cc index 6ea7c19d6..00608866f 100644 --- a/apt-private/private-upgrade.cc +++ b/apt-private/private-upgrade.cc @@ -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); } /*}}}*/ diff --git a/apt-private/private-upgrade.h b/apt-private/private-upgrade.h index 6ede6f96c..050d3a668 100644 --- a/apt-private/private-upgrade.h +++ b/apt-private/private-upgrade.h @@ -4,6 +4,7 @@ #include <apt-pkg/cmndline.h> +bool DoDistUpgrade(CommandLine &CmdL); bool DoUpgradeNoNewPackages(CommandLine &CmdL); bool DoUpgradeWithAllowNewPackages(CommandLine &CmdL); diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 8a30ac38d..64c7506ae 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -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 */ |