Browse Source

Only stop on SigInt if the system state is right (still needs more testing).

More inprovements to the package manager to prevent packages from being configured
twice.
debian/1.8.y
Christopher Baines 11 years ago
parent
commit
17182c0c66
  1. 4
      apt-pkg/deb/dpkgpm.cc
  2. 12
      apt-pkg/packagemanager.cc

4
apt-pkg/deb/dpkgpm.cc

@ -1066,7 +1066,8 @@ bool pkgDPkgPM::Go(int OutStatusFd)
sighandler_t old_SIGINT = signal(SIGINT,SigINT);
// Check here for any SIGINT
if (pkgPackageManager::SigINTStop) break;
if (pkgPackageManager::SigINTStop &&
(I->Op == Item::Install || I->Op == Item::Remove || I->Op == Item::Purge)) break;
// ignore SIGHUP as well (debian #463030)
sighandler_t old_SIGHUP = signal(SIGHUP,SIG_IGN);
@ -1315,7 +1316,6 @@ bool pkgDPkgPM::Go(int OutStatusFd)
}
void SigINT(int sig) {
cout << " -- SIGINT -- " << endl;
if (_config->FindB("APT::Immediate-Configure-All",false))
pkgPackageManager::SigINTStop = true;
}

12
apt-pkg/packagemanager.cc

@ -286,6 +286,10 @@ bool pkgPackageManager::ConfigureAll()
for (pkgOrderList::iterator I = OList.begin(); I != OList.end(); I++)
{
PkgIterator Pkg(Cache,*I);
/* Check if the package has been configured, this can happen if SmartConfigure
calls its self */
if (List->IsFlag(Pkg,pkgOrderList::Configured)) continue;
if (ConfigurePkgs == true && SmartConfigure(Pkg) == false) {
_error->Error("Internal error, packages left unconfigured. %s",Pkg.Name());
@ -415,6 +419,9 @@ bool pkgPackageManager::SmartConfigure(PkgIterator Pkg)
static std::string const conf = _config->Find("PackageManager::Configure","all");
static bool const ConfigurePkgs = (conf == "all" || conf == "smart");
if (List->IsFlag(Pkg,pkgOrderList::Configured))
return _error->Error("Internal configure error on '%s'. ",Pkg.Name(),1);
if (ConfigurePkgs == true && Configure(Pkg) == false)
return false;
@ -577,6 +584,11 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate)
if (Cache[Pkg].InstallVer != *I ||
(Cache[Pkg].Keep() == true && Pkg.State() == PkgIterator::NeedsNothing))
continue;
if (List->IsFlag(Pkg,pkgOrderList::Configured)) {
Bad = false;
continue;
}
if (Debug)
clog << "Trying to SmartConfigure " << Pkg.Name() << endl;

Loading…
Cancel
Save