]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/orderlist.cc
merged from apt--mvo
[apt.git] / apt-pkg / orderlist.cc
index 4bd60372679d3099b110f54d8d6eccc4c9997eb2..61d8d914e43b3bf6a52fc54c29b251b86dfc3402 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: orderlist.cc,v 1.12 2001/02/20 07:03:17 jgg Exp $
+// $Id: orderlist.cc,v 1.14 2001/05/07 05:49:43 jgg Exp $
 /* ######################################################################
 
    Order List - Represents and Manipulates an ordered list of packages.
 #include <apt-pkg/version.h>
 #include <apt-pkg/sptr.h>
 #include <apt-pkg/configuration.h>
+
+#include <iostream>
                                                                        /*}}}*/
 
+using namespace std;
+
 pkgOrderList *pkgOrderList::Me = 0;
 
 // OrderList::pkgOrderList - Constructor                               /*{{{*/
@@ -119,8 +123,11 @@ bool pkgOrderList::IsMissing(PkgIterator Pkg)
    if (Pkg.State() == pkgCache::PkgIterator::NeedsConfigure && 
        Cache[Pkg].Keep() == true)
       return false;
+
+   if (FileList == 0)
+      return false;
    
-   if (FileList != 0 && FileList[Pkg->ID].empty() == false)
+   if (FileList[Pkg->ID].empty() == false)
       return false;
    return true;
 }
@@ -484,11 +491,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;
@@ -623,6 +632,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;
@@ -661,7 +671,7 @@ bool pkgOrderList::DepUnPackCrit(DepIterator D)
    }   
    return true;
 }
-                                                                       /*}}}*/
+
 // OrderList::DepUnPackPreD - Critical UnPacking ordering with depends /*{{{*/
 // ---------------------------------------------------------------------
 /* Critical PreDepends (also configure immediate and essential) strives to
@@ -796,9 +806,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;
 }
@@ -946,6 +967,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