Browse Source

allow pkg manipulation in the upgrade/dist-upgrade commandline, e.g. apt-get dist-upgrade 2vcard- 4g8+

tags/debian/0.9.11.2
Michael Vogt 8 years ago
parent
commit
d8a8f9d7f0
4 changed files with 54 additions and 32 deletions
  1. +39
    -23
      apt-private/private-install.cc
  2. +3
    -0
      apt-private/private-install.h
  3. +8
    -6
      apt-private/private-upgrade.cc
  4. +4
    -3
      cmdline/apt-get.cc

+ 39
- 23
apt-private/private-install.cc View File

@@ -577,19 +577,19 @@ bool DoAutomaticRemove(CacheFile &Cache)
}
/*}}}*/

static const unsigned short MOD_REMOVE = 1;
static const unsigned short MOD_INSTALL = 2;

bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, CacheFile &Cache)
{
std::map<unsigned short, APT::VersionSet> verset;
return DoCacheManipulationFromCommandLine(CmdL, Cache, verset);
}


// DoInstall - Install packages from the command line /*{{{*/
// ---------------------------------------------------------------------
/* Install named packages */
bool DoInstall(CommandLine &CmdL)
bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, CacheFile &Cache,
std::map<unsigned short, APT::VersionSet> &verset)
{
CacheFile Cache;
if (Cache.OpenForInstall() == false ||
Cache.CheckDeps(CmdL.FileSize() != 1) == false)
return false;

// Enter the special broken fixing mode if the user specified arguments
bool BrokenFix = false;
if (Cache->BrokenCount() != 0)
@@ -599,9 +599,6 @@ bool DoInstall(CommandLine &CmdL)
if (_config->FindB("APT::Get::CallResolver", true) == true)
Fix = new pkgProblemResolver(Cache);

static const unsigned short MOD_REMOVE = 1;
static const unsigned short MOD_INSTALL = 2;

unsigned short fallback = MOD_INSTALL;
if (strcasecmp(CmdL.FileList[0],"remove") == 0)
fallback = MOD_REMOVE;
@@ -622,7 +619,7 @@ bool DoInstall(CommandLine &CmdL)
mods.push_back(APT::VersionSet::Modifier(MOD_REMOVE, "-",
APT::VersionSet::Modifier::POSTFIX, APT::VersionSet::NEWEST));
CacheSetHelperAPTGet helper(c0out);
std::map<unsigned short, APT::VersionSet> verset = APT::VersionSet::GroupedFromCommandLine(Cache,
verset = APT::VersionSet::GroupedFromCommandLine(Cache,
CmdL.FileList + 1, mods, fallback, helper);

if (_error->PendingError() == true)
@@ -711,6 +708,34 @@ bool DoInstall(CommandLine &CmdL)
if (!DoAutomaticRemove(Cache))
return false;

// if nothing changed in the cache, but only the automark information
// we write the StateFile here, otherwise it will be written in
// cache.commit()
if (InstallAction.AutoMarkChanged > 0 &&
Cache->DelCount() == 0 && Cache->InstCount() == 0 &&
Cache->BadCount() == 0 &&
_config->FindB("APT::Get::Simulate",false) == false)
Cache->writeStateFile(NULL);

return true;
}


// DoInstall - Install packages from the command line /*{{{*/
// ---------------------------------------------------------------------
/* Install named packages */
bool DoInstall(CommandLine &CmdL)
{
CacheFile Cache;
if (Cache.OpenForInstall() == false ||
Cache.CheckDeps(CmdL.FileSize() != 1) == false)
return false;

std::map<unsigned short, APT::VersionSet> verset;

if(!DoCacheManipulationFromCommandLine(CmdL, Cache, verset))
return false;

/* Print out a list of packages that are going to be installed extra
to what the user asked */
if (Cache->InstCount() != verset[MOD_INSTALL].size())
@@ -826,15 +851,6 @@ bool DoInstall(CommandLine &CmdL)

}

// if nothing changed in the cache, but only the automark information
// we write the StateFile here, otherwise it will be written in
// cache.commit()
if (InstallAction.AutoMarkChanged > 0 &&
Cache->DelCount() == 0 && Cache->InstCount() == 0 &&
Cache->BadCount() == 0 &&
_config->FindB("APT::Get::Simulate",false) == false)
Cache->writeStateFile(NULL);

// See if we need to prompt
// FIXME: check if really the packages in the set are going to be installed
if (Cache->InstCount() == verset[MOD_INSTALL].size() && Cache->DelCount() == 0)


+ 3
- 0
apt-private/private-install.h View File

@@ -14,6 +14,9 @@

bool DoInstall(CommandLine &Cmd);

bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, CacheFile &Cache,
std::map<unsigned short, APT::VersionSet> &verset);
bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, CacheFile &Cache);

bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask = true,
bool Safety = true);


+ 8
- 6
apt-private/private-upgrade.cc View File

@@ -13,9 +13,6 @@
packages */
bool DoUpgradeNoNewPackages(CommandLine &CmdL)
{
if (CmdL.FileSize() != 1)
return _error->Error(_("The upgrade command takes no arguments"));

CacheFile Cache;
if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false)
return false;
@@ -26,6 +23,10 @@ bool DoUpgradeNoNewPackages(CommandLine &CmdL)
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);
}
@@ -34,9 +35,6 @@ bool DoUpgradeNoNewPackages(CommandLine &CmdL)
// DoSafeUpgrade - Upgrade all packages with install but not remove /*{{{*/
bool DoUpgradeWithAllowNewPackages(CommandLine &CmdL)
{
if (CmdL.FileSize() != 1)
return _error->Error(_("The upgrade command takes no arguments"));

CacheFile Cache;
if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false)
return false;
@@ -47,6 +45,10 @@ bool DoUpgradeWithAllowNewPackages(CommandLine &CmdL)
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);
}


+ 4
- 3
cmdline/apt-get.cc View File

@@ -350,9 +350,6 @@ bool DoMarkAuto(CommandLine &CmdL)
/* Intelligent upgrader that will install and remove packages at will */
bool DoDistUpgrade(CommandLine &CmdL)
{
if (CmdL.FileSize() != 1)
return _error->Error(_("The dist-upgrade command takes no arguments"));

CacheFile Cache;
if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false)
return false;
@@ -365,6 +362,10 @@ bool DoDistUpgrade(CommandLine &CmdL)
return false;
}
// parse additional cmdline pkg manipulation switches
if(!DoCacheManipulationFromCommandLine(CmdL, Cache))
return false;

c0out << _("Done") << endl;
return InstallPackages(Cache,true);


Loading…
Cancel
Save