[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