]> code.delx.au - monosys/blob - bin/pacorphan
pacorphan: tidying
[monosys] / bin / pacorphan
1 #!/usr/bin/python3
2
3 import codecs
4 import subprocess
5 import os
6 import sys
7
8 PACORPHAN_PATH = os.path.expanduser("~/.pacorphan")
9
10 def run(cmd):
11 return subprocess.check_output(cmd).decode("utf-8").split("\n")
12
13 def strip_comment(line):
14 pos = line.find("#")
15 if pos >= 0:
16 line = line[:pos]
17 return line.strip()
18
19
20 keep_pkg_list = []
21 mark_explicit_list = []
22 need_install_list = []
23 unneeded_pkg_list = []
24 installed_pkg_list = []
25 explicit_pkg_list = []
26
27 for filename in os.listdir(PACORPHAN_PATH):
28 if filename.startswith("."):
29 continue
30 filename = os.path.join(PACORPHAN_PATH, filename)
31 for pkg in codecs.open(filename, "r", "utf-8"):
32 pkg = strip_comment(pkg)
33 if pkg in keep_pkg_list:
34 print("# Duplicate entry: " + pkg)
35 if pkg:
36 keep_pkg_list.append(pkg.strip())
37
38 for pkg in run(["pacman", "-Qq"]):
39 installed_pkg_list.append(pkg.strip())
40
41 for pkg in run(["pacman", "-Qtq"]):
42 unneeded_pkg_list.append(pkg.strip())
43
44 for pkg in run(["pacman", "-Qeq"]):
45 explicit_pkg_list.append(pkg.strip())
46
47
48 for pkg in keep_pkg_list:
49 if pkg in unneeded_pkg_list:
50 unneeded_pkg_list.remove(pkg)
51
52 if pkg in explicit_pkg_list:
53 explicit_pkg_list.remove(pkg)
54 else:
55 if pkg in installed_pkg_list:
56 mark_explicit_list.append(pkg)
57 else:
58 need_install_list.append(pkg)
59
60
61 if unneeded_pkg_list:
62 print("# Found packages to remove")
63 print("sudo pacman -R " + " ".join(unneeded_pkg_list))
64 print()
65
66 if explicit_pkg_list:
67 print("# Found explicitly installed packages to keep")
68 print("echo " + " ".join(explicit_pkg_list) + " | tr ' ' '\\n' >> ~/.pacorphan/keep")
69 print()
70
71 if mark_explicit_list:
72 print("# Found packages which should be marked as explicitly installed")
73 print("sudo pacman -D --asexplicit " + " ".join(mark_explicit_list))
74 print()
75
76 if need_install_list:
77 print("# Found packages which should be installed")
78 print("sudo pacman -S " + " ".join(need_install_list))
79 print()
80