diff --git a/britney.py b/britney.py index be35d17..49e1559 100755 --- a/britney.py +++ b/britney.py @@ -2880,6 +2880,10 @@ class Britney(object): if y not in sources_t or sources_t[y][VERSION] != excuses[y].ver[1]) excuses_deps = {name: valid_excuses.intersection(excuse.deps) for name, excuse in excuses.items() if name in valid_excuses} + excuses_rdeps = defaultdict(set) + for name, deps in excuses_deps.items(): + for dep in deps: + excuses_rdeps[dep].add(name) def find_related(e, hint, circular_first=False): excuse = excuses[e] @@ -2916,9 +2920,9 @@ class Britney(object): for item, ver in items: # excuses which depend on "item" or are depended on by it - new_items = set((x, excuses[x].ver[1]) for x in valid_excuses if - (item in excuses_deps[x] or x in excuses_deps[item]) and - (x, excuses[x].ver[1]) not in seen_items) + new_items = set((x, excuses[x].ver[1]) for x in excuses_deps[item]) + new_items.update((x, excuses[x].ver[1]) for x in excuses_rdeps[item]) + new_items -= seen_items items.extend(new_items) seen_items.update(new_items)