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

Daniel Burrows dburrows@costa.debian.org
Fri, 08 Apr 2005 00:19:22 +0000


Author: dburrows
Date: Fri Apr  8 00:19:18 2005
New Revision: 2938

Modified:
   branches/aptitude-0.3/aptitude/ChangeLog
   branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h
   branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc
Log:
Start trying to track down a segfault.

Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog	(original)
+++ branches/aptitude-0.3/aptitude/ChangeLog	Fri Apr  8 00:19:18 2005
@@ -1,5 +1,14 @@
 2005-04-07  Daniel Burrows  <dburrows@debian.org>
 
+	* src/generic/problemresolver/problemresolver.h, src/generic/problemresolver/test.cc:
+
+	  Add some debugging code to try to track down the current
+	  segfault.
+
+	* src/generic/problemresolver/test.cc:
+
+	  Fix the broken_dep_iterator to actually increment
+
 	* src/generic/problemresolver/problemresolver.h:
 
 	  Actually decrement the max_steps counter, and make it

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	Fri Apr  8 00:19:18 2005
@@ -46,6 +46,8 @@
 #include <set>
 #include <vector>
 
+#include <iostream>
+
 /** \defgroup problemresolver Aptitude's problem resolver
  *
  *  This is a replacement for the generic apt problem resolver.  It
@@ -373,6 +375,17 @@
     {
       return real_soln->package_modified(pkg);
     }
+
+    void dump(std::ostream &out)
+    {
+      out << "< ";
+      for(typename std::map<package, action>::const_iterator i=get_actions().begin();
+	  i!=get_actions().end(); ++i)
+	{
+	  out << i->first.get_name() << " -> " << i->second.ver.get_name() << " ";
+	}
+      out << ">";
+    }
   }; // End solution wrapper
 private:
   /** Compares solutions according to their "goodness". */
@@ -658,6 +671,18 @@
 	solution s=open.top();
 	open.pop();
 
+	std::cout << "Trying ";
+
+	s.dump(std::cout);
+
+	std::cout << " with broken deps [ ";
+
+	for(typename std::vector<dep>::const_iterator i=s.get_broken().begin();
+	    i!=s.get_broken().end(); ++i)
+	  std::cout << *i;
+
+	std::cout << " ], score " << s.get_score() << std::endl;
+
 	// If all dependencies are satisfied, we found a solution.
 	if(s.get_broken().empty())
 	  return s;

Modified: branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc	Fri Apr  8 00:19:18 2005
@@ -159,7 +159,9 @@
 
   dummy_version(string _name, const dummy_package *_package,
 		unsigned int id)
-    :name(_name), package(_package), ID(id) {}
+    :name(_name), package(_package), ID(id)
+  {
+  }
 
   string get_name() const {return name;}
   unsigned int get_id() const {return ID;}
@@ -450,6 +452,9 @@
 
     broken_dep_iterator &operator++()
     {
+      if(realiter!=realend)
+	++realiter;
+
       while(realiter!=realend && !(*realiter)->broken())
 	++realiter;
 
@@ -582,6 +587,17 @@
 
 typedef generic_problem_resolver<dummy_universe> dummy_resolver;
 
+ostream &operator<<(ostream &out, const dummy_resolver::dep &d)
+{
+  out << d.get_source().get_name() << " -> { ";
+  for(dummy_resolver::dep::solver_iterator i=d.solvers_begin();
+      i!=d.solvers_end(); ++i)
+    out << (*i).get_name() << ", ";
+  out << "}, ";
+
+  return out;
+}
+
 // To make things easier, the tests are specified as plaintext files.
 // The syntax is quite simple: it consists of whitespace-separated
 // words, of the form: