[Aptitude-svn-commit] r3897 - in branches/aptitude-0.3/aptitude: . src src/cmdline src/generic src/generic/problemresolver

Daniel Burrows dburrows at costa.debian.org
Wed Aug 17 19:13:20 UTC 2005


Author: dburrows
Date: Wed Aug 17 19:13:17 2005
New Revision: 3897

Modified:
   branches/aptitude-0.3/aptitude/ChangeLog
   branches/aptitude-0.3/aptitude/src/cmdline/cmdline_resolver.cc
   branches/aptitude-0.3/aptitude/src/generic/aptcache.cc
   branches/aptitude-0.3/aptitude/src/generic/aptcache.h
   branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h
   branches/aptitude-0.3/aptitude/src/solution_screen.cc
Log:
Push mandatory version handling down into the generic problem resolver class.

Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog	(original)
+++ branches/aptitude-0.3/aptitude/ChangeLog	Wed Aug 17 19:13:17 2005
@@ -1,5 +1,10 @@
 2005-08-17  Daniel Burrows  <dburrows at debian.org>
 
+	* src/generic/problemresolver/problemresolver.h, src/generic/aptcache.cc, src/generic/aptcache.h, src/solution_screen.cc:
+
+	  Push the mandatory-version handling down into the generic
+	  problem resolver class.
+
 	* doc/en/aptitude.xml:
 
 	  Document SearchBack and that '\' is no longer ReSearch.

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	Wed Aug 17 19:13:17 2005
@@ -123,6 +123,8 @@
 				",: %F"
 				".: %F"
 				"o: %F"
+				"r pkg ver ...: %F%n"
+				"a pkg ver ...: %F%n"
 				"<ACTION> pkg... : %F%n"
 				"%F"
 				"%F"
@@ -145,6 +147,10 @@
 			      flowindentbox(0, 3,
 					    fragf(_("view an explanation of the changes in the solution"))),
 			      flowindentbox(0, 3,
+					    fragf(_("reject the given package versions; don't display any solutions in which they occur."))),
+			      flowindentbox(0, 3,
+					    fragf(_("accept the given package versions; display only solutions in which they occur."))),
+			      flowindentbox(0, 3,
 					    fragf(_("adjust the state of the listed packages, where ACTION is one of:"))),
 			      flowindentbox(0, 4,
 					    fragf(_("'+' to install packages"))),

Modified: branches/aptitude-0.3/aptitude/src/generic/aptcache.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/aptcache.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/generic/aptcache.cc	Wed Aug 17 19:13:17 2005
@@ -1453,6 +1453,27 @@
   return resolver->is_rejected(ver);
 }
 
