commit: 97d01ff55ca7450a78bdb62f2dcdb17a7d8acecb Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org> AuthorDate: Tue Sep 8 06:15:25 2015 +0000 Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org> CommitDate: Thu Mar 9 09:34:07 2017 +0000 URL: https://gitweb.gentoo.org/proj/catalyst.git/commit/?id=97d01ff5
Move the signal handler into the StageBase class so it can handle unbind() cleanup Not quite complete, still errors on some unmounting bin/catalyst | 19 ------------------- catalyst/base/stagebase.py | 27 +++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/bin/catalyst b/bin/catalyst index 72a4cb4..a64cfce 100755 --- a/bin/catalyst +++ b/bin/catalyst @@ -12,25 +12,6 @@ from __future__ import print_function import sys -# This block ensures that ^C interrupts are handled quietly. -try: - import signal - - def exithandler(_signum, _frame): - signal.signal(signal.SIGINT, signal.SIG_IGN) - signal.signal(signal.SIGTERM, signal.SIG_IGN) - print() - sys.exit(1) - - signal.signal(signal.SIGINT, exithandler) - signal.signal(signal.SIGTERM, exithandler) - signal.signal(signal.SIGPIPE, signal.SIG_DFL) - -except KeyboardInterrupt: - print() - sys.exit(1) - - from catalyst.main import main try: diff --git a/catalyst/base/stagebase.py b/catalyst/base/stagebase.py index b857a64..ef58454 100644 --- a/catalyst/base/stagebase.py +++ b/catalyst/base/stagebase.py @@ -2,6 +2,7 @@ import os import imp import shutil +import signal import sys from snakeoil import fileutils @@ -206,6 +207,17 @@ class StageBase(TargetBase, ClearBase, GenBase): if "portage_confdir" in self.settings: file_locate(self.settings, ["portage_confdir"], expand = 0) + + # This block ensures that ^C interrupts are handled quietly. + try: + signal.signal(signal.SIGINT, self.exithandler) + signal.signal(signal.SIGTERM, self.exithandler) + signal.signal(signal.SIGPIPE, signal.SIG_DFL) + + except KeyboardInterrupt: + print() + sys.exit(1) + # Setup our mount points. # initialize our target mounts. self.target_mounts = TARGET_MOUNT_DEFAULTS.copy() @@ -268,6 +280,21 @@ class StageBase(TargetBase, ClearBase, GenBase): self.env["PORT_LOGDIR"] = self.settings["port_logdir"] self.env["PORT_LOGDIR_CLEAN"] = PORT_LOGDIR_CLEAN + # Initialize our (de)compressor's) + self.decompressor = CompressMap(self.settings["decompress_definitions"], + env=self.env, + search_order=self.settings["decompressor_search_order"]) + + # save resources, it is not always needed + self.compressor = None + + def exithandler(self, _signum, _frame): + signal.signal(signal.SIGINT, signal.SIG_IGN) + signal.signal(signal.SIGTERM, signal.SIG_IGN) + self.unbind() + print() + sys.exit(1) + def override_cbuild(self): if "CBUILD" in self.makeconf: self.settings["CBUILD"] = self.makeconf["CBUILD"]