[Aptitude-devel] r3000 - in branches/aptitude-0.3/aptitude: . src/generic/problemresolver

Daniel Burrows dburrows@costa.debian.org
Sun, 10 Apr 2005 03:25:52 +0000


Author: dburrows
Date: Sun Apr 10 03:25:49 2005
New Revision: 3000

Modified:
   branches/aptitude-0.3/aptitude/ChangeLog
   branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h
Log:
Always enqueue solvers for both sides of a dependency.

Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog	(original)
+++ branches/aptitude-0.3/aptitude/ChangeLog	Sun Apr 10 03:25:49 2005
@@ -1,5 +1,10 @@
 2005-04-09  Daniel Burrows  <dburrows@debian.org>
 
+	* src/generic/problemresolver/problemresolver.h:
+
+	  Fix a big thinko: always enqueue solvers for *both* sides of a
+	  depends!
+
 	* src/generic/aptitude_resolver.h:
 
 	  Fix the version sent to the problem resolver (should be

Modified: branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h	(original)
+++ branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h	Sun Apr 10 03:25:49 2005
@@ -590,41 +590,38 @@
     package source_package=source_version.get_package();
     version sol_version=s.version_of(source_package);
 
+    // if not, then the dep is satisfied!
+    assert(sol_version == source_version);
+
     // If the source of the dependency was not modified and is
     // presently installed, try installing a *different version*.
-    if(sol_version == source_version)
+    if(source_version == source_package.current_version())
       {
-	if(source_version == source_package.current_version())
-	  {
-	    for(typename package::version_iterator vi=source_package.versions_begin();
-		!vi.end(); ++vi)
-	      if(*vi != source_version)
-		{
-		  std::cout << "  Trying to resolve " << d << " by installing " << (*vi).get_package().get_name() << " version " << (*vi).get_name() << std::endl;
-		  try_install(s, *vi);
-		}
-	  }
+	for(typename package::version_iterator vi=source_package.versions_begin();
+	    !vi.end(); ++vi)
+	  if(*vi != source_version)
+	    {
+	      std::cout << "  Trying to resolve " << d << " by installing " << (*vi).get_package().get_name() << " version " << (*vi).get_name() << std::endl;
+	      try_install(s, *vi);
+	    }
       }
-    // Ok, the LHS *is* satisfied; hence the RHS must fail (since the
-    // dep is known broken).  Enqueue each potential solution.
+
+    // Enqueue each potential solver.
     //
     // (note: skip packages that have already been assigned...I coul
     // probably speed this up very slightly by pushing knowledge down
     // out of the abstract layer -- no need to iterate over all the
     // versions of each package that's already assigned)
-    else
+    for(typename dep::solver_iterator si=d.solvers_begin();
+	!si.end(); ++si)
       {
-	for(typename dep::solver_iterator si=d.solvers_begin();
-	    !si.end(); ++si)
-	  {
-	    version sol_ver=*si;
+	version sol_ver=*si;
 
-	    if(sol_ver != sol_ver.get_package().current_version() &&
-	       s.get_actions().find(sol_ver.get_package())==s.get_actions().end())
-	      {
-		std::cout << "  Trying to resolve " << d << " by installing " << (*si).get_package().get_name() << " version " << (*si).get_name() << std::endl;
-		try_install(s, *si);
-	      }
+	if(sol_ver != sol_ver.get_package().current_version() &&
+	   s.get_actions().find(sol_ver.get_package())==s.get_actions().end())
+	  {
+	    std::cout << "  Trying to resolve " << d << " by installing " << (*si).get_package().get_name() << " version " << (*si).get_name() << std::endl;
+	    try_install(s, *si);
 	  }
       }
   }