[Aptitude-svn-commit] r4018 - in branches/aptitude-0.3/aptitude: .
src/generic src/generic/problemresolver
Daniel Burrows
dburrows at costa.debian.org
Wed Aug 31 19:31:14 UTC 2005
Author: dburrows
Date: Wed Aug 31 19:31:12 2005
New Revision: 4018
Modified:
branches/aptitude-0.3/aptitude/ChangeLog
branches/aptitude-0.3/aptitude/src/generic/aptitude_resolver_universe.cc
branches/aptitude-0.3/aptitude/src/generic/problemresolver/dummy_universe.cc
branches/aptitude-0.3/aptitude/src/generic/problemresolver/dummy_universe.h
branches/aptitude-0.3/aptitude/src/generic/problemresolver/solution.h
Log:
Canonicalize some of the resolver's debugging output.
Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog (original)
+++ branches/aptitude-0.3/aptitude/ChangeLog Wed Aug 31 19:31:12 2005
@@ -1,5 +1,10 @@
2005-08-31 Daniel Burrows <dburrows at debian.org>
+ * src/generic/problemresolver/dummy_universe.cc, src/generic/problemresolver/dummy_universe.h, src/generic/problemresolver/solution.h, src/generic/aptitude_resolver_universe.cc:
+
+ Canonicalize some of the debugging output of the resolver to
+ make it a bit easier to verify that it works properly.
+
* src/generic/problemresolver/dummy_universe.cc:
Don't put commas in the dumped form of dummy dependencies.
Modified: branches/aptitude-0.3/aptitude/src/generic/aptitude_resolver_universe.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/aptitude_resolver_universe.cc (original)
+++ branches/aptitude-0.3/aptitude/src/generic/aptitude_resolver_universe.cc Wed Aug 31 19:31:12 2005
@@ -2,6 +2,8 @@
#include "aptitude_resolver_universe.h"
+#include <problemresolver/solution.h>
+
#include <sstream>
using namespace std;
@@ -539,14 +541,22 @@
std::ostream &operator<<(ostream &out, aptitude_resolver_dep d)
{
+ std::vector<aptitude_resolver_version> solvers;
+ for(aptitude_resolver_dep::solver_iterator i=d.solvers_begin(); !i.end(); ++i)
+ solvers.push_back(*i);
+
+ generic_solution<aptitude_universe>::ver_name_lt lt;
+ sort(solvers.begin(), solvers.end(), lt);
+
out << d.get_source().get_package().get_name()
<< " "
<< d.get_source().get_name()
<< " -> {";
- for(aptitude_resolver_dep::solver_iterator i=d.solvers_begin(); !i.end(); ++i)
+ for(std::vector<aptitude_resolver_version>::const_iterator i = solvers.begin();
+ i != solvers.end(); ++i)
{
- if(i!=d.solvers_begin())
+ if(i != solvers.begin())
out << " ";
out << (*i).get_package().get_name() << " "
<< (*i).get_name();
Modified: branches/aptitude-0.3/aptitude/src/generic/problemresolver/dummy_universe.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/problemresolver/dummy_universe.cc (original)
+++ branches/aptitude-0.3/aptitude/src/generic/problemresolver/dummy_universe.cc Wed Aug 31 19:31:12 2005
@@ -41,6 +41,31 @@
throw NoSuchNameError("version of package "+name, the_name);
}
+struct ver_ptr_name_lt
+{
+public:
+ bool operator()(const dummy_version *v1,
+ const dummy_version *v2) const
+ {
+ int pncmp = v1->get_package().get_name().compare(v2->get_package().get_name());
+
+ if(pncmp != 0)
+ return pncmp < 0;
+ else
+ return v1->get_name() < v2->get_name();
+ }
+};
+
+dummy_dep::dummy_dep(dummy_version *_source,
+ const std::vector<dummy_version *> &_target_set,
+ unsigned int _ID, bool _soft)
+ :source(_source), target_set(_target_set), ID(_ID), soft(_soft)
+{
+
+ sort(target_set.begin(), target_set.end(),
+ ver_ptr_name_lt());
+}
+
bool dummy_dep::broken() const
{
if(source->get_package().current_version() != *source)
Modified: branches/aptitude-0.3/aptitude/src/generic/problemresolver/dummy_universe.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/problemresolver/dummy_universe.h (original)
+++ branches/aptitude-0.3/aptitude/src/generic/problemresolver/dummy_universe.h Wed Aug 31 19:31:12 2005
@@ -240,10 +240,7 @@
dummy_dep(dummy_version *_source,
const std::vector<dummy_version *> &_target_set,
- unsigned int _ID, bool _soft)
- :source(_source), target_set(_target_set), ID(_ID), soft(_soft)
- {
- }
+ unsigned int _ID, bool _soft);
bool is_soft() const
{
Modified: branches/aptitude-0.3/aptitude/src/generic/problemresolver/solution.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/problemresolver/solution.h (original)
+++ branches/aptitude-0.3/aptitude/src/generic/problemresolver/solution.h Wed Aug 31 19:31:12 2005
@@ -540,27 +540,115 @@
return real_soln->package_modified(pkg);
}
+ // The following operators are used to place the solution components
+ // in order by name, to better permit comparison of debugging output
+ // between versions.
+ struct package_action_pair_name_lt
+ {
+ public:
+ bool operator()(const std::pair<package, action> &p1,
+ const std::pair<package, action> &p2) const
+ {
+ return std::string(p1.first.get_name()) < p2.first.get_name();
+ }
+ };
+
+ struct ver_name_lt
+ {
+ public:
+ int cmp(const version &v1, const version &v2) const
+ {
+ // EW: I don't have a formal standard on what get_name()
+ // returns, so force it to be a string here:
+ int pcmp = std::string(v1.get_package().get_name()).compare(v2.get_package().get_name());
+
+ if(pcmp != 0)
+ return pcmp;
+ else
+ return std::string(v1.get_name()).compare(v2.get_name());
+ }
+
+ bool operator()(const version &v1, const version &v2) const
+ {
+ return cmp(v1, v2) < 0;
+ }
+ };
+
+ struct dep_name_lt
+ {
+ public:
+ bool operator()(const dep &d1, const dep &d2) const
+ {
+ ver_name_lt vlt;
+
+ int scmp = vlt.cmp(d1.get_source(), d2.get_source());
+
+ if(scmp != 0)
+ return scmp < 0;
+ else
+ {
+ typename dep::solver_iterator si1 = d1.solvers_begin();
+ typename dep::solver_iterator si2 = d2.solvers_begin();
+
+ while(!si1.end() && !si2.end())
+ {
+ scmp = vlt.cmp(*si1, *si2);
+
+ if(scmp != 0)
+ return scmp < 0;
+
+ ++si1;
+ ++si2;
+ }
+
+ if(si1.end())
+ {
+ if(si2.end())
+ return false;
+ else
+ return true;
+ }
+ else
+ return false;
+ }
+ }
+ };
+
void dump(std::ostream &out) const
{
+ std::vector<std::pair<package, action> > actions;
+ for(typename imm::map<package, action>::const_iterator i = get_actions().begin();
+ i != get_actions().end(); ++i)
+ actions.push_back(*i);
+ sort(actions.begin(), actions.end(), package_action_pair_name_lt());
+
+
out << "<";
- for(typename imm::map<package, action>::const_iterator i=get_actions().begin();
- i!=get_actions().end(); ++i)
+ for(typename std::vector<std::pair<package, action> >::const_iterator i = actions.begin();
+ i != actions.end(); ++i)
{
- if(i!=get_actions().begin())
+ if(i != actions.begin())
out << ", ";
out << i->first.get_name() << ":=" << i->second.ver.get_name();
}
out << ">;";
+ std::vector<dep> unresolved_deps;
+ for(typename imm::set<dep>::const_iterator i = get_unresolved_soft_deps().begin();
+ i != get_unresolved_soft_deps().end(); ++i)
+ unresolved_deps.push_back(*i);
+ sort(unresolved_deps.begin(), unresolved_deps.end(), dep_name_lt());
+
+
if(!get_unresolved_soft_deps().empty())
{
out << "<!";
- for(typename imm::set<dep>::const_iterator i
- = get_unresolved_soft_deps().begin();
- i != get_unresolved_soft_deps().end(); ++i)
+ for(typename std::vector<dep>::const_iterator i
+ = unresolved_deps.begin();
+ i != unresolved_deps.end(); ++i)
{
- if(i != get_unresolved_soft_deps().begin())
+ if(i != unresolved_deps.begin())
out << ", ";
out << *i;
}
@@ -568,12 +656,18 @@
out << "!>;";
}
+ std::vector<dep> broken_deps;
+ for(typename imm::set<dep>::const_iterator i = get_broken().begin();
+ i != get_broken().end(); ++i)
+ broken_deps.push_back(*i);
+ sort(broken_deps.begin(), broken_deps.end(), dep_name_lt());
+
out << "[";
- for(typename imm::set<dep>::const_iterator i=get_broken().begin();
- i!=get_broken().end(); ++i)
+ for(typename std::vector<dep>::const_iterator i = broken_deps.begin();
+ i != broken_deps.end(); ++i)
{
- if(i!=get_broken().begin())
+ if(i != broken_deps.begin())
out << ", ";
out << *i;
}
@@ -582,13 +676,19 @@
if(!get_forbidden_versions().empty())
{
+ std::vector<version> forbidden_vers;
+ for(typename imm::map<version, dep>::const_iterator i = get_forbidden_versions().begin();
+ i != get_forbidden_versions().end(); ++i)
+ forbidden_vers.push_back(i->first);
+ sort(forbidden_vers.begin(), forbidden_vers.end(), ver_name_lt());
+
out << "!!";
- for(typename imm::map<version, dep>::const_iterator i=get_forbidden_versions().begin();
- i!=get_forbidden_versions().end(); ++i)
+ for(typename std::vector<version>::const_iterator i = forbidden_vers.begin();
+ i != forbidden_vers.end(); ++i)
{
- if(i!=get_forbidden_versions().begin())
+ if(i != forbidden_vers.begin())
out << ", ";
- out << i->first.get_package().get_name() << " " << i->first.get_name();
+ out << i->get_package().get_name() << " " << i->get_name();
}
out << "!!;";
}
More information about the Aptitude-svn-commit
mailing list