Merged from trunk -r14151:14155
authorFabian Groffen <grobian@gentoo.org>
Wed, 26 Aug 2009 09:52:04 +0000 (09:52 -0000)
committerFabian Groffen <grobian@gentoo.org>
Wed, 26 Aug 2009 09:52:04 +0000 (09:52 -0000)
   | 14154   | Show log paths when displaying the list of failed packages   |
   | zmedico | for --keep-going.                                            |

   | 14155   | Inside depgraph._show_unsatisfied_dep(), show reasons for    |
   | zmedico | packages masked due to backtracking.                         |

svn path=/main/branches/prefix/; revision=14158

pym/_emerge/Scheduler.py
pym/_emerge/depgraph.py

index bb2ed19d2c0f42da0e4a9c50ddae5cc1547646c7..6a44d0e2f2890c9330bf205697b3ebba8e490b53 100644 (file)
@@ -857,6 +857,7 @@ class Scheduler(PollScheduler):
                        self._failed_pkgs_all.extend(failed_pkgs)
                        del failed_pkgs[:]
 
+               printer = portage.output.EOutput()
                background = self._background
                failure_log_shown = False
                if background and len(self._failed_pkgs_all) == 1:
@@ -895,7 +896,6 @@ class Scheduler(PollScheduler):
                        self._failed_pkgs_die_msgs and \
                        not mod_echo_output:
 
-                       printer = portage.output.EOutput()
                        for mysettings, key, logentries in self._failed_pkgs_die_msgs:
                                root_msg = ""
                                if mysettings["ROOT"] != "/":
@@ -926,17 +926,20 @@ class Scheduler(PollScheduler):
                        else:
                                msg = "The following package has " + \
                                        "failed to build or install:"
-                       prefix = bad(" * ")
-                       writemsg(prefix + "\n", noiselevel=-1)
-                       from textwrap import wrap
-                       for line in wrap(msg, 72):
-                               writemsg("%s%s\n" % (prefix, line), noiselevel=-1)
-                       writemsg(prefix + "\n", noiselevel=-1)
+
+                       printer.eerror("")
+                       for line in textwrap.wrap(msg, 72):
+                               printer.eerror(line)
+                       printer.eerror("")
                        for failed_pkg in self._failed_pkgs_all:
-                               writemsg("%s\t%s\n" % (prefix,
-                                       colorize("INFORM", str(failed_pkg.pkg))),
-                                       noiselevel=-1)
-                       writemsg(prefix + "\n", noiselevel=-1)
+                               msg = " %s" % (colorize('INFORM', failed_pkg.pkg.__str__()),)
+                               log_path = self._locate_failure_log(failed_pkg)
+                               if log_path is not None:
+                                       msg += ", Log file:"
+                               printer.eerror(msg)
+                               if log_path is not None:
+                                       printer.eerror("  '%s'" % colorize('INFORM', log_path))
+                       printer.eerror("")
 
                if self._failed_pkgs_all:
                        return 1
index eab8d5972da1039ae19b871c5b752d415c1ad840..9b59e41576f51658b1fa96725790ca6b8d748b2f 100644 (file)
@@ -1891,9 +1891,8 @@ class depgraph(object):
                                metadata, mreasons  = get_mask_info(root_config, cpv,
                                        pkgsettings, db, pkg_type, built, installed, db_keys)
                                if metadata is not None:
-                                       pkg = Package(built=built, cpv=cpv,
-                                               installed=installed, metadata=metadata,
-                                               root_config=root_config)
+                                       pkg = self._pkg(cpv, pkg_type, root_config,
+                                               installed=installed)
                                        if pkg.cp != atom.cp:
                                                # A cpv can be returned from dbapi.match() as an
                                                # old-style virtual match even in cases when the
@@ -1901,6 +1900,11 @@ class depgraph(object):
                                                # Filter out any such false matches here.
                                                if not atom_set.findAtomForPackage(pkg):
                                                        continue
+                                       if pkg in self._dynamic_config._runtime_pkg_mask:
+                                               backtrack_reasons = \
+                                                       self._dynamic_config._runtime_pkg_mask[pkg]
+                                               mreasons.append('backtracking: %s' % \
+                                                       ', '.join(sorted(backtrack_reasons)))
                                        if mreasons:
                                                masked_pkg_instances.add(pkg)
                                        if atom.use: