[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);
}
}
}