]>
code.delx.au - monosys/blob - bin/pacorphan
8 PACORPHAN_PATH
= os
.path
.expanduser("~/.pacorphan")
11 mark_explicit_list
= []
12 need_install_list
= []
13 unneeded_pkg_list
= []
14 installed_pkg_list
= []
15 explicit_pkg_list
= []
17 def strip_comment(line
):
23 for dirpath
, dirnames
, filenames
in os
.walk(PACORPHAN_PATH
):
24 for filename
in filenames
:
25 if filename
.startswith("."):
27 filename
= os
.path
.join(dirpath
, filename
)
28 for pkg
in codecs
.open(filename
, "r", "utf-8"):
29 pkg
= strip_comment(pkg
)
30 if pkg
in keep_pkg_list
:
31 print("# Duplicate entry: " + pkg
)
33 keep_pkg_list
.append(pkg
.strip())
35 for pkg
in subprocess
.check_output(["pacman", "-Qq"]).decode("utf-8").split():
36 installed_pkg_list
.append(pkg
.strip())
38 for pkg
in subprocess
.check_output(["pacman", "-Qtq"]).decode("utf-8").split():
39 unneeded_pkg_list
.append(pkg
.strip())
41 for pkg
in subprocess
.check_output(["pacman", "-Qeq"]).decode("utf-8").split():
42 explicit_pkg_list
.append(pkg
.strip())
45 for pkg
in keep_pkg_list
:
46 if pkg
in unneeded_pkg_list
:
47 unneeded_pkg_list
.remove(pkg
)
49 if pkg
in explicit_pkg_list
:
50 explicit_pkg_list
.remove(pkg
)
52 if pkg
in installed_pkg_list
:
53 mark_explicit_list
.append(pkg
)
55 need_install_list
.append(pkg
)
59 print("# Found packages to remove")
60 print("sudo pacman -R " + " ".join(unneeded_pkg_list
))
64 print("# Found explicitly installed packages to keep")
65 print("echo " + " ".join(explicit_pkg_list
) + " | tr ' ' '\\n' >> ~/.pacorphan/keep")
68 if mark_explicit_list
:
69 print("# Found packages which should be marked as explicitly installed")
70 print("sudo pacman -D --asexplicit " + " ".join(mark_explicit_list
))
74 print("# Found packages which should be installed")
75 print("sudo pacman -S " + " ".join(need_install_list
))