+void aptitudeDepCache::resolver_mandate_version(const aptitude_resolver_version &ver)
+{
+  assert(resolver);
+
+  resolver->mandate_version(ver);
+}
+
+void aptitudeDepCache::resolver_unmandate_version(const aptitude_resolver_version &ver)
+{
+  assert(resolver);
+
+  resolver->unmandate_version(ver);
+}
+
+bool aptitudeDepCache::resolver_is_mandatory(const aptitude_resolver_version &ver)
+{
+  assert(resolver);
+
+  return resolver->is_mandatory(ver);
+}
+
 void aptitudeDepCache::apply_current_solution(undo_group *undo)
 {
   aptitude_resolver::solution sol=get_current_solution();

Modified: branches/aptitude-0.3/aptitude/src/generic/aptcache.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/aptcache.h	(original)
+++ branches/aptitude-0.3/aptitude/src/generic/aptcache.h	Wed Aug 17 19:13:17 2005
@@ -456,6 +456,18 @@
    */
   bool resolver_is_rejected(const aptitude_resolver_version &ver);
 
+  /** Requires that resolver_exists() is \b true.  Like
+   *  resolver_reject_version, but rejects any solution that does \b
+   *  not install the given version.
+   */
+  void resolver_mandate_version(const aptitude_resolver_version &ver);
+
+  /** Cancels a resolver_mandate_version call. */
+  void resolver_unmandate_version(const aptitude_resolver_version &ver);
+
+  /** \return \b true if the given version is mandatory. */
+  bool resolver_is_mandatory(const aptitude_resolver_version &ver);
+
   /** Advance to the next solution.
    *
    *  \return the next solution.  This reference is not guaranteed to

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	Wed Aug 17 19:13:17 2005
@@ -1637,12 +1637,70 @@
     rejections_dirty = true;
   }
 
+  void mandate_version(const version &ver)
+  {
+    package p = ver.get_package();
+
+    for(typename package::version_iterator vi = p.versions_begin();
+	!vi.end(); ++vi)
+      {
+	version v2 = *vi;
+
+	if(v2 == ver)
+	  unreject_version(v2);
+	else
+	  reject_version(v2);
+      }
+  }
+
+  void unmandate_version(const version &ver)
+  {
+    if(!is_mandatory(ver))
+      return;
+
+    package p = ver.get_package();
+
+    for(typename package::version_iterator vi = p.versions_begin();
+	!vi.end(); ++vi)
+      {
+	version v2 = *vi;
+
+	if(v2 != ver)
+	  unreject_version(v2);
+      }
+  }
+
   /** Query whether the given version is rejected. */
   bool is_rejected(const version &ver) const
   {
     return user_rejected.find(ver) != user_rejected.end();
   }
 
+  /** Query whether the given version is mandated. */
+  bool is_mandatory(const version &ver) const
+  {
+    package p = ver.get_package();
+
+    for(typename package::version_iterator vi = p.versions_begin();
+	!vi.end(); ++vi)
+      {
+	version v2 = *vi;
+
+	if(v2 == ver)
+	  {
+	    if(is_rejected(v2))
+	      return false;
+	  }
+	else
+	  {
+	    if(!is_rejected(v2))
+	      return false;
+	  }
+      }
+
+    return true;
+  }
+
   /** Try to find the "next" solution: remove partial solutions from
    *  the open queue and place them in the closed queue until one of
    *  the following occurs:

Modified: branches/aptitude-0.3/aptitude/src/solution_screen.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/solution_screen.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/solution_screen.cc	Wed Aug 17 19:13:17 2005
@@ -272,26 +272,7 @@
   {
     assert((*apt_cache_file)->resolver_exists());
 
-    aptitude_universe::package p = ver.get_package();
-
-    for(aptitude_universe::package::version_iterator vi = p.versions_begin();
-	!vi.end(); ++vi)
-      {
-	aptitude_universe::version v2 = *vi;
-
-	if(v2 == ver)
-	  {
-	    if((*apt_cache_file)->resolver_is_rejected(v2))
-	      return false;
-	  }
-	else
-	  {
-	    if(!(*apt_cache_file)->resolver_is_rejected(v2))
-	      return false;
-	  }
-      }
-
-    return true;
+    return (*apt_cache_file)->resolver_is_mandatory(ver);
   }
 
   void reject()
@@ -306,32 +287,12 @@
 
   void mandate()
   {
-    aptitude_universe::package p = ver.get_package();
-
-    for(aptitude_universe::package::version_iterator vi = p.versions_begin();
-	!vi.end(); ++vi)
-      {
-	aptitude_universe::version v2 = *vi;
-
-	if(v2 == ver)
-	  (*apt_cache_file)->resolver_unreject_version(v2);
-	else
-	  (*apt_cache_file)->resolver_reject_version(v2);
-      }
+    (*apt_cache_file)->resolver_mandate_version(ver);
   }
 
   void unmandate()
   {
-    aptitude_universe::package p = ver.get_package();
-
-    for(aptitude_universe::package::version_iterator vi = p.versions_begin();
-	!vi.end(); ++vi)
-      {
-	aptitude_universe::version v2 = *vi;
-
-	if(v2 != ver)
-	  (*apt_cache_file)->resolver_unreject_version(v2);
-      }
+    (*apt_cache_file)->resolver_unmandate_version(ver);
   }
 
   aptitude_universe::version get_ver() const



More information about the Aptitude-svn-commit mailing list