summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2012-03-08 21:08:40 -0800
committerZac Medico <zmedico@gentoo.org>2012-03-08 21:08:40 -0800
commitbadeb48eae2a1d429902f654c2de60d67283ded7 (patch)
tree1886378b7b3debaf839078b234fa24000a7a1df9
parentUse Popen to avoid unnecessary shell. (diff)
downloadportage-badeb48eae2a1d429902f654c2de60d67283ded7.tar.gz
portage-badeb48eae2a1d429902f654c2de60d67283ded7.tar.bz2
portage-badeb48eae2a1d429902f654c2de60d67283ded7.zip
Exit after killed while waiting on prefetch.
-rw-r--r--pym/_emerge/AsynchronousTask.py15
-rw-r--r--pym/_emerge/Binpkg.py6
-rw-r--r--pym/_emerge/EbuildBuild.py6
3 files changed, 25 insertions, 2 deletions
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