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