From 05c5b8a62369208c363e132f8cc5aed295d6cc9f Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Sun, 24 Nov 2002 22:24:38 +0000 Subject: [PATCH] 2002-11-25 Robert Collins * package_version.cc (DependencyProcessor): Create convenience class. (select): Extract version selection method. (processOneDependency): Check for a satisfactory trusted version first. --- ChangeLog | 11 +++++++++-- package_version.cc | 46 +++++++++++++++++++++++++++++++++------------- package_version.h | 2 +- 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 76c5636d..61471a5e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,11 +1,18 @@ -2002-11-10 Robert Collins +2002-11-25 Robert Collins + + * 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 * 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 +2002-11-10 Robert Collins * main.cc (main): Oops, pass LogSingleton a reference, not a pointer. diff --git a/package_version.cc b/package_version.cc index ccd9d6f0..91db428e 100644 --- a/package_version.cc +++ b/package_version.cc @@ -342,6 +342,27 @@ checkForSatisfiable (PackageSpecification *spec) 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) { @@ -351,22 +372,21 @@ 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 ::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 diff --git a/package_version.h b/package_version.h index ce7bb02e..0150afaa 100644 --- a/package_version.h +++ b/package_version.h @@ -140,7 +140,7 @@ public: /* ensure that the depends clause is satisfied */ int set_requirements (trusts deftrust = TRUST_CURR, size_t depth = 0); - + private: _packageversion *data; /* Invariant: * data is always valid */ }; -- 2.43.5