public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] portage r13867 - in main/branches/prefix: bin pym/_emerge pym/portage/dbapi
@ 2009-07-31  7:36 Fabian Groffen (grobian)
  0 siblings, 0 replies; only message in thread
From: Fabian Groffen (grobian) @ 2009-07-31  7:36 UTC (permalink / raw
  To: gentoo-commits

Author: grobian
Date: 2009-07-31 07:36:27 +0000 (Fri, 31 Jul 2009)
New Revision: 13867

Modified:
   main/branches/prefix/bin/repoman
   main/branches/prefix/pym/_emerge/depgraph.py
   main/branches/prefix/pym/portage/dbapi/porttree.py
Log:
   Merged from trunk -r13849:13854

   | 13850   | Bug #270040 - Make repoman parse the categories file from    |
   | zmedico | the overlay.                                                 |
   
   | 13851   | Fix --onlydeps breakage. Thanks to Arfrever for reporting.   |
   | zmedico |                                                              |
   
   | 13852   | When backtracking due to an unsatisfied dependency, show a   |
   | zmedico | normal unsatisfied dependency message for the given atom.    |
   |         | Thanks to Thomas Sachau <tommy@gentoo.org> for reporting.    |
   
   | 13853   | Remove redundant loop inside                                 |
   | zmedico | depgraph._show_missed_update_slot_conflicts().               |
   
   | 13854   | Account for $ROOT inside                                     |
   | zmedico | depgraph._show_missed_update_unsatisfied_dep().              |


Modified: main/branches/prefix/bin/repoman
===================================================================
--- main/branches/prefix/bin/repoman	2009-07-31 07:34:04 UTC (rev 13866)
+++ main/branches/prefix/bin/repoman	2009-07-31 07:36:27 UTC (rev 13867)
@@ -513,6 +513,14 @@
 logging.info('PORTDIR = "' + portdir + '"')
 logging.info('PORTDIR_OVERLAY = "%s"' % env['PORTDIR_OVERLAY'])
 
+categories = []
+for path in set([portdir, portdir_overlay]):
+	categories.extend(portage.util.grabfile(
+		os.path.join(path, 'profiles', 'categories')))
+repoman_settings.categories = tuple(sorted(
+	portage.util.stack_lists([categories], incremental=1)))
+del categories
+
 portdb.mysettings = repoman_settings
 root_config = RootConfig(repoman_settings, trees[root], None)
 # We really only need to cache the metadata that's necessary for visibility

Modified: main/branches/prefix/pym/_emerge/depgraph.py
===================================================================
--- main/branches/prefix/pym/_emerge/depgraph.py	2009-07-31 07:34:04 UTC (rev 13866)
+++ main/branches/prefix/pym/_emerge/depgraph.py	2009-07-31 07:36:27 UTC (rev 13867)
@@ -278,6 +278,8 @@
 			'--debug' not in self._frozen_config.myopts:
 			return
 
+		# In order to minimize noise, show only the highest
+		# missed update from each SLOT.
 		missed_updates = {}
 		for pkg, mask_reasons in \
 			self._dynamic_config._runtime_pkg_mask.iteritems():
@@ -286,24 +288,62 @@
 				# want to show available updates.
 				continue
 			if pkg.slot_atom in missed_updates:
-				other_pkg, parent_atoms = missed_updates[pkg.slot_atom]
+				other_pkg, mask_type, parent_atoms = \
+					missed_updates[pkg.slot_atom]
 				if other_pkg > pkg:
 					continue
 			for mask_type, parent_atoms in mask_reasons.iteritems():
 				if not parent_atoms:
 					continue
-				missed_updates[pkg.slot_atom] = (pkg, parent_atoms)
+				missed_updates[pkg.slot_atom] = (pkg, mask_type, parent_atoms)
 				break
 
 		if not missed_updates:
 			return
 
+		missed_update_types = {}
+		for pkg, mask_type, parent_atoms in missed_updates.itervalues():
+			missed_update_types.setdefault(mask_type,
+				[]).append((pkg, parent_atoms))
+
+		self._show_missed_update_slot_conflicts(
+			missed_update_types.get("slot conflict"))
+
+		self._show_missed_update_unsatisfied_dep(
+			missed_update_types.get("missing dependency"))
+
+	def _show_missed_update_unsatisfied_dep(self, missed_updates):
+
+		if not missed_updates:
+			return
+
+		write = sys.stderr.write
+
+		for pkg, parent_atoms in missed_updates:
+
+			write("\n!!! The following update has been skipped " + \
+				"due to unsatisfied dependencies:\n\n")
+
+			write(str(pkg.slot_atom))
+			write("\n")
+
+			for parent, root, atom in parent_atoms:
+				self._show_unsatisfied_dep(root, atom, myparent=parent)
+				write("\n")
+
+		sys.stderr.flush()
+
+	def _show_missed_update_slot_conflicts(self, missed_updates):
+
+		if not missed_updates:
+			return
+
 		msg = []
 		msg.append("\n!!! One or more updates have been skipped due to " + \
 			"a dependency conflict:\n\n")
 
 		indent = "  "
-		for pkg, parent_atoms in missed_updates.itervalues():
+		for pkg, parent_atoms in missed_updates:
 			msg.append(str(pkg.slot_atom))
 			msg.append("\n\n")
 
@@ -312,19 +352,19 @@
 				msg.append(str(pkg))
 
 				msg.append(" conflicts with\n")
-				for parent, atom in parent_atoms:
-					msg.append(2*indent)
-					if isinstance(parent,
-						(PackageArg, AtomArg)):
-						# For PackageArg and AtomArg types, it's
-						# redundant to display the atom attribute.
-						msg.append(str(parent))
-					else:
-						# Display the specific atom from SetArg or
-						# Package types.
-						msg.append("%s required by %s" % (atom, parent))
-					msg.append("\n")
+				msg.append(2*indent)
+				if isinstance(parent,
+					(PackageArg, AtomArg)):
+					# For PackageArg and AtomArg types, it's
+					# redundant to display the atom attribute.
+					msg.append(str(parent))
+				else:
+					# Display the specific atom from SetArg or
+					# Package types.
+					msg.append("%s required by %s" % (atom, parent))
 				msg.append("\n")
+			msg.append("\n")
+
 		sys.stderr.write("".join(msg))
 		sys.stderr.flush()
 
@@ -680,7 +720,7 @@
 					if dep_pkg is None:
 						self._dynamic_config._runtime_pkg_mask.setdefault(
 							dep.parent, {})["missing dependency"] = \
-								set([(dep.parent, dep.atom)])
+								set([(dep.parent, dep.root, dep.atom)])
 						self._dynamic_config._need_restart = True
 
 			return 0
@@ -1934,6 +1974,11 @@
 			traversed_nodes.add(node)
 			msg.append('(dependency required by "%s" [%s])' % \
 				(colorize('INFORM', str(node.cpv)), node.type_name))
+
+			if node not in self._dynamic_config.digraph:
+				# The parent is not in the graph due to backtracking.
+				break
+
 			# When traversing to parents, prefer arguments over packages
 			# since arguments are root nodes. Never traverse the same
 			# package twice, in order to prevent an infinite loop.
@@ -2430,7 +2475,7 @@
 			except KeyError:
 				raise portage.exception.PackageNotFound(cpv)
 			pkg = Package(built=(type_name != "ebuild"), cpv=cpv,
-				installed=installed, metadata=metadata,
+				installed=installed, metadata=metadata, onlydeps=onlydeps,
 				root_config=root_config, type_name=type_name)
 			self._frozen_config._pkg_cache[pkg] = pkg
 		return pkg

Modified: main/branches/prefix/pym/portage/dbapi/porttree.py
===================================================================
--- main/branches/prefix/pym/portage/dbapi/porttree.py	2009-07-31 07:34:04 UTC (rev 13866)
+++ main/branches/prefix/pym/portage/dbapi/porttree.py	2009-07-31 07:36:27 UTC (rev 13867)
@@ -124,6 +124,10 @@
 		"Define self.settings as an alias for self.mysettings, " + \
 		"for conformity with other dbapi classes.")
 
+	@property
+	def _categories(self):
+		return self.settings.categories
+
 	def __init__(self, porttree_root, mysettings=None):
 		portdbapi.portdbapi_instances.append(self)
 
@@ -133,7 +137,7 @@
 		else:
 			from portage import settings
 			self.mysettings = config(clone=settings)
-		self._categories = self.mysettings.categories
+
 		# This is strictly for use in aux_get() doebuild calls when metadata
 		# is generated by the depend phase.  It's safest to use a clone for
 		# this purpose because doebuild makes many changes to the config




^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2009-07-31  7:36 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-31  7:36 [gentoo-commits] portage r13867 - in main/branches/prefix: bin pym/_emerge pym/portage/dbapi Fabian Groffen (grobian)

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