mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-04-07 16:38:43 +00:00
auto-hinter: Reduce size of inner loop
Reduce a "loop over all valid items" to a "loop over an item's dependencies + reverse dependencies". For sparse graphs, this is much more efficient. Signed-off-by: Niels Thykier <niels@thykier.net>
This commit is contained in:
parent
e517c3f315
commit
481f7fde08
10
britney.py
10
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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user