]> git.saurik.com Git - apt.git/commitdiff
do not enter an endless loop for (essential) pre-dependency loops
authorDavid Kalnischkies <kalnischkies@gmail.com>
Mon, 31 Oct 2011 19:36:05 +0000 (14:36 -0500)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Mon, 31 Oct 2011 19:36:05 +0000 (14:36 -0500)
apt-pkg/packagemanager.cc
debian/changelog

index a97ce4833fc02b1a783c01389cab2e5e47476764..4f97627016009e5a4b3a2c19bde9367e482cac65 100644 (file)
@@ -404,22 +404,27 @@ bool pkgPackageManager::SmartConfigure(PkgIterator Pkg, int const Depth)
         
         /* If the dependany is still not satisfied, try, if possible, unpacking a package to satisfy it */
         if (InstallVer != 0 && Bad) {
-           Bad = false;
-           if (List->IsNow(DepPkg) && !List->IsFlag(DepPkg,pkgOrderList::Loop)) {
-              List->Flag(Pkg,pkgOrderList::Loop);
-              if (Debug) 
-                 cout << OutputInDepth(Depth) << "Unpacking " << DepPkg.Name() << " to avoid loop" << endl;
-              SmartUnPack(DepPkg, true, Depth + 1);
-              List->RmFlag(Pkg,pkgOrderList::Loop);
+           if (List->IsNow(DepPkg)) {
+              Bad = false;
+              if (List->IsFlag(Pkg,pkgOrderList::Loop))
+              {
+                 if (Debug)
+                    std::clog << OutputInDepth(Depth) << "Package " << Pkg << " loops in SmartConfigure" << std::endl;
+              }
+              else
+              {
+                 List->Flag(Pkg,pkgOrderList::Loop);
+                 if (Debug)
+                    cout << OutputInDepth(Depth) << "Unpacking " << DepPkg.Name() << " to avoid loop" << endl;
+                 SmartUnPack(DepPkg, true, Depth + 1);
+                 List->RmFlag(Pkg,pkgOrderList::Loop);
+              }
            }
         }
         
         if (Start==End) {
-           if (Bad && Debug) {
-              if (!List->IsFlag(DepPkg,pkgOrderList::Loop)) {
-                  _error->Warning("Could not satisfy dependancies for %s",Pkg.Name());
-               } 
-           }
+           if (Bad && Debug && List->IsFlag(DepPkg,pkgOrderList::Loop) == false)
+                 std::clog << OutputInDepth(Depth) << "Could not satisfy dependancies for " << Pkg.Name() << std::endl;
            break;
         } else {
             Start++;
index 03e5116a6d5d7f4582a010746d7468994470371f..bb26800fe1aedf33ab12c412b2108b8e7799de64 100644 (file)
@@ -4,10 +4,11 @@ apt (0.8.16~exp8) experimental; urgency=low
   * apt-pkg/packagemanager.cc:
     - do not fail on unpacked packages in SmartUnPack, just don't
       shedule them for unpack, but do all checks and configure them
+    - do not enter an endless loop for (essential) pre-dependency loops
   * apt-pkg/contrib/sha2_internal.cc:
     - use a pointer-union to peace gcc strict-aliasing warning
 
- -- David Kalnischkies <kalnischkies@gmail.com>  Sun, 30 Oct 2011 14:15:53 -0500
+ -- David Kalnischkies <kalnischkies@gmail.com>  Mon, 31 Oct 2011 14:34:48 -0500
 
 apt (0.8.16~exp7) experimental; urgency=low