* [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