[Piuparts-commits] [SCM] piuparts git repository branch, develop, updated. 0.45-102-g4c48ac2

Andreas Beckmann debian at abeckmann.de
Fri Aug 3 08:51:41 UTC 2012


The following commit has been merged in the develop branch:
commit 9761a247831cd529c0b974828b572121dfb31305
Author: Andreas Beckmann <debian at abeckmann.de>
Date:   Tue Jun 19 17:17:31 2012 +0200

    lib/db: split lookup from compute
    
    do the lookup part only once and lookup all packages
    before resolving more complicated states
    
    Signed-off-by: Andreas Beckmann <debian at abeckmann.de>

diff --git a/piupartslib/packagesdb.py b/piupartslib/packagesdb.py
index e63d448..2fd4cd1 100644
--- a/piupartslib/packagesdb.py
+++ b/piupartslib/packagesdb.py
@@ -371,7 +371,7 @@ class PackagesDB:
                     more += dep_pkg.dependencies()
         return circular
 
-    def _compute_package_state(self, package):
+    def _lookup_package_state(self, package):
         if self._logdb.log_exists(package, [self._ok]):
             return "successfully-tested"
         if self._logdb.log_exists(package, [self._fail] + self._morefail):
@@ -381,6 +381,9 @@ class PackagesDB:
         if not package.is_testable():
             return "essential-required"
 
+        return "unknown"
+
+    def _compute_package_state(self, package):
         # First attempt to resolve (still-unresolved) multiple alternative depends
         # Definitely sub-optimal, but improvement over blindly selecting first one
         # Select the first alternative in the highest of the following states:
@@ -472,26 +475,30 @@ class PackagesDB:
         if self._in_state is not None:
             return
 
-        todo = []
-
         self._find_all_packages()
-        package_names = self._packages.keys()
 
         self._package_state = {}
-        for package_name in package_names:
-            self._package_state[package_name] = "unknown"
-
         self._in_state = {}
         for state in self._states:
             self._in_state[state] = []
+        todo = []
+
+        for package_name, package in self._packages.iteritems():
+            state = self._lookup_package_state(package)
+            assert state in self._states
+            self._package_state[package_name] = state
+            if state == "unknown":
+                todo.append(package_name)
+            else:
+                self._in_state[state].append(package_name)
 
-        while package_names:
+        while todo:
+            package_names = todo
             todo = []
             done = []
             for package_name in package_names:
-                package = self._packages[package_name]
                 if self._package_state[package_name] == "unknown":
-                    state = self._compute_package_state(package)
+                    state = self._compute_package_state(self._packages[package_name])
                     assert state in self._states
                     if state == "unknown":
                         todo.append(package_name)
@@ -503,7 +510,6 @@ class PackagesDB:
                 # If we didn't do anything this time, we sure aren't going
                 # to do anything the next time either.
                 break
-            package_names = todo
 
         self._in_state["unknown"] = todo
 

-- 
piuparts git repository



More information about the Piuparts-commits mailing list