if (Cache->BrokenCount() == 0)
return true;
+ // FIXME: if an external solver showed an error, we shouldn't show one here
+ if (_error->PendingError() && _config->Find("APT::Solver") == "dump")
+ return false;
+
c1out <<
_("Some packages could not be installed. This may mean that you have\n"
"requested an impossible situation or if you are using the unstable\n"
// force a hashsum for compatibility reasons
_config->CndSet("Acquire::ForceHash", "md5sum");
}
+ else if (_config->FindB("APT::Get::Simulate") == true)
+ ;
else if (Fetcher.GetLock(_config->FindDir("Dir::Cache::Archives")) == false)
return false;
pkgAcquire::UriIterator I = Fetcher.UriBegin();
for (; I != Fetcher.UriEnd(); ++I)
std::cout << '\'' << I->URI << "' " << flNotDir(I->Owner->DestFile) << ' ' <<
- I->Owner->FileSize << ' ' << I->Owner->HashSum() << std::endl;
+ std::to_string(I->Owner->FileSize) << ' ' << I->Owner->HashSum() << std::endl;
return true;
}
{
if(Pkg.CurrentVer() != 0 || Cache[Pkg].Install())
if(Debug)
- std::cout << "We could delete %s" << Pkg.FullName(true).c_str() << std::endl;
+ std::cout << "We could delete " << APT::PrettyPkg(Cache, Pkg) << std::endl;
if (doAutoRemove)
{
- if(Pkg.CurrentVer() != 0 &&
+ if(Pkg.CurrentVer() != 0 &&
Pkg->CurrentState != pkgCache::State::ConfigFiles)
Cache->MarkDelete(Pkg, purgePkgs, 0, false);
else
if (R.IsNegative() == true ||
Cache->IsImportantDep(R) == false)
continue;
- pkgCache::PkgIterator N = R.ParentPkg();
- if (N.end() == true || (N->CurrentVer == 0 && (*Cache)[N].Install() == false))
+ auto const RV = R.ParentVer();
+ if (unlikely(RV.end() == true))
+ continue;
+ auto const RP = RV.ParentPkg();
+ // check if that dependency comes from an interesting version
+ if (RP.CurrentVer() == RV)
+ {
+ if ((*Cache)[RP].Keep() == false)
+ continue;
+ }
+ else if (Cache[RP].CandidateVerIter(Cache) == RV)
+ {
+ if ((*Cache)[RP].NewInstall() == false && (*Cache)[RP].Upgrade() == false)
+ continue;
+ }
+ else // ignore dependency from a non-candidate version
continue;
if (Debug == true)
- std::clog << "Save " << APT::PrettyPkg(Cache, Pkg) << " as another installed garbage package depends on it" << std::endl;
+ std::clog << "Save " << APT::PrettyPkg(Cache, Pkg) << " as another installed package depends on it: " << APT::PrettyPkg(Cache, RP) << std::endl;
Cache->MarkInstall(Pkg, false, 0, false);
if (hideAutoRemove == false)
++autoRemoveCount;
}
} while (Changed == true);
}
+ // trigger marking now so that the package list below is correct
+ group.release();
// Now see if we had destroyed anything (if we had done anything)
if (Cache->BrokenCount() != 0)
ioprintf(c1out, P_("%lu package was automatically installed and is no longer required.\n",
"%lu packages were automatically installed and are no longer required.\n", autoRemoveCount), autoRemoveCount);
std::string autocmd = "apt autoremove";
- if (getenv("SUDO_USER") != NULL)
- autocmd = "sudo " + autocmd;
+ if (getenv("SUDO_USER") != nullptr)
+ {
+ auto const envsudocmd = getenv("SUDO_COMMAND");
+ auto const envshell = getenv("SHELL");
+ if (envsudocmd == nullptr || envshell == nullptr || strcmp(envsudocmd, envshell) != 0)
+ autocmd = "sudo " + autocmd;
+ }
ioprintf(c1out, P_("Use '%s' to remove it.", "Use '%s' to remove them.", autoRemoveCount), autocmd.c_str());
c1out << std::endl;
}
bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, CacheFile &Cache, int UpgradeMode)
{
- std::vector<const char*> VolatileCmdL;
+ std::vector<std::string> VolatileCmdL;
return DoCacheManipulationFromCommandLine(CmdL, VolatileCmdL, Cache, UpgradeMode);
}
-bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, std::vector<const char*> &VolatileCmdL, CacheFile &Cache, int UpgradeMode)
+bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, std::vector<std::string> &VolatileCmdL, CacheFile &Cache, int UpgradeMode)
{
std::map<unsigned short, APT::VersionSet> verset;
return DoCacheManipulationFromCommandLine(CmdL, VolatileCmdL, Cache, verset, UpgradeMode);
}
-bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, std::vector<const char*> &VolatileCmdL, CacheFile &Cache,
+bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, std::vector<std::string> &VolatileCmdL, CacheFile &Cache,
std::map<unsigned short, APT::VersionSet> &verset, int UpgradeMode)
{
// Enter the special broken fixing mode if the user specified arguments
bool DoInstall(CommandLine &CmdL)
{
CacheFile Cache;
- std::vector<char const *> VolatileCmdL;
+ std::vector<std::string> VolatileCmdL;
Cache.GetSourceList()->AddVolatileFiles(CmdL, &VolatileCmdL);
// then open the cache