[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