]>
code.delx.au - monosys/blob - bin/pacorphan
8 PACORPHAN_PATH
= os
.path
.expanduser("~/.pacorphan")
11 for line
in subprocess
.check_output(cmd
).decode("utf-8").split("\n"):
16 def strip_comment(line
):
24 mark_explicit_list
= []
25 need_install_list
= []
26 unneeded_pkg_list
= []
27 installed_pkg_list
= []
28 explicit_pkg_list
= []
30 for filename
in os
.listdir(PACORPHAN_PATH
):
31 if filename
.startswith("."):
33 filename
= os
.path
.join(PACORPHAN_PATH
, filename
)
34 for pkg
in codecs
.open(filename
, "r", "utf-8"):
35 pkg
= strip_comment(pkg
)
36 if pkg
in keep_pkg_list
:
37 print("# Duplicate entry: " + pkg
)
39 keep_pkg_list
.append(pkg
.strip())
41 for pkg
in run(["pacman", "-Qq"]):
42 installed_pkg_list
.append(pkg
)
44 for pkg
in run(["pacman", "-Qtq"]):
45 unneeded_pkg_list
.append(pkg
)
47 for pkg
in run(["pacman", "-Qeq"]):
48 explicit_pkg_list
.append(pkg
)
51 for pkg
in keep_pkg_list
:
52 if pkg
in unneeded_pkg_list
:
53 unneeded_pkg_list
.remove(pkg
)
55 if pkg
in explicit_pkg_list
:
56 explicit_pkg_list
.remove(pkg
)
58 if pkg
in installed_pkg_list
:
59 mark_explicit_list
.append(pkg
)
61 need_install_list
.append(pkg
)
65 print("# Found packages to remove")
66 print("sudo pacman -R " + " ".join(unneeded_pkg_list
))
70 print("# Found explicitly installed packages to keep")
71 print("echo " + " ".join(explicit_pkg_list
) + " | tr ' ' '\\n' >> ~/.pacorphan/keep")
74 if mark_explicit_list
:
75 print("# Found packages which should be marked as explicitly installed")
76 print("sudo pacman -D --asexplicit " + " ".join(mark_explicit_list
))
80 print("# Found packages which should be installed")
81 print("sudo pacman -S " + " ".join(need_install_list
))