From 2bdddef33e1e456dba23cb51c321b2fc033cf308 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Sat, 28 Jul 2012 20:01:56 +0200 Subject: [PATCH] [entropy.client] speedup dependencies_test() with a bit of memoization --- lib/entropy/client/interfaces/dep.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/entropy/client/interfaces/dep.py b/lib/entropy/client/interfaces/dep.py index 008dee6ae..97d575985 100644 --- a/lib/entropy/client/interfaces/dep.py +++ b/lib/entropy/client/interfaces/dep.py @@ -38,6 +38,7 @@ class CalculatorsMixin: pdepend_id = etpConst['dependency_type_ids']['pdepend_id'] bdepend_id = etpConst['dependency_type_ids']['bdepend_id'] deps_not_matched = set() + deps_cache = set() # now look length = len(installed_packages) count = 0 @@ -57,9 +58,14 @@ class CalculatorsMixin: xdeps = self._installed_repository.retrieveDependencies(idpackage, exclude_deptypes = (pdepend_id, bdepend_id,)) + # filter out already matched pkgs + xdeps = [x for x in xdeps if x not in deps_cache] + deps_cache.update(xdeps) + needed_deps = [(x, self._installed_repository.atomMatch(x),) for \ x in xdeps] - deps_not_matched |= set([x for x, (y, z,) in needed_deps if y == -1]) + deps_not_matched |= set( + [x for x, (y, z,) in needed_deps if y == -1]) return deps_not_matched