-2002-11-10 Robert Collins <rbtcollins@hotmail.com>
+2002-11-25 Robert Collins <rbtcollins@hotmail.com>
+
+ * package_version.cc (DependencyProcessor): Create convenience class.
+ (select): Extract version selection method.
+ (processOneDependency): Check for a satisfactory trusted version
+ first.
+
+2002-11-10 Robert Collins <rbtcollins@hotmail.com>
* main.cc (main): Use the factory for LogFile.
* String++.cc: Update to use sstream.
(String::String): Use a ostringstream for libC++ 3.2.
* LogFile.h (LogFile): Make createLogFile static.
-2002-11-10 Robert Collins <rbtcollins@hotmail.com>
+2002-11-10 Robert Collins <rbtcollins@hotmail.com>
* main.cc (main): Oops, pass LogSingleton a reference, not a pointer.
return false;
}
+/* Convenience class for now */
+class DependencyProcessor {
+public:
+ DependencyProcessor (trusts const &aTrust, int aDepth=0) : deftrust (aTrust), depth (aDepth) {}
+ trusts const deftrust;
+ size_t depth;
+};
+
+static int
+select (DependencyProcessor &processor, packagemeta *required, packageversion const &aVersion)
+{
+ /* preserve source */
+ bool sourceticked = required->desired.sourcePackage().picked();
+ /* install this version */
+ required->desired = aVersion;
+ required->desired.pick (required->installed != required->desired);
+ required->desired.sourcePackage().pick (sourceticked);
+ /* does this requirement have requirements? */
+ return required->set_requirements (processor.deftrust, processor.depth + 1);
+}
+
static int
processOneDependency(trusts deftrust, size_t depth, PackageSpecification *spec)
{
desired */
packagedb db;
packagemeta *required = db.findBinary (*spec);
+ DependencyProcessor processor (deftrust, depth);
+
+ packageversion trusted = required->trustp(deftrust);
+ if (spec->satisfies (trusted))
+ select (processor,required,trusted);
+
set <packageversion>::iterator v;
for (v = required->versions.begin();
v != required->versions.end() && !spec->satisfies (*v); ++v);
- if (v != required->versions.end())
- {
- /* preserve source */
- bool sourceticked = required->desired.sourcePackage().picked();
- /* install this version */
- required->desired = *v;
- required->desired.pick (required->installed != required->desired);
- required->desired.sourcePackage().pick (sourceticked);
- /* does this requirement have requirements? */
- return required->set_requirements (deftrust, depth + 1);
- }
- /* else assert !! */
- return 0;
+
+ if (v == required->versions.end())
+ /* assert ?! */
+ return 0;
+
+ return select (processor, required, *v);
}
int