From 52e73b64c2266661072b1ce09c4fd355a19b91db Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Tue, 6 Mar 2018 10:15:37 +0100 Subject: [PATCH] mmd_resolver: store alternatives per source package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Input: * (c0) gtk: [1] + foo: [1] * (c1) gtk: [1] + foo: [1, 2] Before: * c0 + gtk:1 + foo:1 * c1 + gtk:1 + foo:2 After: * c0 + gtk:1 + foo:1 * c1 + gtk:1 + foo:1 * c1 + gtk:1 + foo:2 Acked-by: Jan Kaluža Signed-off-by: Igor Gnatenko --- module_build_service/mmd_resolver.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/module_build_service/mmd_resolver.py b/module_build_service/mmd_resolver.py index 15676289..39afbdc7 100644 --- a/module_build_service/mmd_resolver.py +++ b/module_build_service/mmd_resolver.py @@ -129,12 +129,13 @@ class MMDResolver(object): for src in solvables: job = self.pool.Job(solv.Job.SOLVER_INSTALL | solv.Job.SOLVER_SOLVABLE, src.id) requires = src.lookup_deparray(solv.SOLVABLE_REQUIRES) + alts = alternatives[src] = {} # XXX: can be optimized by favoring just by name, but requires additional handling # of context due to name which would contain just N:S. for opt in itertools.product(*[self.pool.whatprovides(dep) for dep in requires]): - log.debug("Testing combination: %s", opt) + log.debug("Testing %s with combination: %s", src, opt) key = tuple(":".join(s.name.split(":", 2)[:2]) for s in opt) - if key in alternatives: + if key in alts: log.debug("%s was already resolved, skipping", key) continue jobs = [self.pool.Job(solv.Job.SOLVER_FAVOR | solv.Job.SOLVER_SOLVABLE, s.id) @@ -150,7 +151,7 @@ class MMDResolver(object): log.debug("Transaction:") for s in newsolvables: log.debug(" - %s", s) - alternatives[key] = newsolvables + alts[key] = newsolvables - return set(frozenset("%s:%s" % (s.name, s.arch) for s in trans) - for trans in alternatives.values()) + return set(frozenset("%s:%s" % (s.name, s.arch) for s in t) + for trans in alternatives.values() for t in trans.values())