On Wednesday 28 September 2005 12:58, Jason Stubbs wrote:
> On Wednesday 28 September 2005 00:35, Donnie Berkholz wrote:
> > IUSE_VIDEO_CARDS="radeon sis mga"
> > IUSE_INPUT_DEVICES="synaptics wacom"
>
> So, my patch (even though it works) puts these flags into an IUSE_EXPAND
> variable and would require an upgrade on the CVS server to get correct
> cache generation for users.
>
> What are the exact reasons for not wanting to put the expanded flags
> directly into IUSE? If it's just a matter of the horrid display existing
> tools would give, the functionality can go in and IUSE updated after the
> functional versions are stabled. Are there any reasons beyond that?

And a patch to do it the IUSE way. Note the size difference below even though 
both patches end up with the same output for the end user. Also note that 
this way doesn't require an upgrade on the CVS server.

$ wc -c verbose-IUSE*
3698 verbose-IUSE-support.patch
6110 verbose-IUSE_EXPAND-support.patch

--
Jason Stubbs
diff -uNr 2.0-original/bin/emerge 2.0/bin/emerge
--- 2.0-original/bin/emerge	2005-09-28 12:24:10.000000000 +0900
+++ 2.0/bin/emerge	2005-09-28 13:17:00.000000000 +0900
@@ -1466,6 +1466,28 @@
 
 		if "--verbose" in myopts:
 			overlays = string.split(portage.settings['PORTDIR_OVERLAY'])
+			use_expand = portage.settings["USE_EXPAND"].lower().split()
+			use_expand_hidden = portage.settings["USE_EXPAND_HIDDEN"].lower().split()
+
+			def create_use_string(iuse, cur_use, old_use, masked_use):
+				usestr=""
+				for flag in iuse:
+					usechange=""
+					if old_use:
+						if (flag in old_use and flag not in cur_use) or (flag not in old_use and flag in cur_use):
+							usechange="*"
+
+					if flag in cur_use:
+						if usechange == "*":
+							substr = green("+"+flag)
+						else:
+							substr = red("+"+flag)
+					elif flag in masked_use:
+						substr = blue("(-"+flag+")")
+					else:
+						substr = blue("-"+flag)
+					usestr += substr + usechange + " "
+				return usestr
 
 		if "--tree" in myopts:
 			mylist.reverse()
@@ -1568,8 +1590,13 @@
 						portage.writemsg("!!! Error getting IUSE (report this to bugs.gentoo.org)\n")
 						portage.writemsg("!!! %s\n" % x)
 						iuse_split = []
+
+					iuse_split = portage.unique_array(iuse_split)
 					iuse_split.sort()
-					old_use=None
+
+					cur_use = self.applied_useflags[x[2]]
+
+					old_use = []
 					if myoldbest:
 						pkg=myoldbest
 					else:
@@ -1581,24 +1608,38 @@
 							raise # Needed else can't exit
 						except:
 							pass
-					iuse=""
-					now_use=self.applied_useflags[x[2]]
-					for ebuild_iuse in portage_util.unique_array(iuse_split):
-						usechange=""
-						if old_use:
-							if (old_use.count(ebuild_iuse) and not now_use.count(ebuild_iuse)) or (not old_use.count(ebuild_iuse) and now_use.count(ebuild_iuse)):
-								usechange="*"
-
-						if ebuild_iuse in self.applied_useflags[x[2]]:
-							if usechange == "*":
-								iuse=green("+"+ebuild_iuse)
-							else:
-								iuse=red("+"+ebuild_iuse)
-						elif ebuild_iuse in portage.settings.usemask:
-							iuse=blue("(-"+ebuild_iuse+")")
-						else:
-							iuse=blue("-"+ebuild_iuse)
-						verboseadd+=iuse+usechange+" "
+
+					reg_use = []
+					exp_map = {}
+					for flag in iuse_split:
+						found = False
+						for var in use_expand:
+							if flag.startswith(var+"_"):
+								if var in exp_map:
+									exp_map[var]+= [flag[len(var)+1:]]
+								else:
+									exp_map[var] = [flag[len(var)+1:]]
+								found = True
+								break
+						if not found:
+							reg_use.append(flag)
+
+					verboseadd += create_use_string(reg_use, cur_use, old_use, portage.settings.usemask)
+
+					for var in use_expand:
+						if var not in exp_map:
+							continue
+						expcur = []
+						expold = []
+						expmask = []
+						for flag in exp_map[var]:
+							if var+"_"+flag in cur_use:
+								expcur+= [flag]
+							if var+"_"+flag in old_use:
+								expold+= [flag]
+							if var+"_"+flag in portage.settings.usemask:
+								expmask+= [flag]
+						verboseadd += var.upper()+'="'+create_use_string(exp_map[var],expcur,expold,expmask).strip()+'" '
 
 					# size verbose
 					mysize=0
diff -uNr 2.0-original/pym/portage.py 2.0/pym/portage.py
--- 2.0-original/pym/portage.py	2005-09-28 12:24:10.000000000 +0900
+++ 2.0/pym/portage.py	2005-09-28 13:03:40.000000000 +0900
@@ -1392,7 +1392,7 @@
 				if self.has_key(var):
 					for x in string.split(self[var]):
 						mystr = string.lower(var)+"_"+x
-						if mystr not in usesplit:
+						if mystr not in usesplit and mystr not in self.usemask:
 							usesplit.append(mystr)
 
 		# Pre-Pend ARCH variable to USE settings so '-*' in env doesn't kill arch.

Reply via email to