Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r13468 - main/branches/2.1.6/pym/_emerge
Date: Thu, 30 Apr 2009 06:59:57
Message-Id: E1LzQFO-0006CX-Ox@stork.gentoo.org
1 Author: zmedico
2 Date: 2009-04-30 06:59:53 +0000 (Thu, 30 Apr 2009)
3 New Revision: 13468
4
5 Modified:
6 main/branches/2.1.6/pym/_emerge/__init__.py
7 Log:
8 Make emerge --info <atom> display USE similarly to how they are displayed
9 in the merge list. (trunk r13297)
10
11 Modified: main/branches/2.1.6/pym/_emerge/__init__.py
12 ===================================================================
13 --- main/branches/2.1.6/pym/_emerge/__init__.py 2009-04-30 06:59:41 UTC (rev 13467)
14 +++ main/branches/2.1.6/pym/_emerge/__init__.py 2009-04-30 06:59:53 UTC (rev 13468)
15 @@ -9216,6 +9216,43 @@
16 (self.blocks - self.blocks_satisfied))
17 return "".join(myoutput)
18
19 +class UseFlagDisplay(object):
20 +
21 + __slots__ = ('name', 'enabled', 'forced')
22 +
23 + def __init__(self, name, enabled, forced):
24 + self.name = name
25 + self.enabled = enabled
26 + self.forced = forced
27 +
28 + def __str__(self):
29 + s = self.name
30 + if self.enabled:
31 + s = red(s)
32 + else:
33 + s = '-' + s
34 + s = blue(s)
35 + if self.forced:
36 + s = '(%s)' % s
37 + return s
38 +
39 + @classmethod
40 + def cmp_combined(cls, a, b):
41 + """
42 + Sort by name, combining enabled and disabled flags.
43 + """
44 + return (a.name > b.name) - (a.name < b.name)
45 +
46 + @classmethod
47 + def cmp_separated(cls, a, b):
48 + """
49 + Sort by name, separating enabled flags from disabled flags.
50 + """
51 + enabled_diff = b.enabled - a.enabled
52 + if enabled_diff:
53 + return enabled_diff
54 + return (a.name > b.name) - (a.name < b.name)
55 +
56 class PollSelectAdapter(PollConstants):
57
58 """
59 @@ -13332,6 +13369,12 @@
60 myvars.extend(portage.util.grabfile(settings["PORTDIR"]+"/profiles/info_vars"))
61
62 myvars = portage.util.unique_array(myvars)
63 + use_expand = settings.get('USE_EXPAND', '').split()
64 + use_expand.sort()
65 + use_expand_hidden = set(
66 + settings.get('USE_EXPAND_HIDDEN', '').upper().split())
67 + alphabetical_use = '--alphabetical' in myopts
68 + root_config = trees[settings["ROOT"]]['root_config']
69 unset_vars = []
70 myvars.sort()
71 for x in myvars:
72 @@ -13340,8 +13383,6 @@
73 print '%s="%s"' % (x, settings[x])
74 else:
75 use = set(settings["USE"].split())
76 - use_expand = settings["USE_EXPAND"].split()
77 - use_expand.sort()
78 for varname in use_expand:
79 flag_prefix = varname.lower() + "_"
80 for f in list(use):
81 @@ -13380,7 +13421,7 @@
82 # Get our global settings (we only print stuff if it varies from
83 # the current config)
84 mydesiredvars = [ 'CHOST', 'CFLAGS', 'CXXFLAGS', 'LDFLAGS' ]
85 - auxkeys = mydesiredvars + [ "USE", "IUSE"]
86 + auxkeys = mydesiredvars + list(vardb._aux_cache_keys)
87 global_vals = {}
88 pkgsettings = portage.config(clone=settings)
89
90 @@ -13395,12 +13436,17 @@
91 print header_width * "="
92 from portage.output import EOutput
93 out = EOutput()
94 - for pkg in mypkgs:
95 + for cpv in mypkgs:
96 # Get all package specific variables
97 - auxvalues = vardb.aux_get(pkg, auxkeys)
98 + metadata = dict(izip(auxkeys, vardb.aux_get(cpv, auxkeys)))
99 + pkg = Package(built=True, cpv=cpv,
100 + installed=True, metadata=izip(Package.metadata_keys,
101 + (metadata.get(x, '') for x in Package.metadata_keys)),
102 + root_config=root_config, type_name='installed')
103 valuesmap = {}
104 - for i in xrange(len(auxkeys)):
105 - valuesmap[auxkeys[i]] = set(auxvalues[i].split())
106 + for k in auxkeys:
107 + valuesmap[k] = set(metadata[k].split())
108 +
109 diff_values = {}
110 for myvar in mydesiredvars:
111 # If the package variable doesn't match the
112 @@ -13408,34 +13454,73 @@
113 # so set diff_found so we know to print
114 if valuesmap[myvar] != global_vals[myvar]:
115 diff_values[myvar] = valuesmap[myvar]
116 - valuesmap["IUSE"] = set(filter_iuse_defaults(valuesmap["IUSE"]))
117 - valuesmap["USE"] = valuesmap["USE"].intersection(valuesmap["IUSE"])
118 - pkgsettings.reset()
119 - # If a matching ebuild is no longer available in the tree, maybe it
120 - # would make sense to compare against the flags for the best
121 - # available version with the same slot?
122 - mydb = None
123 - if portdb.cpv_exists(pkg):
124 - mydb = portdb
125 - pkgsettings.setcpv(pkg, mydb=mydb)
126 - if valuesmap["IUSE"].intersection(
127 - pkgsettings["PORTAGE_USE"].split()) != valuesmap["USE"]:
128 - diff_values["USE"] = valuesmap["USE"]
129 +
130 # If a difference was found, print the info for
131 # this package.
132 if diff_values:
133 # Print package info
134 - print "%s was built with the following:" % pkg
135 - for myvar in mydesiredvars + ["USE"]:
136 + print "%s was built with the following:" % pkg.cpv
137 + for myvar in mydesiredvars:
138 if myvar in diff_values:
139 mylist = list(diff_values[myvar])
140 mylist.sort()
141 print "%s=\"%s\"" % (myvar, " ".join(mylist))
142 - print
143 - print ">>> Attempting to run pkg_info() for '%s'" % pkg
144 - ebuildpath = vardb.findname(pkg)
145 +
146 + pkgsettings.setcpv(pkg)
147 + forced_flags = set(chain(pkgsettings.useforce,
148 + pkgsettings.usemask))
149 + use = set(pkg.use.enabled)
150 + use.discard(pkgsettings.get('ARCH'))
151 + use_expand_flags = set()
152 + use_enabled = {}
153 + use_disabled = {}
154 + for varname in use_expand:
155 + flag_prefix = varname.lower() + "_"
156 + for f in use:
157 + if f.startswith(flag_prefix):
158 + use_expand_flags.add(f)
159 + use_enabled.setdefault(
160 + varname.upper(), []).append(f[len(flag_prefix):])
161 +
162 + for f in pkg.iuse.all:
163 + if f.startswith(flag_prefix):
164 + use_expand_flags.add(f)
165 + if f not in use:
166 + use_disabled.setdefault(
167 + varname.upper(), []).append(f[len(flag_prefix):])
168 +
169 + var_order = set(use_enabled)
170 + var_order.update(use_disabled)
171 + var_order = sorted(var_order)
172 + var_order.insert(0, 'USE')
173 + use.difference_update(use_expand_flags)
174 + use_enabled['USE'] = list(use)
175 + use_disabled['USE'] = []
176 +
177 + for f in pkg.iuse.all:
178 + if f not in use and \
179 + f not in use_expand_flags:
180 + use_disabled['USE'].append(f)
181 +
182 + for varname in var_order:
183 + if varname in use_expand_hidden:
184 + continue
185 + flags = []
186 + for f in use_enabled.get(varname, []):
187 + flags.append(UseFlagDisplay(f, True, f in forced_flags))
188 + for f in use_disabled.get(varname, []):
189 + flags.append(UseFlagDisplay(f, False, f in forced_flags))
190 + if alphabetical_use:
191 + flags.sort(key=cmp_sort_key(UseFlagDisplay.cmp_combined))
192 + else:
193 + flags.sort(key=cmp_sort_key(UseFlagDisplay.cmp_separated))
194 + print '%s="%s"' % (varname, ' '.join(str(f) for f in flags)),
195 + print
196 +
197 + print ">>> Attempting to run pkg_info() for '%s'" % pkg.cpv
198 + ebuildpath = vardb.findname(pkg.cpv)
199 if not ebuildpath or not os.path.exists(ebuildpath):
200 - out.ewarn("No ebuild found for '%s'" % pkg)
201 + out.ewarn("No ebuild found for '%s'" % pkg.cpv)
202 continue
203 portage.doebuild(ebuildpath, "info", pkgsettings["ROOT"],
204 pkgsettings, debug=(settings.get("PORTAGE_DEBUG", "") == 1),