]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/orderlist.cc
apt-pkg/acquire-item.cc: fix breaking on unreachable networks
[apt.git] / apt-pkg / orderlist.cc
index 7302f02b60ffe7582ac15e4335197391df98b969..616714e2927f4cb4a674be6e9cfdba802b3f5b37 100644 (file)
@@ -488,11 +488,13 @@ bool pkgOrderList::VisitProvides(DepIterator D,bool Critical)
         continue;
       
       if (D->Type != pkgCache::Dep::Conflicts &&
+         D->Type != pkgCache::Dep::DpkgBreaks &&
          D->Type != pkgCache::Dep::Obsoletes &&
          Cache[Pkg].InstallVer != *I)
         continue;
       
       if ((D->Type == pkgCache::Dep::Conflicts ||
+          D->Type == pkgCache::Dep::DpkgBreaks ||
           D->Type == pkgCache::Dep::Obsoletes) &&
          (Version *)Pkg.CurrentVer() != *I)
         continue;
@@ -627,6 +629,7 @@ bool pkgOrderList::DepUnPackCrit(DepIterator D)
         /* Forward critical dependencies MUST be correct before the 
            package can be unpacked. */
         if (D->Type != pkgCache::Dep::Conflicts &&
+            D->Type != pkgCache::Dep::DpkgBreaks &&
             D->Type != pkgCache::Dep::Obsoletes &&
             D->Type != pkgCache::Dep::PreDepends)
            continue;
@@ -665,7 +668,7 @@ bool pkgOrderList::DepUnPackCrit(DepIterator D)
    }   
    return true;
 }
-                                                                       /*}}}*/
+
 // OrderList::DepUnPackPreD - Critical UnPacking ordering with depends /*{{{*/
 // ---------------------------------------------------------------------
 /* Critical PreDepends (also configure immediate and essential) strives to
@@ -800,9 +803,20 @@ bool pkgOrderList::DepUnPackDep(DepIterator D)
               return false;
         }
         else
+        {
            if (D->Type == pkgCache::Dep::Depends)
               if (VisitProvides(D,false) == false)
                  return false;
+
+           if (D->Type == pkgCache::Dep::DpkgBreaks)
+           {
+              if (CheckDep(D) == true)
+                continue;
+
+              if (VisitNode(D.TargetPkg()) == false)
+                return false;
+           }
+        }
       }
    return true;
 }
@@ -950,6 +964,7 @@ bool pkgOrderList::CheckDep(DepIterator D)
       /* Conflicts requires that all versions are not present, depends
          just needs one */
       if (D->Type != pkgCache::Dep::Conflicts && 
+         D->Type != pkgCache::Dep::DpkgBreaks && 
          D->Type != pkgCache::Dep::Obsoletes)
       {
         /* Try to find something that does not have the after flag set