public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/portage:multilib commit in: pym/_emerge/resolver/, pym/_emerge/
@ 2011-02-06 13:09 Thomas Sachau
  0 siblings, 0 replies; 3+ messages in thread
From: Thomas Sachau @ 2011-02-06 13:09 UTC (permalink / raw
  To: gentoo-commits

commit:     a15f54d284e3913b1993a4d9dd2b4db7c46713b5
Author:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Sun Jan 30 08:57:46 2011 +0000
Commit:     Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 30 09:11:58 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=a15f54d2

Use the new _getRawMissingKeyword() which optimizes the keyword display. Misc. whitespace cleanup

---
 pym/_emerge/Package.py         |   26 ++++++------
 pym/_emerge/resolver/output.py |   80 +++++++++++++++++++---------------------
 2 files changed, 51 insertions(+), 55 deletions(-)

diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
index ae9e8f2..c501b1a 100644
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@ -240,23 +240,23 @@ class Package(Task):
 	def accepted_keyword(self):
 		"""returns the keyword used from the ebuild's KEYWORDS string"""
 
-		keywords = set(self.metadata.get('KEYWORDS').split())
-		accept_keywords = set(self.root_config.settings['ACCEPT_KEYWORDS'].split())
-		used_keyword = list(set.intersection(keywords, accept_keywords))
-		if used_keyword and len(used_keyword) == 1:
-			used_keyword = used_keyword[0]
-		elif len(used_keyword) > 1:
-			# you can raise an error here if you prefer, remove it, or set the correct levels
-			writemsg_level( "_emerge.output.resolver.Display(), too many keywords recieved for pkg: %s, %s"
-					% (pkg.cpv, used_keyword))
-			used_keyword = used_keyword[0]
-		return used_keyword
+		missing, _keywords = \
+			self.root_config.settings._getRawMissingKeywords(
+				self.cpv, self.metadata)
+		if '**' in missing:
+			return '**'
+		if missing: # keywords to evaluate
+			for keyword in _keywords:
+				used_keyword = '~' + keyword
+				if used_keyword in missing:
+					return used_keyword
+		return ''
 
 	def isHardMasked(self):
 		"""returns a bool if the cpv is in the list of
 		expanded pmaskdict[cp] availble ebuilds"""
-		pmask = self.root_config.settings._getRawMaskAtom(self.cpv, self.metadata)
-		print "pmask =", pmask
+		pmask = self.root_config.settings._getRawMaskAtom(
+			self.cpv, self.metadata)
 		return pmask is not None
 
 

diff --git a/pym/_emerge/resolver/output.py b/pym/_emerge/resolver/output.py
index f1af30b..d7d18c9 100644
--- a/pym/_emerge/resolver/output.py
+++ b/pym/_emerge/resolver/output.py
@@ -33,7 +33,7 @@ if sys.hexversion >= 0x3000000:
 
 class Display(object):
 	"""Formats and outputs the depgrah supplied it for merge/re-merge, etc.
-	
+
 	__call__()
 	@param depgraph: list
 	@param favorites: defaults to []
@@ -70,7 +70,7 @@ class Display(object):
 	def _blockers(self, pkg, fetch_symbol):
 		"""Processes pkg for blockers and adds colorized strings to
 		self.print_msg and self.blockers
-		
+
 		@param pkg: _emerge.Package instance
 		@param fetch_symbol: string
 		@rtype: bool
@@ -86,7 +86,7 @@ class Display(object):
 			addl = "%s  %s  " % (colorize(self.blocker_style, "B"),
 				fetch_symbol)
 		self.resolved = dep_expand(
-			str(pkg.atom).lstrip("!"), mydb=self.vardb, 
+			str(pkg.atom).lstrip("!"), mydb=self.vardb,
 			settings=self.pkgsettings
 			)
 		if self.conf.columns and self.conf.quiet:
@@ -94,7 +94,7 @@ class Display(object):
 		else:
 			addl = "[%s %s] %s%s" % \
 				(colorize(self.blocker_style, "blocks"),
-				addl, self.indent, 
+				addl, self.indent,
 				colorize(self.blocker_style, str(self.resolved))
 				)
 		block_parents = self.conf.blocker_parents.parent_nodes(pkg)
@@ -118,14 +118,14 @@ class Display(object):
 
 	def _display_use(self, pkg, myoldbest, myinslotlist):
 		""" USE flag display
-		
+
 		@param pkg: _emerge.Package instance
 		@param myoldbest: list of installed versions
 		@param myinslotlist: list of installed slots
 		Modifies class globals: self.forced_flags, self.cur_iuse,
 			self.old_iuse, self.old_use, self.use_expand
 		"""
-			
+
 		self.forced_flags = set()
 		self.forced_flags.update(pkg.use.force)
 		self.forced_flags.update(pkg.use.mask)
@@ -159,32 +159,27 @@ class Display(object):
 
 	def _display_keyword(self, pkg):
 		""" keyword display
-		
+
 		@param pkg: _emerge.Package instance
 		Modifies self.verboseadd
 		"""
 		used_keyword = pkg.accepted_keyword()
 		hardmasked = pkg.isHardMasked()
-		text = ''
-		if '~' in used_keyword:
-			text = used_keyword
-		elif not used_keyword:
-			text = '**'
-		if text:
+		if used_keyword:
 			if hardmasked:
-				self.verboseadd += red('%s ' % text)
+				self.verboseadd += 'keyword=' + red('[%s] ' % used_keyword)
 			else:
-				self.verboseadd += yellow('%s ' % text)
+				self.verboseadd += 'keyword=' + yellow('%s ' % used_keyword)
 		return
 
 	def map_to_use_expand(self, myvals, forced_flags=False,
 		remove_hidden=True):
 		"""Map use expand variables
-		
+
 		@param myvals: list
 		@param forced_flags: bool
 		@param remove_hidden: bool
-		@rtype ret dictionary 
+		@rtype ret dictionary
 			or ret dict, forced dict.
 		"""
 		ret = {}
@@ -212,7 +207,7 @@ class Display(object):
 	def recheck_hidden(self, pkg):
 		""" Prevent USE_EXPAND_HIDDEN flags from being hidden if they
 		are the only thing that triggered reinstallation.
-		
+
 		@param pkg: _emerge.Package instance
 		Modifies self.use_expand_hidden, self.use_expand, self.verboseadd
 		"""
@@ -243,7 +238,7 @@ class Display(object):
 
 		self.use_expand.sort()
 		self.use_expand.insert(0, "USE")
-		
+
 		for key in self.use_expand:
 			if key in self.use_expand_hidden:
 				continue
@@ -258,7 +253,7 @@ class Display(object):
 	@staticmethod
 	def pkgprint(pkg_str, pkg_info):
 		"""Colorizes a string acording to pkg_info settings
-		
+
 		@param pkg_str: string
 		@param pkg_info: dictionary
 		@rtype colorized string
@@ -291,7 +286,7 @@ class Display(object):
 
 	def verbose_size(self, pkg, repoadd_set, pkg_info):
 		"""Determines the size of the downloads reqired
-		
+
 		@param pkg: _emerge.Package instance
 		@param repoadd_set: set of repos to add
 		@param pkg_info: dictionary
@@ -349,11 +344,11 @@ class Display(object):
 	@staticmethod
 	def convert_myoldbest(myoldbest):
 		"""converts and colorizes a version list to a string
-		
+
 		@param myoldbest: list
 		@rtype string.
 		"""
-		# Convert myoldbest from a list to a string. 
+		# Convert myoldbest from a list to a string.
 		myoldbest_str = ""
 		if myoldbest:
 			versions = []
@@ -384,7 +379,7 @@ class Display(object):
 
 	def _set_non_root_columns(self, addl, pkg_info, pkg):
 		"""sets the indent level and formats the output
-		
+
 		@param addl: already defined string to add to
 		@param pkg_info: dictionary
 		@param pkg: _emerge.Package instance
@@ -418,7 +413,7 @@ class Display(object):
 
 	def _set_root_columns(self, addl, pkg_info, pkg):
 		"""sets the indent level and formats the output
-		
+
 		@param addl: already defined string to add to
 		@param pkg_info: dictionary
 		@param pkg: _emerge.Package instance
@@ -473,7 +468,7 @@ class Display(object):
 
 	def _insert_slot(self, pkg, pkg_info, myinslotlist):
 		"""Adds slot info to the message
-		
+
 		@returns addl: formatted slot info
 		@returns myoldbest: installed version list
 		Modifies self.counters.downgrades, self.counters.upgrades,
@@ -500,7 +495,7 @@ class Display(object):
 
 	def _new_slot(self, pkg, pkg_info):
 		"""New slot, mark it new.
-		
+
 		@returns addl: formatted slot info
 		@returns myoldbest: installed version list
 		Modifies self.counters.newslot, self.counters.binary
@@ -516,7 +511,7 @@ class Display(object):
 	def print_messages(self, show_repos):
 		"""Performs the actual output printing of the pre-formatted
 		messages
-		
+
 		@param show_repos: bool.
 		"""
 		for msg in self.print_msg:
@@ -543,7 +538,7 @@ class Display(object):
 
 	def print_verbose(self, show_repos):
 		"""Prints the verbose output to std_out
-		
+
 		@param show_repos: bool.
 		"""
 		writemsg_stdout('\n%s\n' % (self.counters,), noiselevel=-1)
@@ -567,11 +562,11 @@ class Display(object):
 
 	def get_display_list(self, mylist):
 		"""Determines the display list to process
-		
+
 		@param mylist
 		@rtype list
 		Modifies self.counters.blocks, self.counters.blocks_satisfied,
-			
+
 		"""
 		unsatisfied_blockers = []
 		ordered_nodes = []
@@ -596,11 +591,11 @@ class Display(object):
 
 	def set_pkg_info(self, pkg, ordered):
 		"""Sets various pkg_info dictionary variables
-		
+
 		@param pkg: _emerge.Package instance
 		@param ordered: bool
 		@rtype pkg_info dictionary
-		Modifies self.counters.restrict_fetch, 
+		Modifies self.counters.restrict_fetch,
 			self.counters.restrict_fetch_satisfied
 		"""
 		pkg_info = PkgInfo()
@@ -640,7 +635,7 @@ class Display(object):
 
 	def do_changelog(self, pkg, pkg_info):
 		"""Processes and adds the changelog text to the master text for output
-		
+
 		@param pkg: _emerge.Package instance
 		@param pkg_info: dictionay
 		Modifies self.changelogs
@@ -659,7 +654,7 @@ class Display(object):
 
 	def check_system_world(self, pkg):
 		"""Checks for any occurances of the package in the system or world sets
-		
+
 		@param pkg: _emerge.Package instance
 		@rtype system and world booleans
 		"""
@@ -684,7 +679,7 @@ class Display(object):
 		except InvalidDependString:
 			# This is reported elsewhere if relevant.
 			pass
-		return system, world 
+		return system, world
 
 
 	@staticmethod
@@ -706,12 +701,12 @@ class Display(object):
 		"empty" param testing because "empty"
 		param is used for -u, where you still *do* want to see when
 		something is being upgraded.
-		
+
 		@param pkg: _emerge.Package instance
 		@param pkg_info: dictionay
 		@rtype addl, myoldbest: list, myinslotlist: list
 		Modifies self.counters.reinst, self.counters.binary, self.counters.new
-			
+
 		"""
 		myoldbest = []
 		myinslotlist = None
@@ -753,14 +748,14 @@ class Display(object):
 
 	def __call__(self, depgraph, mylist, favorites=None, verbosity=None):
 		"""The main operation to format and display the resolver output.
-		
+
 		@param depgraph: dependency grah
 		@param mylist: list of packages being processed
 		@param favorites: list, defaults to []
 		@param verbosity: verbose level, defaults to None
 		Modifies self.conf, self.myfetchlist, self.portdb, self.vardb,
-			self.pkgsettings, self.verboseadd, self.oldlp, self.newlp, 
-			self.print_msg, 
+			self.pkgsettings, self.verboseadd, self.oldlp, self.newlp,
+			self.print_msg,
 		"""
 		if favorites is None:
 			favorites = []
@@ -789,7 +784,8 @@ class Display(object):
 					self._get_installed_best(pkg, pkg_info)
 				self.verboseadd = ""
 				self.repoadd = None
-				self._display_keyword(pkg)
+				if self.conf.verbosity == 3:
+					self._display_keyword(pkg)
 				self._display_use(pkg, pkg_info.oldbest, myinslotlist)
 				self.recheck_hidden(pkg)
 				if self.conf.verbosity == 3:



^ permalink raw reply related	[flat|nested] 3+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: pym/_emerge/resolver/, pym/_emerge/
@ 2011-02-06 13:09 Thomas Sachau
  0 siblings, 0 replies; 3+ messages in thread
From: Thomas Sachau @ 2011-02-06 13:09 UTC (permalink / raw
  To: gentoo-commits

commit:     ea8827f3893cc8324adbac03c6fa63398598ab01
Author:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Sun Jan 30 20:42:44 2011 +0000
Commit:     Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 30 22:37:48 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=ea8827f3

fix the problem of mixing "**" and ebuild keywords for only some archs

---
 pym/_emerge/Package.py         |    7 ++++++-
 pym/_emerge/resolver/output.py |    2 +-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
index bf02192..9f21057 100644
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@ -243,10 +243,15 @@ class Package(Task):
 		missing, _keywords = \
 			self.root_config.settings._getRawMissingKeywords(
 				self.cpv, self.metadata)
+		unmasks = self.root_config.settings._getPKeywords(
+				self.cpv, self.metadata)
+
 		if '**' in missing:
 			return '**'
 		if missing: # keywords to evaluate
-			for keyword in _keywords:
+			for keyword in _keywords + unmasks:
+				if keyword == '**':
+					return keyword
 				used_keyword = '~' + keyword
 				if used_keyword in missing:
 					return used_keyword

diff --git a/pym/_emerge/resolver/output.py b/pym/_emerge/resolver/output.py
index 51d9d3c..ffee6da 100644
--- a/pym/_emerge/resolver/output.py
+++ b/pym/_emerge/resolver/output.py
@@ -165,7 +165,7 @@ class Display(object):
 		"""
 		used_keyword = pkg.accepted_keyword()
 		hardmasked = pkg.isHardMasked()
-		if used_keyword not in self.pkgsettings['ACCEPT_KEYWORDS'] or hardmasked:
+		if used_keyword not in self.pkgsettings['ACCEPT_KEYWORDS'].split() or hardmasked:
 			if hardmasked:
 				self.verboseadd += 'keyword=' + red('[%s] ' % used_keyword)
 			else:



^ permalink raw reply related	[flat|nested] 3+ messages in thread
* [gentoo-commits] proj/portage:multilib commit in: pym/_emerge/resolver/, pym/_emerge/
@ 2011-02-06 13:09 Thomas Sachau
  0 siblings, 0 replies; 3+ messages in thread
From: Thomas Sachau @ 2011-02-06 13:09 UTC (permalink / raw
  To: gentoo-commits

commit:     6fbb1c1c70ba82a2a06531e69b9851bf01c42e12
Author:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Sat Jan 29 09:53:36 2011 +0000
Commit:     Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 30 09:11:58 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=6fbb1c1c

Move most of the code to _emerge's Package object. Refine the hardmasking code, optimizing as much as possible.

---
 pym/_emerge/Package.py         |   45 ++++++++++++++++++++++++++++++++++++++++
 pym/_emerge/resolver/output.py |   25 ++-------------------
 2 files changed, 48 insertions(+), 22 deletions(-)

diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
index c80bad3..e7302b3 100644
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@ -41,6 +41,8 @@ class Package(Task):
 
 	def __init__(self, **kwargs):
 		Task.__init__(self, **kwargs)
+		# the SlotObject constructor assigns self.root_config from keyword args
+		# and is an instance of a '_emerge.RootConfig.RootConfig class
 		self.root = self.root_config.root
 		self._raw_metadata = _PackageMetadataWrapperBase(self.metadata)
 		self.metadata = _PackageMetadataWrapper(self, self._raw_metadata)
@@ -235,6 +237,49 @@ class Package(Task):
 
 		return True
 
+	def accepted_keyword(self):
+		"""returns the keyword used from the ebuild's KEYWORDS string"""
+		
+		keywords = set(self.metadata.get('KEYWORDS').split())
+		accept_keywords = set(self.root_config.settings['ACCEPT_KEYWORDS'].split())
+		used_keyword = list(set.intersection(keywords, accept_keywords))
+		if used_keyword and len(used_keyword) == 1:
+			used_keyword = used_keyword[0]
+		elif len(used_keyword) > 1:
+			# you can raise an error here if you prefer, remove it, or set the correct levels
+			writemsg_level( "_emerge.output.resolver.Display(), too many keywords recieved for pkg: %s, %s"
+					% (pkg.cpv, used_keyword))
+			used_keyword = used_keyword[0]
+		#print "pmaskdict", self.root_config.settings.pmaskdict
+		return used_keyword
+
+	def isHardMasked(self):
+		"""returns a bool if the cpv is in the list of 
+		expanded pmaskdict[cp] availble ebuilds"""
+		try:
+			# returns a list of mask atoms
+			pmask = self.root_config.settings.pmaskdict[self.cp]
+		except KeyError:
+			pmask = []
+		if pmask:
+			# narrow pmask atoms down to the relevant repo
+			n=[x for x in pmask if x.split('::')[-1] in [self.repo]]
+			# hopefully it is down to only 1 mask atom
+			#print "n =", n
+			#count = 0
+			hardmasked = set()
+			for x in n:
+				#expand the atom to matching available ebuilds
+				m = self.root_config.trees['porttree'].dbapi.xmatch("match-all",x)
+				#print "m =", m
+				for n in m:
+					hardmasked.update([n])
+				#count += 1
+			#print "for x in n: loop count =", count, hardmasked
+			return self.cpv in hardmasked
+		return False
+
+
 	def _metadata_exception(self, k, e):
 
 		# For unicode safety with python-2.x we need to avoid

diff --git a/pym/_emerge/resolver/output.py b/pym/_emerge/resolver/output.py
index 4b90e9d..f1af30b 100644
--- a/pym/_emerge/resolver/output.py
+++ b/pym/_emerge/resolver/output.py
@@ -163,39 +163,20 @@ class Display(object):
 		@param pkg: _emerge.Package instance
 		Modifies self.verboseadd
 		"""
-		accept_keywords = set(self.portdb.settings['ACCEPT_KEYWORDS'].split())
-		keywords = set(self.portdb.aux_get(pkg.cpv, ["KEYWORDS"])[0].split())
-		used_keyword = list(set.intersection(keywords, accept_keywords))
-		if used_keyword and len(used_keyword) == 1:
-			used_keyword = used_keyword[0]
-		elif len(used_keyword) > 1:
-			# you can raise an error here if you prefer, remove it, or set the correct levels
-			writemsg_level( "_emerge.output.resolver.Display(), too many keywords recieved for pkg: %s, %s"
-					% (pkg.cpv, used_keyword))
-		try:
-			pmask = self.portdb.settings.pmaskdict[pkg.cp]
-		except KeyError:
-			pmask = []
-		hardmasked = []
-		for x in pmask:
-			m = self.portdb.xmatch("match-all",x)
-			for n in m:
-				if n not in hardmasked:
-					hardmasked.append(n)
-
+		used_keyword = pkg.accepted_keyword()
+		hardmasked = pkg.isHardMasked()
 		text = ''
 		if '~' in used_keyword:
 			text = used_keyword
 		elif not used_keyword:
 			text = '**'
 		if text:
-			if pkg.cpv in hardmasked:
+			if hardmasked:
 				self.verboseadd += red('%s ' % text)
 			else:
 				self.verboseadd += yellow('%s ' % text)
 		return
 
-
 	def map_to_use_expand(self, myvals, forced_flags=False,
 		remove_hidden=True):
 		"""Map use expand variables



^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2011-02-06 13:17 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-02-06 13:09 [gentoo-commits] proj/portage:multilib commit in: pym/_emerge/resolver/, pym/_emerge/ Thomas Sachau
  -- strict thread matches above, loose matches on Subject: below --
2011-02-06 13:09 Thomas Sachau
2011-02-06 13:09 Thomas Sachau

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox