# HG changeset patch # User Paul Boddie # Date 1481845865 -3600 # Node ID 28107bf512b792c36ff1a072b00abf6c242cd14a # Parent 70d826ac75105374975e9f2cb0e64e4eaec37619 Catalogue the references involved with dependencies. diff -r 70d826ac7510 -r 28107bf512b7 importer.py --- a/importer.py Thu Dec 15 23:52:11 2016 +0100 +++ b/importer.py Fri Dec 16 00:51:05 2016 +0100 @@ -400,6 +400,7 @@ self.waiting = {} self.depends = {} + self.depend_refs = {} for module in self.modules.values(): @@ -476,6 +477,7 @@ if not ref.static() or self.uses_dynamic_callable(ref): self.add_provider(module_name, provider) + self.add_dependency(module_name, provider, ref) def add_provider(self, module_name, provider): @@ -484,6 +486,13 @@ init_item(self.depends, module_name, set) self.depends[module_name].add(provider) + def add_dependency(self, module_name, provider, ref): + + "Add dependency details for 'module_name' and 'provider' involving 'ref'." + + init_item(self.depend_refs, (module_name, provider), set) + self.depend_refs[(module_name, provider)].add(ref) + def require_providers(self, module_name): """ @@ -555,11 +564,11 @@ for module_name in module_names: usage[module_name] = 0 - for module_name, depend_names in self.depends.items(): + for module_name, depends in self.depends.items(): if module_name in module_names: - for depend_name in depend_names: - if depend_name in module_names: - usage[depend_name] += 1 + for provider in depends: + if provider in module_names: + usage[provider] += 1 # Produce an ordering by obtaining exposed modules (required by modules # already processed) and putting them at the start of the list. @@ -614,7 +623,11 @@ l = [] for module_name, provider in mutual: - l.append("(%s <-> %s)" % (module_name, provider)) + refs = self.depend_refs.get((module_name, provider)) or set() + refs.update(self.depend_refs.get((provider, module_name)) or set()) + refs = list(refs) + refs.sort() + l.append("%s <-> %s\n %s" % (module_name, provider, "\n ".join(map(str, refs)))) raise ProgramError, "Modules may not depend on each other for non-static objects:\n%s" % "\n".join(l)