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

Daniel Burrows dburrows@costa.debian.org
Sun, 10 Apr 2005 02:23:17 +0000


Author: dburrows
Date: Sun Apr 10 02:23:14 2005
New Revision: 2993

Modified:
   branches/aptitude-0.3/aptitude/ChangeLog
   branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h
Log:
More guards against doubly-changing packages.

Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog	(original)
+++ branches/aptitude-0.3/aptitude/ChangeLog	Sun Apr 10 02:23:14 2005
@@ -1,5 +1,9 @@
 2005-04-09  Daniel Burrows  <dburrows@debian.org>
 
+	* src/generic/problemresolver/problemresolver.h:
+
+	  Add some more guards against doubly-changing packages.
+
 	* src/generic/aptitude_resolver.h:
 
 	  Fix some backwards logic that was used when finding broken deps

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 02:23:14 2005
@@ -608,7 +608,7 @@
 
     // If the source of the dependency was not modified and is
     // presently installed, try installing a *different version*.
-    if(sol_version==source_version)
+    if(sol_version == source_version)
       {
 	if(source_version == source_package.current_version())
 	  {
@@ -623,13 +623,24 @@
       }
     // Ok, the LHS *is* satisfied; hence the RHS must fail (since the
     // dep is known broken).  Enqueue each potential solution.
+    //
+    // (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)
 	  {
+	    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);
+		try_install(s, *si);
+	      }
 	  }
       }
   }