summaryrefslogtreecommitdiff
path: root/src/backend/sysclean.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/sysclean.py')
-rw-r--r--src/backend/sysclean.py52
1 files changed, 34 insertions, 18 deletions
diff --git a/src/backend/sysclean.py b/src/backend/sysclean.py
index 937c8ec..2df6a0f 100644
--- a/src/backend/sysclean.py
+++ b/src/backend/sysclean.py
@@ -4,6 +4,7 @@ import atexit
import fcntl
import io
import os
+import pickle
import signal
import selectors
import subprocess
@@ -11,6 +12,7 @@ import sys
import sisyphus.checkenv
import sisyphus.getclr
import sisyphus.killemerge
+import sisyphus.solverevdeps
import sisyphus.syncdb
@@ -41,11 +43,40 @@ def sigint_handler(signal, frame):
signal.signal(signal.SIGINT, sigint_handler)
-def start(gfx_ui=False):
+def start(depclean=False, gfx_ui=False):
args = ['--quiet', '--depclean']
- if sisyphus.checkenv.root() and not gfx_ui:
- print(f"\n{sisyphus.getclr.bright_white}Orphaned and no longer needed packages are slated for{sisyphus.getclr.reset} {sisyphus.getclr.green}'safe'{sisyphus.getclr.reset} {sisyphus.getclr.bright_white}removal.{sisyphus.getclr.reset}\n")
+ if not sisyphus.checkenv.root() and depclean:
+ print(f"{sisyphus.getclr.bright_red}\nRoot permissions are required to perform this action.\n{sisyphus.getclr.reset}")
+ sys.exit()
+ else:
+ if gfx_ui:
+ sisyphus.solverevdeps.start.__wrapped__(depclean=True)
+ else:
+ sisyphus.solverevdeps.start(depclean=True)
+
+ is_installed, is_needed, is_vague, rm_list = pickle.load(
+ open(os.path.join(sisyphus.getfs.p_mtd_dir, "sisyphus_pkgrevdeps.pickle"), "rb"))
+
+ if 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(f"\n{sisyphus.getclr.green}These are the orphaned packages that would be{sisyphus.getclr.reset} 'safely' {sisyphus.getclr.green}unmerged, in order:{sisyphus.getclr.reset}\n")
+ print(
+ f"\n{sisyphus.getclr.magenta}{', '.join(rm_list)}{sisyphus.getclr.reset}\n")
+ print(
+ f"\n{sisyphus.getclr.bright_white}Total: {len(rm_list)} package(s){sisyphus.getclr.reset}\n")
+
while True:
user_input = input(
f"{sisyphus.getclr.bright_white}Would you like to proceed?{sisyphus.getclr.reset} [{sisyphus.getclr.bright_green}Yes{sisyphus.getclr.reset}/{sisyphus.getclr.bright_red}No{sisyphus.getclr.reset}] ")
@@ -83,18 +114,3 @@ def start(gfx_ui=False):
else:
print(
f"\nApologies, the response '{user_input}' was not recognized.\n")
- continue
- 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(f"{sisyphus.getclr.bright_red}\nRoot permissions are required for this operation.\n{sisyphus.getclr.reset}")
- sys.exit()