From a5d9e07f55f7794ebcd51924485a6909d5ec5b88 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Fri, 7 Apr 2023 19:24:14 +0100 Subject: backend : rewrite autoremove --- src/backend/autoremove.py | 48 ++++++++++++++++++++++++++-------------- src/frontend/cli/sisyphus-cli.py | 2 +- src/frontend/gui/sisyphus-gui.py | 2 +- 3 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/backend/autoremove.py b/src/backend/autoremove.py index 642ae40..46a7991 100644 --- a/src/backend/autoremove.py +++ b/src/backend/autoremove.py @@ -2,6 +2,7 @@ import atexit import io +import signal import subprocess import sys import sisyphus.checkenv @@ -10,25 +11,40 @@ import sisyphus.killemerge import sisyphus.syncdb -def start(): - if sisyphus.checkenv.root(): - p_exe = subprocess.Popen(['emerge', '--quiet', '--depclean', '--ask']) +def sigint_handler(signal, frame): + sys.exit(0) + + +signal.signal(signal.SIGINT, sigint_handler) + + +def start(gfx_ui=False): + args = ['--quiet', '--depclean'] + + if sisyphus.checkenv.root() and not gfx_ui: + p_exe = subprocess.Popen(['emerge'] + args + ['--ask']) + try: + p_exe.wait() + sisyphus.syncdb.lcl_tbl() + except KeyboardInterrupt: + p_exe.terminate() + try: + p_exe.wait(1) + except subprocess.TimeoutExpired: + p_exe.kill() + sys.exit() + elif gfx_ui: + p_exe = subprocess.Popen( + ['emerge'] + args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + # kill portage if the program dies or it's terminated by the user + atexit.register(sisyphus.killemerge.start, p_exe) + + for p_out in io.TextIOWrapper(p_exe.stdout, encoding="utf-8"): + print(p_out.rstrip()) + p_exe.wait() sisyphus.syncdb.lcl_tbl() else: print(sisyphus.getcolor.bright_red + "\nYou need root permissions to do this!\n" + sisyphus.getcolor.reset) sys.exit() - - -def xstart(): - p_exe = subprocess.Popen(['emerge', '--depclean'], - stdout=subprocess.PIPE, stderr=subprocess.PIPE) - # kill portage if the program dies or it's terminated by the user - atexit.register(sisyphus.killemerge.start, p_exe) - - for p_out in io.TextIOWrapper(p_exe.stdout, encoding="utf-8"): - print(p_out.rstrip()) - - p_exe.wait() - sisyphus.syncdb.lcl_tbl() diff --git a/src/frontend/cli/sisyphus-cli.py b/src/frontend/cli/sisyphus-cli.py index ff918b8..a761b70 100755 --- a/src/frontend/cli/sisyphus-cli.py +++ b/src/frontend/cli/sisyphus-cli.py @@ -172,7 +172,7 @@ def autoremove(): In addition, a package may no longer depend on another one, so that other package becomes orphan as well if nothing else requires it. Use this option to check the whole dependency chain for such packages, and uninstall them. """ - sisyphus.autoremove.start() + sisyphus.autoremove.start(gfx_ui=False) @app.command("autoclean") def autoclean(): diff --git a/src/frontend/gui/sisyphus-gui.py b/src/frontend/gui/sisyphus-gui.py index a2fa3cd..30bcdb4 100644 --- a/src/frontend/gui/sisyphus-gui.py +++ b/src/frontend/gui/sisyphus-gui.py @@ -417,7 +417,7 @@ class MainWorker(QtCore.QObject): @QtCore.pyqtSlot() def startAutoremove(self): self.started.emit() - sisyphus.autoremove.xstart() + sisyphus.autoremove.start(gfx_ui=True) self.finished.emit() -- cgit v1.2.3