diff options
author | V3n3RiX <venerix@koprulu.sector> | 2023-04-07 19:24:14 +0100 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2023-04-07 19:24:14 +0100 |
commit | a5d9e07f55f7794ebcd51924485a6909d5ec5b88 (patch) | |
tree | b53ea500a8eb2d6df168dec92e55ccd879e137a8 /src | |
parent | c8b3803ba3a0a5dd0d61d2ae178b8977c397b1b7 (diff) |
backend : rewrite autoremove
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/autoremove.py | 48 | ||||
-rwxr-xr-x | src/frontend/cli/sisyphus-cli.py | 2 | ||||
-rw-r--r-- | 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() |