1 |
Author: zmedico |
2 |
Date: 2008-05-08 09:26:47 +0000 (Thu, 08 May 2008) |
3 |
New Revision: 10229 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/_emerge/__init__.py |
7 |
Log: |
8 |
Fix findInstalledBlockers() to check for blockers in both directions. |
9 |
|
10 |
|
11 |
Modified: main/trunk/pym/_emerge/__init__.py |
12 |
=================================================================== |
13 |
--- main/trunk/pym/_emerge/__init__.py 2008-05-08 08:41:31 UTC (rev 10228) |
14 |
+++ main/trunk/pym/_emerge/__init__.py 2008-05-08 09:26:47 UTC (rev 10229) |
15 |
@@ -1532,22 +1532,6 @@ |
16 |
self._installed_pkgs = None |
17 |
|
18 |
def findInstalledBlockers(self, new_pkg): |
19 |
- self._update_cache() |
20 |
- blocker_parents = digraph() |
21 |
- blocker_atoms = [] |
22 |
- for pkg in self._installed_pkgs: |
23 |
- for blocker_atom in self._blocker_cache[pkg.cpv].atoms: |
24 |
- blocker_atom = blocker_atom[1:] |
25 |
- blocker_atoms.append(blocker_atom) |
26 |
- blocker_parents.add(blocker_atom, pkg) |
27 |
- |
28 |
- blocker_atoms = InternalPackageSet(initial_atoms=blocker_atoms) |
29 |
- blocking_pkgs = set() |
30 |
- for atom in blocker_atoms.iterAtomsForPackage(new_pkg): |
31 |
- blocking_pkgs.update(blocker_parents.parent_nodes(atom)) |
32 |
- return blocking_pkgs |
33 |
- |
34 |
- def _update_cache(self): |
35 |
blocker_cache = self._blocker_cache |
36 |
dep_keys = ["DEPEND", "RDEPEND", "PDEPEND"] |
37 |
dep_check_trees = self._dep_check_trees |
38 |
@@ -1596,6 +1580,46 @@ |
39 |
del blocker_cache[cpv] |
40 |
blocker_cache.flush() |
41 |
|
42 |
+ blocker_parents = digraph() |
43 |
+ blocker_atoms = [] |
44 |
+ for pkg in self._installed_pkgs: |
45 |
+ for blocker_atom in self._blocker_cache[pkg.cpv].atoms: |
46 |
+ blocker_atom = blocker_atom[1:] |
47 |
+ blocker_atoms.append(blocker_atom) |
48 |
+ blocker_parents.add(blocker_atom, pkg) |
49 |
+ |
50 |
+ blocker_atoms = InternalPackageSet(initial_atoms=blocker_atoms) |
51 |
+ blocking_pkgs = set() |
52 |
+ for atom in blocker_atoms.iterAtomsForPackage(new_pkg): |
53 |
+ blocking_pkgs.update(blocker_parents.parent_nodes(atom)) |
54 |
+ |
55 |
+ # Check for blockers in the other direction. |
56 |
+ myuse = new_pkg.metadata["USE"].split() |
57 |
+ depstr = " ".join(new_pkg.metadata[k] for k in dep_keys) |
58 |
+ try: |
59 |
+ portage.dep._dep_check_strict = False |
60 |
+ success, atoms = portage.dep_check(depstr, |
61 |
+ vardb, settings, myuse=myuse, |
62 |
+ trees=dep_check_trees, myroot=new_pkg.root) |
63 |
+ finally: |
64 |
+ portage.dep._dep_check_strict = True |
65 |
+ if not success: |
66 |
+ # We should never get this far with invalid deps. |
67 |
+ show_invalid_depstring_notice(new_pkg, depstr, atoms) |
68 |
+ assert False |
69 |
+ |
70 |
+ blocker_atoms = [atom[1:] for atom in atoms \ |
71 |
+ if atom.startswith("!")] |
72 |
+ blocker_atoms = InternalPackageSet(initial_atoms=blocker_atoms) |
73 |
+ for inst_pkg in self._installed_pkgs: |
74 |
+ try: |
75 |
+ blocker_atoms.iterAtomsForPackage(inst_pkg).next() |
76 |
+ except (portage.exception.InvalidDependString, StopIteration): |
77 |
+ continue |
78 |
+ blocking_pkgs.add(inst_pkg) |
79 |
+ |
80 |
+ return blocking_pkgs |
81 |
+ |
82 |
def show_invalid_depstring_notice(parent_node, depstring, error_msg): |
83 |
|
84 |
from formatter import AbstractFormatter, DumbWriter |
85 |
|
86 |
-- |
87 |
gentoo-commits@l.g.o mailing list |