From: Arch Librarian <arch@canonical.com>
Date: Mon, 20 Sep 2004 16:56:11 +0000 (+0000)
Subject: Fixed or handling bug
X-Git-Tag: 0.7.24ubuntu1~1113
X-Git-Url: https://git.saurik.com/apt.git/commitdiff_plain/00b47c98ca4a4349686a082eba6d77decbb03a4d

Fixed or handling bug
Author: jgg
Date: 2000-10-03 23:59:05 GMT
Fixed or handling bug
---

diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc
index adcbbd40c..7f7cb204f 100644
--- a/apt-pkg/algorithms.cc
+++ b/apt-pkg/algorithms.cc
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: algorithms.cc,v 1.30 2000/05/10 05:56:23 jgg Exp $
+// $Id: algorithms.cc,v 1.31 2000/10/03 23:59:05 jgg Exp $
 /* ######################################################################
 
    Algorithms - A set of misc algorithms
@@ -719,6 +719,9 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
 	 if (Cache[I].InstallVer == 0 || Cache[I].InstBroken() == false)
 	    continue;
 	 
+	 if (Debug == true)
+	    cout << "Investigating " << I.Name() << endl;
+	 
 	 // Isolate the problem dependency
 	 PackageKill KillList[100];
 	 PackageKill *LEnd = KillList;
@@ -731,6 +734,13 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
 	 for (pkgCache::DepIterator D = Cache[I].InstVerIter(Cache).DependsList();
 	      D.end() == false || InOr == true;)
 	 {
+	    // We only worry about critical deps.
+	    if (D.IsCritical() != true)
+	    {
+	       D++;
+	       continue;
+	    }
+	    
 	    // Compute a single dependency element (glob or)
 	    if (Start == End)
 	    {
@@ -740,23 +750,28 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
 		  if (OldEnd == LEnd && OrOp == OrRemove)
 		  {
 		     if ((Flags[I->ID] & Protected) != Protected)
+		     {
+			if (Debug == true)
+			   clog << "  Or group remove for " << I.Name() << endl;
 			Cache.MarkDelete(I);
+		     }		     
 		  }		  
 		  if (OldEnd == LEnd && OrOp == OrKeep)
+		  {
+		     if (Debug == true)
+			clog << "  Or group keep for " << I.Name() << endl;
 		     Cache.MarkKeep(I);
+		  }		  
 	       }
 	       
 	       OrOp = OrRemove;
 	       D.GlobOr(Start,End);
 	       InOr = Start != End;
+	       cout << Start.TargetPkg().Name() << ',' << End.TargetPkg().Name() << ',' << InOr << endl;
 	       OldEnd = LEnd;
 	    }	    
 	    else
 	       Start++;
-
-	    // We only worry about critical deps.
-	    if (End.IsCritical() != true)
-	       continue;
 	    
 	    // Dep is ok
 	    if ((Cache[End] & pkgDepCache::DepGInstall) == pkgDepCache::DepGInstall)
@@ -849,6 +864,8 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
 	       }
 	       else
 	       {
+		  if (Debug == true)
+		     clog << "  Added " << Pkg.Name() << " to the remove list" << endl;
 		  // Skip adding to the kill list if it is protected
 		  if ((Flags[Pkg->ID] & Protected) != 0)
 		     continue;