diff options
author | V3n3RiX <venerix@koprulu.sector> | 2024-12-19 23:15:44 +0000 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2024-12-19 23:15:44 +0000 |
commit | bef1519e597f49ca79d046b686d808b83e75b92f (patch) | |
tree | 9ae4bc79927bb758b63899f0e3cc83969aed7028 /src/backend/solverevdeps.py | |
parent | 8c65a871066c2cca819b96337554edb674b82f03 (diff) |
bugfix : https://bugs.redcorelinux.org/show_bug.cgi?id=165
Diffstat (limited to 'src/backend/solverevdeps.py')
-rw-r--r-- | src/backend/solverevdeps.py | 94 |
1 files changed, 41 insertions, 53 deletions
diff --git a/src/backend/solverevdeps.py b/src/backend/solverevdeps.py index 12b4eb4..bba3932 100644 --- a/src/backend/solverevdeps.py +++ b/src/backend/solverevdeps.py @@ -3,6 +3,7 @@ import animation import os import pickle +import re import signal import subprocess import sys @@ -18,61 +19,48 @@ signal.signal(signal.SIGINT, sigint_handler) @animation.wait('resolving reverse dependencies') def start(pkgname=None, depclean=False, unmerge=False): + pattern = r'(\b[a-zA-Z0-9-_]+/[a-zA-Z0-9-_]+):\s+([0-9]+(\.[0-9]+){0,4})' + rm_list = [] + + args = ['--quiet', '--pretend', '--verbose'] + args += ['--unmerge'] if unmerge else ['--depclean'] + if pkgname: + args += list(pkgname) + is_installed = int(1) is_needed = int(0) is_vague = int(0) - if unmerge: - is_needed = int(0) - try: - p_exe = subprocess.Popen(['emerge', '--unmerge', '--quiet', '--pretend', '--verbose'] + list( - pkgname), stdout=subprocess.PIPE, stderr=subprocess.PIPE) - - stdout, stderr = p_exe.communicate() - - for p_out in stderr.decode('utf-8').splitlines(): - if any(key in p_out for key in ["Couldn't find", - "to depclean."]): - is_installed = int(0) - - if any(key in p_out for key in ["short ebuild name", - "is ambiguous"]): - is_vague = int(1) - except KeyboardInterrupt: - p_exe.terminate() - try: - p_exe.wait(1) - except subprocess.TimeoutExpired: - p_exe.kill() - sys.exit() - else: + try: + p_exe = subprocess.Popen( + ['emerge'] + args, stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + + stdout, stderr = p_exe.communicate() + + for p_out in stdout.decode('utf-8').splitlines(): + match = re.search(pattern, p_out) + if match: + to_remove = f"{match.group(1)}-{match.group(2)}" + rm_list.append(to_remove) + + if any(key in p_out for key in ["pulled in by:", "required"]): + is_needed = int(1) + + for p_out in stderr.decode('utf-8').splitlines(): + if any(key in p_out for key in ["Couldn't find", "to depclean."]): + is_installed = int(0) + + if any(key in p_out for key in ["short ebuild name", "is ambiguous"]): + is_vague = int(1) + + except KeyboardInterrupt: + p_exe.terminate() try: - p_exe = subprocess.Popen(['emerge', '--depclean', '--quiet', '--pretend', - '--verbose'] + list(pkgname), stdout=subprocess.PIPE, stderr=subprocess.PIPE) - - stdout, stderr = p_exe.communicate() - - for p_out in stdout.decode('utf-8').splitlines(): - if any(key in p_out for key in ["pulled in by:", - "required"]): - is_needed = int(1) - - for p_out in stderr.decode('utf-8').splitlines(): - if any(key in p_out for key in ["Couldn't find", - "to depclean."]): - is_installed = int(0) - - if any(key in p_out for key in ["short ebuild name", - "is ambiguous"]): - is_vague = int(1) - - except KeyboardInterrupt: - p_exe.terminate() - try: - p_exe.wait(1) - except subprocess.TimeoutExpired: - p_exe.kill() - sys.exit() - - pickle.dump([is_installed, is_needed, is_vague], open(os.path.join( - sisyphus.getfs.p_mtd_dir, "sisyphus_pkgrevdeps.pickle"), "wb")) + p_exe.wait(1) + except subprocess.TimeoutExpired: + p_exe.kill() + sys.exit() + + pickle.dump([is_installed, is_needed, is_vague, rm_list], open( + os.path.join(sisyphus.getfs.p_mtd_dir, "sisyphus_pkgrevdeps.pickle"), "wb")) |