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