]> cygwin.com Git - cygwin-apps/setup.git/commitdiff
2002-11-25 Robert Collins <rbtcollins@hotmail.com>
authorRobert Collins <rbtcollins@hotmail.com>
Sun, 24 Nov 2002 22:24:38 +0000 (22:24 +0000)
committerRobert Collins <rbtcollins@hotmail.com>
Sun, 24 Nov 2002 22:24:38 +0000 (22:24 +0000)
        * package_version.cc (DependencyProcessor): Create convenience class.
        (select): Extract version selection method.
        (processOneDependency): Check for a satisfactory trusted version
        first.

ChangeLog
package_version.cc
package_version.h

index 76c5636d0962f59e7e82a0dd75e197b490634071..61471a5edc3ef77e0a0c0a2e43bc6dc208b8cfc1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,11 +1,18 @@
-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.
 
index ccd9d6f0b8c361679a6b3c7154e363b9c77b80a7..91db428e0172d969d9d70d9528628240cdaa705e 100644 (file)
@@ -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 <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
index ce7bb02e012c32c2841111195407a9bb9cf6a281..0150afaa166e1c485a13b6704bb72019d4181668 100644 (file)
@@ -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 */
 };
This page took 0.044771 seconds and 5 git commands to generate.