From badeb48eae2a1d429902f654c2de60d67283ded7 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Thu, 8 Mar 2012 21:08:40 -0800 Subject: Exit after killed while waiting on prefetch. --- pym/_emerge/AsynchronousTask.py | 15 +++++++++++++++ pym/_emerge/Binpkg.py | 6 +++++- pym/_emerge/EbuildBuild.py | 6 +++++- 3 files changed, 25 insertions(+), 2 deletions(-) (limited to 'pym') diff --git a/pym/_emerge/AsynchronousTask.py b/pym/_emerge/AsynchronousTask.py index df72bae55..7a193ce7d 100644 --- a/pym/_emerge/AsynchronousTask.py +++ b/pym/_emerge/AsynchronousTask.py @@ -1,6 +1,8 @@ # Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 +import signal + from portage import os from portage.util.SlotObject import SlotObject @@ -18,6 +20,8 @@ class AsynchronousTask(SlotObject): ("_exit_listeners", "_exit_listener_stack", "_start_listeners", "_waiting") + _cancelled_returncode = - signal.SIGINT + def start(self): """ Start an asynchronous task and then return as soon as possible. @@ -76,6 +80,17 @@ class AsynchronousTask(SlotObject): """ pass + def _was_cancelled(self): + """ + If cancelled, set returncode if necessary and return True. + Otherwise, return False. + """ + if self.cancelled: + if self.returncode is None: + self.returncode = self._cancelled_returncode + return True + return False + def addStartListener(self, f): """ The function will be called with one argument, a reference to self. diff --git a/pym/_emerge/Binpkg.py b/pym/_emerge/Binpkg.py index 395a506c3..ea8a1ad13 100644 --- a/pym/_emerge/Binpkg.py +++ b/pym/_emerge/Binpkg.py @@ -1,4 +1,4 @@ -# Copyright 1999-2011 Gentoo Foundation +# Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 from _emerge.EbuildPhase import EbuildPhase @@ -104,6 +104,10 @@ class Binpkg(CompositeTask): def _prefetch_exit(self, prefetcher): + if self._was_cancelled(): + self.wait() + return + pkg = self.pkg pkg_count = self.pkg_count if not (self.opts.pretend or self.opts.fetchonly): diff --git a/pym/_emerge/EbuildBuild.py b/pym/_emerge/EbuildBuild.py index 6e37cdaaa..27aa7ca05 100644 --- a/pym/_emerge/EbuildBuild.py +++ b/pym/_emerge/EbuildBuild.py @@ -1,4 +1,4 @@ -# Copyright 1999-2011 Gentoo Foundation +# Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 from _emerge.EbuildExecuter import EbuildExecuter @@ -107,6 +107,10 @@ class EbuildBuild(CompositeTask): def _prefetch_exit(self, prefetcher): + if self._was_cancelled(): + self.wait() + return + opts = self.opts pkg = self.pkg settings = self.settings -- cgit v1.2.3-1-g7c22