Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r10465 - in main/trunk/pym: _emerge portage
Date: Wed, 28 May 2008 08:31:10
Message-Id: E1K1H3r-0004gr-Hm@stork.gentoo.org
1 Author: zmedico
2 Date: 2008-05-28 08:31:06 +0000 (Wed, 28 May 2008)
3 New Revision: 10465
4
5 Modified:
6 main/trunk/pym/_emerge/__init__.py
7 main/trunk/pym/portage/__init__.py
8 Log:
9 Bug #223447 - Adjust the "installed packages are masked" display to recognize
10 packages that are masked by keywords and are eligible for uninstallation by
11 depclean. This is a workaround for the fact that depclean may fail to
12 recognize that the package is eligible for uninstall due to differences in
13 visibility filtering which can lead to differences in || dep evaluation.
14 TODO: Share visibility code to fix this inconsistency.
15
16
17 Modified: main/trunk/pym/_emerge/__init__.py
18 ===================================================================
19 --- main/trunk/pym/_emerge/__init__.py 2008-05-28 01:35:55 UTC (rev 10464)
20 +++ main/trunk/pym/_emerge/__init__.py 2008-05-28 08:31:06 UTC (rev 10465)
21 @@ -1990,7 +1990,7 @@
22 self._displayed_list = None
23 self._pprovided_args = []
24 self._missing_args = []
25 - self._masked_installed = []
26 + self._masked_installed = set()
27 self._unsatisfied_deps_for_display = []
28 self._unsatisfied_blockers_for_display = None
29 self._circular_deps_for_display = None
30 @@ -2299,12 +2299,6 @@
31 del e
32 return 0
33
34 - if pkg.installed:
35 - # Warn if an installed package is masked and it
36 - # is pulled into the graph.
37 - if not visible(pkgsettings, pkg):
38 - self._masked_installed.append((pkg, pkgsettings))
39 -
40 if args:
41 self._set_nodes.add(pkg)
42
43 @@ -3424,11 +3418,51 @@
44 portdb = self.trees[myroot]["porttree"].dbapi
45 pkgsettings = self.pkgsettings[myroot]
46 final_db = self.mydbapi[myroot]
47 +
48 + graph_complete_for_root = "complete" in self.myparams or \
49 + (myroot == self.target_root and \
50 + ("deep" in self.myparams or "empty" in self.myparams) and \
51 + not self._required_set_names.difference(self._sets))
52 +
53 blocker_cache = BlockerCache(myroot, vardb)
54 stale_cache = set(blocker_cache)
55 for pkg in vardb:
56 cpv = pkg.cpv
57 stale_cache.discard(cpv)
58 +
59 + # Check for masked installed packages. For keyword
60 + # mask there are a couple of common cases that are
61 + # likely to generate unwanted noise:
62 + #
63 + # * Packages missing /var/db/pkg/*/*/KEYWORDS entries
64 + # due to having been installed by an old version of
65 + # portage.
66 + #
67 + # * Packages installed by overriding ACCEPT_KEYWORDS
68 + # via the environment.
69 + #
70 + # To avoid unwanted noise, only warn about keyword
71 + # masks if all of the following are true:
72 + #
73 + # * KEYWORDS is not empty (not installed by old portage).
74 + #
75 + # * The graph is complete and the package has not been
76 + # pulled into the dependency graph. It's eligible for
77 + # depclean, but depclean may fail to recognize it as
78 + # such due to differences in visibility filtering which
79 + # can lead to differences in || dep evaluation.
80 + # TODO: Share visibility code to fix this inconsistency.
81 +
82 + if pkg in final_db:
83 + if not visible(pkgsettings, pkg):
84 + self._masked_installed.add(pkg)
85 + elif graph_complete_for_root and \
86 + pkgsettings.getMissingKeywords(
87 + pkg.cpv, pkg.metadata) and \
88 + pkg.metadata["KEYWORDS"].split() and \
89 + not self.digraph.contains(pkg):
90 + self._masked_installed.add(pkg)
91 +
92 blocker_atoms = None
93 blockers = None
94 if self.digraph.contains(pkg):
95 @@ -5088,8 +5122,9 @@
96 sys.stderr.write("".join(msg))
97
98 masked_packages = []
99 - for pkg, pkgsettings in self._masked_installed:
100 - root_config = self.roots[pkg.root]
101 + for pkg in self._masked_installed:
102 + root_config = pkg.root_config
103 + pkgsettings = root_config.settings
104 mreasons = get_masking_status(pkg, pkgsettings, root_config)
105 masked_packages.append((root_config, pkgsettings,
106 pkg.cpv, pkg.metadata, mreasons))
107
108 Modified: main/trunk/pym/portage/__init__.py
109 ===================================================================
110 --- main/trunk/pym/portage/__init__.py 2008-05-28 01:35:55 UTC (rev 10464)
111 +++ main/trunk/pym/portage/__init__.py 2008-05-28 08:31:06 UTC (rev 10465)
112 @@ -6180,11 +6180,6 @@
113 kmask="~"+myarch
114 break
115
116 - # Assume that the user doesn't want to be bothered about
117 - # KEYWORDS of packages that are already installed.
118 - if kmask and not installed:
119 - rValue.append(kmask+" keyword")
120 -
121 try:
122 missing_licenses = settings.getMissingLicenses(mycpv, metadata)
123 if missing_licenses:
124 @@ -6199,6 +6194,11 @@
125 except portage.exception.InvalidDependString, e:
126 rValue.append("LICENSE: "+str(e))
127
128 + # Only show KEYWORDS masks for installed packages
129 + # if they're not masked for any other reason.
130 + if kmask and (not installed or not rValue):
131 + rValue.append(kmask+" keyword")
132 +
133 return rValue
134
135
136
137 --
138 gentoo-commits@l.g.o mailing list