Browse Source

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

debian/1.8.y
Michael Vogt 10 years ago
parent
commit
5ca0cf5119
  1. 25
      apt-pkg/algorithms.cc
  2. 10
      apt-pkg/algorithms.h
  3. 55
      apt-private/private-upgrade.cc
  4. 1
      apt-private/private-upgrade.h
  5. 26
      cmdline/apt-get.cc

25
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;
}
/*}}}*/

10
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);
}
}

55
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);
}
/*}}}*/

1
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);

26
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 */

Loading…
Cancel
Save