Просмотр исходного кода

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.

Christopher Baines лет назад: 15
Родитель
Сommit
17182c0c66
2 измененных файлов с 14 добавлено и 2 удалено
  1. 2 2
      apt-pkg/deb/dpkgpm.cc
  2. 12 0
      apt-pkg/packagemanager.cc

+ 2 - 2
apt-pkg/deb/dpkgpm.cc

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

+ 12 - 0
apt-pkg/packagemanager.cc

@@ -286,6 +286,10 @@ bool pkgPackageManager::ConfigureAll()
    for (pkgOrderList::iterator I = OList.begin(); I != OList.end(); I++)
    for (pkgOrderList::iterator I = OList.begin(); I != OList.end(); I++)
    {
    {
       PkgIterator Pkg(Cache,*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) {
       if (ConfigurePkgs == true && SmartConfigure(Pkg) == false) {
          _error->Error("Internal error, packages left unconfigured. %s",Pkg.Name());
          _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 std::string const conf = _config->Find("PackageManager::Configure","all");
    static bool const ConfigurePkgs = (conf == "all" || conf == "smart");
    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)
    if (ConfigurePkgs == true && Configure(Pkg) == false)
       return false;
       return false;
       
       
@@ -577,6 +584,11 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate)
 	    if (Cache[Pkg].InstallVer != *I || 
 	    if (Cache[Pkg].InstallVer != *I || 
 		(Cache[Pkg].Keep() == true && Pkg.State() == PkgIterator::NeedsNothing))
 		(Cache[Pkg].Keep() == true && Pkg.State() == PkgIterator::NeedsNothing))
 	       continue;
 	       continue;
+	       
+	    if (List->IsFlag(Pkg,pkgOrderList::Configured)) {
+	       Bad = false;
+	       continue;
+	    }
 
 
 	    if (Debug)
 	    if (Debug)
 	       clog << "Trying to SmartConfigure " << Pkg.Name() << endl;
 	       clog << "Trying to SmartConfigure " << Pkg.Name() << endl;