]>
code.delx.au - monosys/blob - bin/pacorphan
eb793cdaa5f6b053f71dd8763c03e91ed7796fdd
8 PACORPHAN_PATH
= os
.path
.expanduser("~/.pacorphan")
11 return subprocess
.check_output(cmd
).decode("utf-8").split("\n")
13 def strip_comment(line
):
21 mark_explicit_list
= []
22 need_install_list
= []
23 unneeded_pkg_list
= []
24 installed_pkg_list
= []
25 explicit_pkg_list
= []
27 for filename
in os
.listdir(PACORPHAN_PATH
):
28 if filename
.startswith("."):
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
)
36 keep_pkg_list
.append(pkg
.strip())
38 for pkg
in run(["pacman", "-Qq"]):
39 installed_pkg_list
.append(pkg
.strip())
41 for pkg
in run(["pacman", "-Qtq"]):
42 unneeded_pkg_list
.append(pkg
.strip())
44 for pkg
in run(["pacman", "-Qeq"]):
45 explicit_pkg_list
.append(pkg
.strip())
48 for pkg
in keep_pkg_list
:
49 if pkg
in unneeded_pkg_list
:
50 unneeded_pkg_list
.remove(pkg
)
52 if pkg
in explicit_pkg_list
:
53 explicit_pkg_list
.remove(pkg
)
55 if pkg
in installed_pkg_list
:
56 mark_explicit_list
.append(pkg
)
58 need_install_list
.append(pkg
)
62 print("# Found packages to remove")
63 print("sudo pacman -R " + " ".join(unneeded_pkg_list
))
67 print("# Found explicitly installed packages to keep")
68 print("echo " + " ".join(explicit_pkg_list
) + " | tr ' ' '\\n' >> ~/.pacorphan/keep")
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
))
77 print("# Found packages which should be installed")
78 print("sudo pacman -S " + " ".join(need_install_list
))