summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2023-04-07 19:24:14 +0100
committerV3n3RiX <venerix@koprulu.sector>2023-04-07 19:24:14 +0100
commita5d9e07f55f7794ebcd51924485a6909d5ec5b88 (patch)
treeb53ea500a8eb2d6df168dec92e55ccd879e137a8
parentc8b3803ba3a0a5dd0d61d2ae178b8977c397b1b7 (diff)
backend : rewrite autoremove
-rw-r--r--src/backend/autoremove.py48
-rwxr-xr-xsrc/frontend/cli/sisyphus-cli.py2
-rw-r--r--src/frontend/gui/sisyphus-gui.py2
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()