From: Dmitry Selyutin Date: Fri, 12 Jan 2018 20:05:54 +0000 (+0300) Subject: module: fix transitive closure algorithm X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=fa9e720c8a85a8b2236f7a7f0e16006bf46df674;p=gnulib.git module: fix transitive closure algorithm --- diff --git a/pygnulib/module.py b/pygnulib/module.py index a38fea218c..ad14e8c11f 100644 --- a/pygnulib/module.py +++ b/pygnulib/module.py @@ -622,6 +622,7 @@ class TransitiveClosure: raise TypeError("module: pygnulib.module.BaseModule expected") return module + handled = set() conditional = set() unconditional = set() demanders = _collections.defaultdict(dict) @@ -638,6 +639,8 @@ class TransitiveClosure: if not _exclude(dependency): demanders[None][dependency] = None dependencies[dependency][None] = None + modules.add(dependency) + dependency = demander except _UnknownModuleError: pass # ignore non-existent tests for (dependency, condition) in demander.dependencies: @@ -662,8 +665,9 @@ class TransitiveClosure: unconditional.add(dependency) demanders[demander][dependency] = None dependencies[dependency][demander] = condition - modules.add(dependency) - modules.discard(demander) + modules.add(dependency) + handled.add(demander) + modules.difference_update(handled) self.__lookup = _lookup self.__demanders = demanders