]> git.saurik.com Git - apt.git/commitdiff
Flag the package in the SmartUnPack method as UnPacked while solving breakages to...
authorChristopher Baines <cbaines8@gmail.com>
Tue, 5 Jul 2011 15:20:09 +0000 (16:20 +0100)
committerChristopher Baines <cbaines8@gmail.com>
Tue, 5 Jul 2011 15:20:09 +0000 (16:20 +0100)
apt-pkg/packagemanager.cc

index 4cba19dc027e1ffa84c112fdf67a4180f393a93a..a39e412bdc5ae48fc352908dc756a473accd5eba 100644 (file)
@@ -685,11 +685,15 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate)
         for (Version **I = VList; *I != 0; I++)
         {
            VerIterator Ver(Cache,*I);
-           PkgIterator Pkg = Ver.ParentPkg();
+           PkgIterator BrokenPkg = Ver.ParentPkg();
            // Check if it needs to be unpacked
-           if (List->IsFlag(Pkg,pkgOrderList::InList) && Cache[Pkg].Delete() == false) {
+           if (List->IsFlag(BrokenPkg,pkgOrderList::InList) && Cache[BrokenPkg].Delete() == false && 
+               !List->IsFlag(BrokenPkg,pkgOrderList::UnPacked)) {
+             /* FIXME Setting the flag here prevents breakage loops, that can occur if BrokenPkg (or one of the 
+                packages it breaks) breaks Pkg */ 
+             List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States);
              // Found a break, so unpack the package
-             SmartUnPack(Pkg, false);
+             SmartUnPack(BrokenPkg, false);
            }
         }
       }