[Aptitude-devel] r2950 - branches/aptitude-0.3/aptitude/src/generic/problemresolver
Daniel Burrows
dburrows@costa.debian.org
Fri, 08 Apr 2005 03:30:54 +0000
Author: dburrows
Date: Fri Apr 8 03:30:53 2005
New Revision: 2950
Modified:
branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc
branches/aptitude-0.3/aptitude/src/generic/problemresolver/test1.txt
Log:
Proper conflicts support in test files.
Modified: branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc (original)
+++ branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc Fri Apr 8 03:30:53 2005
@@ -512,6 +512,22 @@
/** Indexes packages by name. */
map<string, dummy_package *> packages_by_name;
+ struct compare_dummy_packages
+ {
+ bool operator()(dummy_package *p1, dummy_package *p2)
+ {
+ return p1->get_id() < p2->get_id();
+ }
+ };
+
+ struct compare_dummy_versions
+ {
+ bool operator()(dummy_version *v1, dummy_version *v2)
+ {
+ return v1->get_id() < v2->get_id();
+ }
+ };
+
public:
virtual ~dummy_universe()
{
@@ -557,7 +573,8 @@
* this is string-based.
*/
void add_dep(string pkg_name, string pkg_ver,
- const vector<pair<string, string> > &target_names)
+ const vector<pair<string, string> > &target_names,
+ bool is_conflict)
{
map<string, dummy_package *>::const_iterator pfound=packages_by_name.find(pkg_name);
@@ -566,7 +583,8 @@
dummy_package *pkg=pfound->second;
- vector<dummy_version *> targets;
+ set<dummy_version *, compare_dummy_versions> targets;
+ set<dummy_package *, compare_dummy_packages> packages;
for(vector<pair<string, string> >::const_iterator i=target_names.begin();
i!=target_names.end(); ++i)
@@ -575,14 +593,34 @@
if(pfound == packages_by_name.end())
throw NoSuchNameError("package", i->first);
- targets.push_back(pfound->second->version_from_name(i->second));
+ packages.insert(pfound->second);
+ targets.insert(pfound->second->version_from_name(i->second));
+ }
+
+ if(!is_conflict)
+ deps.push_back(new dummy_dep(pkg->version_from_name(pkg_ver),
+ vector<dummy_version *>(targets.begin(), targets.end()),
+ deps.size()));
+ else
+ {
+ set<dummy_version *> targets2;
+
+ for(set<dummy_package *>::const_iterator i=packages.begin();
+ i!=packages.end(); ++i)
+ for(dummy_package::version_iterator j=(*i)->versions_begin();
+ j!=(*i)->versions_end(); ++j)
+ if(targets.find(*j)==targets.end())
+ targets2.insert(*j);
+
+ deps.push_back(new dummy_dep(pkg->version_from_name(pkg_ver),
+ vector<dummy_version *>(targets2.begin(), targets2.end()),
+ deps.size()));
}
- deps.push_back(new dummy_dep(pkg->version_from_name(pkg_ver), targets, deps.size()));
dummy_dep *newdep=deps.back();
- for(vector<dummy_version *>::const_iterator i=targets.begin();
- i!=targets.end(); ++i)
+ for(dummy_dep::solver_iterator i=newdep->solvers_begin();
+ i!=newdep->solvers_end(); ++i)
(*i)->add_revdep(newdep);
}
@@ -787,7 +825,8 @@
throw ParseError("Unexpected EOF in dependency target list following package "+pkgname+" version "+vername);
}
- rval->add_dep(source.first, source.second, targets);
+ rval->add_dep(source.first, source.second, targets,
+ is_conflict);
}
}
Modified: branches/aptitude-0.3/aptitude/src/generic/problemresolver/test1.txt
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/problemresolver/test1.txt (original)
+++ branches/aptitude-0.3/aptitude/src/generic/problemresolver/test1.txt Fri Apr 8 03:30:53 2005
@@ -11,7 +11,7 @@
DEP p2 v1 -> < p3 v1 p3 v2 p3 v3 >
DEP p2 v2 -> < p3 v1 p3 v2 p3 v3 >
-DEP p2 v3 !! < p1 v2 p1 v3 >
+DEP p2 v1 !! < p1 v2 p1 v3 >
DEP p3 v1 -> < p4 v1 p4 v2 p4 v3 >