1 |
commit: a9881a28da795ce2285187062bfaa822d4e55a18 |
2 |
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org> |
3 |
AuthorDate: Thu Jun 7 07:57:44 2012 +0000 |
4 |
Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com> |
5 |
CommitDate: Thu Jun 7 07:57:44 2012 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=a9881a28 |
7 |
|
8 |
fix a bug in enalyze rebuild where it did not consider IUSE defaults for calculating the use flag differences. Discovered by mingdao in #gentoo. |
9 |
|
10 |
--- |
11 |
pym/gentoolkit/enalyze/lib.py | 23 +++++++++++++++-------- |
12 |
pym/gentoolkit/flag.py | 16 ++++++++++++++++ |
13 |
2 files changed, 31 insertions(+), 8 deletions(-) |
14 |
|
15 |
diff --git a/pym/gentoolkit/enalyze/lib.py b/pym/gentoolkit/enalyze/lib.py |
16 |
index 015e23b..9dc28a3 100644 |
17 |
--- a/pym/gentoolkit/enalyze/lib.py |
18 |
+++ b/pym/gentoolkit/enalyze/lib.py |
19 |
@@ -14,7 +14,7 @@ from gentoolkit.dbapi import PORTDB, VARDB |
20 |
from gentoolkit import errors |
21 |
from gentoolkit.keyword import reduce_keywords |
22 |
from gentoolkit.flag import (reduce_flags, get_flags, get_all_cpv_use, |
23 |
- filter_flags, get_installed_use, get_iuse) |
24 |
+ filter_flags, get_installed_use, get_iuse, defaulted_flags) |
25 |
#from gentoolkit.package import Package |
26 |
|
27 |
import portage |
28 |
@@ -65,10 +65,12 @@ class FlagAnalyzer(object): |
29 |
@return (plus, minus, unset) sets of USE flags |
30 |
""" |
31 |
installed = set(self.get_used(cpv, self.target)) |
32 |
- iuse = set(reduce_flags(self.get_flags(cpv))) |
33 |
- return self._analyse(installed, iuse) |
34 |
+ _iuse = self.get_flags(cpv) |
35 |
+ iuse = set(reduce_flags(_iuse)) |
36 |
+ iuse_defaults = defaulted_flags(_iuse) |
37 |
+ return self._analyse(installed, iuse, iuse_defaults) |
38 |
|
39 |
- def _analyse(self, installed, iuse): |
40 |
+ def _analyse(self, installed, iuse, iuse_defaults): |
41 |
"""Analyzes the supplied info and returns the flag settings |
42 |
that differ from the defaults |
43 |
|
44 |
@@ -78,6 +80,9 @@ class FlagAnalyzer(object): |
45 |
@param iuse: the current ebuilds IUSE |
46 |
""" |
47 |
defaults = self.system.intersection(iuse) |
48 |
+ # update defaults with iuse_defaults |
49 |
+ defaults.update(iuse_defaults['+']) |
50 |
+ defaults = defaults.difference(iuse_defaults['-']) |
51 |
usedflags = iuse.intersection(set(installed)) |
52 |
if self.filter_defaults: |
53 |
plus = usedflags.difference(defaults) |
54 |
@@ -98,10 +103,12 @@ class FlagAnalyzer(object): |
55 |
@return (plus, minus, unset) sets of USE flags |
56 |
""" |
57 |
installed = set(self.pkg_used(pkg)) |
58 |
- print("installed =", installed) |
59 |
- iuse = set(reduce_flags(self.pkg_flags(pkg))) |
60 |
- print("iuse =", iuse) |
61 |
- return self._analyse(installed, iuse) |
62 |
+ #print("installed =", installed) |
63 |
+ _iuse = self.pkg_flags(pkg) |
64 |
+ iuse = set(reduce_flags(_iuse)) |
65 |
+ iuse_defaults = defaulted_flags(_iuse) |
66 |
+ #print("iuse =", iuse) |
67 |
+ return self._analyse(installed, iuse, iuse_defaults) |
68 |
|
69 |
def pkg_used(self, pkg): |
70 |
if self.target == "USE": |
71 |
|
72 |
diff --git a/pym/gentoolkit/flag.py b/pym/gentoolkit/flag.py |
73 |
index b5c8228..0377a81 100644 |
74 |
--- a/pym/gentoolkit/flag.py |
75 |
+++ b/pym/gentoolkit/flag.py |
76 |
@@ -13,6 +13,7 @@ __all__ = ( |
77 |
'get_installed_use', |
78 |
'reduce_flag', |
79 |
'reduce_flags', |
80 |
+ 'defaulted_flags', |
81 |
'filter_flags', |
82 |
'get_all_cpv_use', |
83 |
'get_flags' |
84 |
@@ -84,6 +85,21 @@ def reduce_flags(the_list): |
85 |
return r |
86 |
|
87 |
|
88 |
+def defaulted_flags(the_list): |
89 |
+ """Absolute value function for a USE flag list |
90 |
+ |
91 |
+ @type the_list: list |
92 |
+ @param the_list: the use flags to get defaulted ones from. |
93 |
+ @rtype: dict of lists |
94 |
+ @return defaulted USE flags {'+': [...], '-': [...]} |
95 |
+ """ |
96 |
+ r={"+":[], "-": []} |
97 |
+ for member in the_list: |
98 |
+ if member[0] in ["+","-"]: |
99 |
+ r[member[0]].append(member[1:]) |
100 |
+ return r |
101 |
+ |
102 |
+ |
103 |
def filter_flags(use, use_expand_hidden, usemasked, useforced): |
104 |
"""Filter function to remove hidden or otherwise not normally |
105 |
visible USE flags from a list. |