AbstractEbuildProcess: handle kill by signal
authorZac Medico <zmedico@gentoo.org>
Thu, 9 Jun 2011 16:19:33 +0000 (09:19 -0700)
committerZac Medico <zmedico@gentoo.org>
Thu, 9 Jun 2011 16:19:33 +0000 (09:19 -0700)
This will fix bug #368817.

pym/_emerge/AbstractEbuildProcess.py

index 39c613bfe246eb73676cc1bf5db7267c6897df96..4348788874b838a9e2a671dfbd64411249d851f8 100644 (file)
@@ -181,6 +181,11 @@ class AbstractEbuildProcess(SpawnProcess):
                return not ('sesandbox' in self.settings.features \
                        and self.settings.selinux_enabled()) or os.isatty(slave_fd)
 
+       def _killed_by_signal(self, signum):
+               msg = _("The ebuild phase '%s' has been "
+               "killed by signal %s.") % (self.phase, signum)
+               self._eerror(textwrap.wrap(msg, 72))
+
        def _unexpected_exit(self):
 
                phase = self.phase
@@ -243,14 +248,23 @@ class AbstractEbuildProcess(SpawnProcess):
                        if self._exit_command.exitcode is not None:
                                self.returncode = self._exit_command.exitcode
                        else:
-                               self.returncode = 1
-                               if not self.cancelled:
-                                       self._unexpected_exit()
+                               if self.returncode < 0:
+                                       if not self.cancelled:
+                                               self._killed_by_signal(-self.returncode)
+                               else:
+                                       self.returncode = 1
+                                       if not self.cancelled:
+                                               self._unexpected_exit()
                        if self._build_dir is not None:
                                self._build_dir.unlock()
                                self._build_dir = None
                elif not self.cancelled:
                        exit_file = self.settings.get('PORTAGE_EBUILD_EXIT_FILE')
                        if exit_file and not os.path.exists(exit_file):
-                               self.returncode = 1
-                               self._unexpected_exit()
+                               if self.returncode < 0:
+                                       if not self.cancelled:
+                                               self._killed_by_signal(-self.returncode)
+                               else:
+                                       self.returncode = 1
+                                       if not self.cancelled:
+                                               self._unexpected_exit()