Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:2.1.9 commit in: pym/_emerge/
Date: Wed, 04 May 2011 20:05:03
Message-Id: ba17e2e1eb19612d189f1dbb1280696acc0ac086.zmedico@gentoo
1 commit: ba17e2e1eb19612d189f1dbb1280696acc0ac086
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Tue Apr 26 23:57:20 2011 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Wed May 4 19:27:05 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=ba17e2e1
7
8 expand_new_virt: use stack for recursion
9
10 ---
11 pym/_emerge/actions.py | 49 ++++++++++++++++++++++++-----------------------
12 1 files changed, 25 insertions(+), 24 deletions(-)
13
14 diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
15 index 20b1e3c..7f228a4 100644
16 --- a/pym/_emerge/actions.py
17 +++ b/pym/_emerge/actions.py
18 @@ -1288,39 +1288,40 @@ def action_deselect(settings, trees, opts, atoms):
19 world_set.unlock()
20 return os.EX_OK
21
22 -def expand_new_virt(vardb, atom, _traversed=None):
23 +def expand_new_virt(vardb, atom):
24 """
25 Iterate over the recursively expanded RDEPEND atoms of
26 a new-style virtual. If atom is not a new-style virtual
27 or it does not match an installed package then it is
28 yielded without any expansion.
29 """
30 - matches = vardb.match(atom)
31 - if not (matches and portage.cpv_getkey(matches[-1]).startswith("virtual/")):
32 - yield atom
33 - return
34 -
35 - virt_cpv = matches[-1]
36 - rdepend, use = vardb.aux_get(virt_cpv, ["RDEPEND", "USE"])
37 - use = frozenset(use.split())
38 - success, atoms = portage.dep_check(rdepend,
39 - None, vardb.settings, myuse=use,
40 - myroot=vardb.root, trees={vardb.root:{"porttree":vardb.vartree,
41 - "vartree":vardb.vartree}})
42 + traversed = set()
43 + stack = [atom]
44 +
45 + while stack:
46 + atom = stack.pop()
47 + matches = vardb.match(atom)
48 + if not (matches and \
49 + portage.cpv_getkey(matches[-1]).startswith("virtual/")):
50 + yield atom
51 + continue
52
53 - if not success:
54 - yield atom
55 - return
56 + virt_cpv = matches[-1]
57 + if virt_cpv in traversed:
58 + continue
59
60 - if _traversed is None:
61 - _traversed = set([atom])
62 + traversed.add(virt_cpv)
63 + rdepend, use = vardb.aux_get(virt_cpv, ["RDEPEND", "USE"])
64 + use = frozenset(use.split())
65 + success, atoms = portage.dep_check(rdepend,
66 + None, vardb.settings, myuse=use,
67 + myroot=vardb.root, trees={vardb.root:{"porttree":vardb.vartree,
68 + "vartree":vardb.vartree}})
69
70 - for child1 in atoms:
71 - if child1 not in _traversed:
72 - _traversed.add(child1)
73 - for child2 in expand_new_virt(vardb, child1,
74 - _traversed=_traversed):
75 - yield child2
76 + if success:
77 + stack.extend(atoms)
78 + else:
79 + yield atom
80
81 class _info_pkgs_ver(object):
82 def __init__(self, ver, repo_suffix, provide_suffix):