[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: