mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-05-02 14:11:30 +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])
|
if y not in sources_t or sources_t[y][VERSION] != excuses[y].ver[1])
|
||||||
excuses_deps = {name: valid_excuses.intersection(excuse.deps)
|
excuses_deps = {name: valid_excuses.intersection(excuse.deps)
|
||||||
for name, excuse in excuses.items() if name in valid_excuses}
|
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):
|
def find_related(e, hint, circular_first=False):
|
||||||
excuse = excuses[e]
|
excuse = excuses[e]
|
||||||
@ -2916,9 +2920,9 @@ class Britney(object):
|
|||||||
|
|
||||||
for item, ver in items:
|
for item, ver in items:
|
||||||
# excuses which depend on "item" or are depended on by it
|
# 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
|
new_items = set((x, excuses[x].ver[1]) for x in excuses_deps[item])
|
||||||
(item in excuses_deps[x] or x in excuses_deps[item]) and
|
new_items.update((x, excuses[x].ver[1]) for x in excuses_rdeps[item])
|
||||||
(x, excuses[x].ver[1]) not in seen_items)
|
new_items -= seen_items
|
||||||
items.extend(new_items)
|
items.extend(new_items)
|
||||||
seen_items.update(new_items)
|
seen_items.update(new_items)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user