[Aptitude-svn-commit] r3864 - in branches/aptitude-0.3/aptitude: .
src src/cmdline
Daniel Burrows
dburrows at costa.debian.org
Tue Aug 16 18:29:03 UTC 2005
Author: dburrows
Date: Tue Aug 16 18:28:59 2005
New Revision: 3864
Modified:
branches/aptitude-0.3/aptitude/ChangeLog
branches/aptitude-0.3/aptitude/src/cmdline/cmdline_resolver.cc
branches/aptitude-0.3/aptitude/src/solution_fragment.cc
branches/aptitude-0.3/aptitude/src/solution_fragment.h
Log:
Print out a list of unresolved dependencies at the command line.
Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog (original)
+++ branches/aptitude-0.3/aptitude/ChangeLog Tue Aug 16 18:28:59 2005
@@ -1,5 +1,11 @@
2005-08-16 Daniel Burrows <dburrows at debian.org>
+ * src/cmdline/cmdline_resolver.cc, src/solution_fragment.cc, src/solution_fragment.h:
+
+ Move some code for formatting information relevant to solutions
+ into solution_fragment.cc, and use it to output a list of
+ unresolved soft dependencies.
+
* src/generic/problemresolver/problemresolver.h:
When looking for forced deps, leave soft deps with exactly one
Modified: branches/aptitude-0.3/aptitude/src/cmdline/cmdline_resolver.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/cmdline/cmdline_resolver.cc (original)
+++ branches/aptitude-0.3/aptitude/src/cmdline/cmdline_resolver.cc Tue Aug 16 18:28:59 2005
@@ -55,76 +55,6 @@
}
};
-/** Generate descriptive text about the targets of a dependency. */
-static fragment *dep_targets_fragment(const pkgCache::DepIterator &start)
-{
- string rval;
-
- bool is_first = true;
-
- assert(!start.end());
-
- for(pkgCache::DepIterator d = start; !d.end(); ++d)
- {
- if(is_first)
- is_first = false;
- else
- rval += " | ";
-
- rval += d.TargetPkg().Name();
-
- if(d.TargetVer())
- {
- rval += " (";
- rval += d.CompType();
- rval += " ";
- rval += d.TargetVer();
- rval += ")";
- }
-
- if((d->CompareOp & pkgCache::Dep::Or) == 0)
- break;
- }
-
- return text_fragment(rval);
-}
-
-/** Generate descriptive text about a single dependency. */
-static fragment *dep_fragment(const pkgCache::DepIterator &d)
-{
- const char *name = const_cast<pkgCache::DepIterator &>(d).ParentPkg().Name();
- fragment *targets = dep_targets_fragment(d);
-
- switch(d->Type)
- {
- case pkgCache::Dep::Depends:
- return fragf(_("%s depends upon %F"), name, targets);
- case pkgCache::Dep::PreDepends:
- return fragf(_("%s pre-depends upon %F"), name, targets);
- case pkgCache::Dep::Suggests:
- return fragf(_("%s suggests %F"), name, targets);
- case pkgCache::Dep::Recommends:
- return fragf(_("%s recommends %F"), name, targets);
- case pkgCache::Dep::Conflicts:
- return fragf(_("%s conflicts with %F"), name, targets);
- case pkgCache::Dep::Replaces:
- case pkgCache::Dep::Obsoletes:
- // Should never happen.
- abort();
- }
-}
-
-/** Generate a fragment describing a single action. */
-static fragment *action_fragment(const aptitude_solution::action &a)
-{
- if(a.ver.get_ver().end())
- return fragf(_("Removing %s"), a.ver.get_pkg().Name());
- else
- return fragf(_("Installing %s %s (%F)"),
- a.ver.get_pkg().Name(), a.ver.get_ver().VerStr(),
- archives_fragment(a.ver.get_ver()));
-}
-
/** Generate a fragment describing a solution as an ordered sequence
* of actions.
*/
Modified: branches/aptitude-0.3/aptitude/src/solution_fragment.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/solution_fragment.cc (original)
+++ branches/aptitude-0.3/aptitude/src/solution_fragment.cc Tue Aug 16 18:28:59 2005
@@ -53,9 +53,6 @@
}
};
-/** \return a fragment listing the archives to which a version
- * belongs in the form "archive1,archive2,..."
- */
fragment *archives_fragment(const pkgCache::VerIterator &v)
{
vector<fragment *> archive_fragments;
@@ -71,6 +68,76 @@
return join_fragments(archive_fragments, L",");
}
+fragment *dep_targets_fragment(const pkgCache::DepIterator &start)
+{
+ string rval;
+
+ bool is_first = true;
+
+ assert(!start.end());
+
+ for(pkgCache::DepIterator d = start; !d.end(); ++d)
+ {
+ if(is_first)
+ is_first = false;
+ else
+ rval += " | ";
+
+ rval += d.TargetPkg().Name();
+
+ if(d.TargetVer())
+ {
+ rval += " (";
+ rval += d.CompType();
+ rval += " ";
+ rval += d.TargetVer();
+ rval += ")";
+ }
+
+ if((d->CompareOp & pkgCache::Dep::Or) == 0)
+ break;
+ }
+
+ return text_fragment(rval);
+}
+
+fragment *dep_fragment(const pkgCache::DepIterator &d)
+{
+ const char *name = const_cast<pkgCache::DepIterator &>(d).ParentPkg().Name();
+ fragment *targets = dep_targets_fragment(d);
+
+ switch(d->Type)
+ {
+ case pkgCache::Dep::Depends:
+ return fragf(_("%s depends upon %F"), name, targets);
+ case pkgCache::Dep::PreDepends:
+ return fragf(_("%s pre-depends upon %F"), name, targets);
+ case pkgCache::Dep::Suggests:
+ return fragf(_("%s suggests %F"), name, targets);
+ case pkgCache::Dep::Recommends:
+ return fragf(_("%s recommends %F"), name, targets);
+ case pkgCache::Dep::Conflicts:
+ return fragf(_("%s conflicts with %F"), name, targets);
+ case pkgCache::Dep::Replaces:
+ case pkgCache::Dep::Obsoletes:
+ // Should never happen.
+ abort();
+ default:
+ abort();
+ }
+}
+
+fragment *action_fragment(const aptitude_solution::action &a)
+{
+ if(a.ver.get_ver().end())
+ return fragf(_("Removing %s"), a.ver.get_pkg().Name());
+ else
+ return fragf(_("Installing %s %s (%F)"),
+ a.ver.get_pkg().Name(), a.ver.get_ver().VerStr(),
+ archives_fragment(a.ver.get_ver()));
+}
+
+
fragment *solution_fragment(const aptitude_solution &sol)
{
// Bin packages according to what will happen to them.
@@ -205,6 +272,17 @@
fragments.push_back(newline_fragment());
}
+ const set<aptitude_universe::dep> &unresolved = sol.get_unresolved_soft_deps();
+
+ if(!unresolved.empty())
+ {
+ fragments.push_back(fragf(_("Leave the following dependencies unresolved:%n")));
+
+ for(set<aptitude_universe::dep>::const_iterator i = unresolved.begin();
+ i != unresolved.end(); ++i)
+ fragments.push_back(dep_fragment((*i).get_dep()));
+ }
+
char buf[512];
snprintf(buf, 512, _("Score is %d"), sol.get_score());
fragments.push_back(fragf("%s", buf));
Modified: branches/aptitude-0.3/aptitude/src/solution_fragment.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/solution_fragment.h (original)
+++ branches/aptitude-0.3/aptitude/src/solution_fragment.h Tue Aug 16 18:28:59 2005
@@ -17,17 +17,22 @@
// the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
// Boston, MA 02111-1307, USA.
//
-// Code to convert an aptitude resolver solution to a fragment.
+// Code to convert an aptitude resolver solution and some of its
+// individual components to fragments.
#ifndef SOLUTION_FRAGMENT_H
#define SOLUTION_FRAGMENT_H
#include <apt-pkg/pkgcache.h>
+// For aptitude_solution::action
+#include <generic/problemresolver/solution.h>
+
+// So passing aptitude_solution::action to a function is legal
+#include <generic/aptitude_resolver_universe.h>
+
class fragment;
class aptitude_universe;
-template<class PackageUniverse>
-class generic_solution;
fragment *solution_fragment(const generic_solution<aptitude_universe> &solution);
@@ -36,4 +41,13 @@
*/
fragment *archives_fragment(const pkgCache::VerIterator &v);
+/** \return a fragment describing the given action. */
+fragment *action_fragment(const generic_solution<aptitude_universe>::action &a);
+
+/** \return descriptive text about a single dependency. */
+fragment *dep_fragment(const pkgCache::DepIterator &d);
+
+/** \return descriptive text about the targets of a dependency. */
+fragment *dep_targets_fragment(const pkgCache::DepIterator &start);
+
#endif // SOLUTION_FRAGMENT_H
More information about the Aptitude-svn-commit
mailing list