[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