86 lines
2.2 KiB
Python
Executable File
86 lines
2.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import json
|
|
import os
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
PACMAN_UPDATES_DB = f'/tmp/checkup-db-{os.getlogin()}/'
|
|
|
|
|
|
def write_output(packages, important_regex):
|
|
n_packages = packages.count('\n')
|
|
if n_packages == 0:
|
|
output_text = 'Up to date'
|
|
output_class = 'good'
|
|
output_alt = 'uptodate'
|
|
else:
|
|
if n_packages == 1:
|
|
output_text = '1 update available'
|
|
else:
|
|
output_text = f'{n_packages} updates available'
|
|
output_class = 'info'
|
|
output_alt = 'available'
|
|
|
|
if important_regex and re.search(important_regex, packages,
|
|
flags=re.MULTILINE):
|
|
output_class = 'important'
|
|
|
|
output = {'text': output_text,
|
|
'class': output_class,
|
|
'alt': output_alt}
|
|
|
|
sys.stdout.write(json.dumps(output) + '\n')
|
|
sys.stdout.flush()
|
|
|
|
|
|
def generate_and_update_database():
|
|
if not os.path.isdir(PACMAN_UPDATES_DB):
|
|
os.mkdir(PACMAN_UPDATES_DB)
|
|
|
|
subprocess.run(['fakeroot',
|
|
'--',
|
|
'pacman',
|
|
'-Sy',
|
|
'--dbpath',
|
|
PACMAN_UPDATES_DB,
|
|
'--logfile',
|
|
'/dev/null'],
|
|
env={'LC_ALL': 'C'},
|
|
stdout=subprocess.DEVNULL,
|
|
stderr=subprocess.STDOUT)
|
|
|
|
|
|
def check_updates(important_regex):
|
|
p = subprocess.run(['fakeroot',
|
|
'--',
|
|
'pacman',
|
|
'-Qu',
|
|
'--dbpath',
|
|
PACMAN_UPDATES_DB],
|
|
env={'LC_ALL': 'C'},
|
|
capture_output=True)
|
|
packages = p.stdout.decode('utf-8')
|
|
|
|
p = subprocess.run(['yay',
|
|
'-Qua',
|
|
'--devel'],
|
|
capture_output=True)
|
|
packages += p.stdout.decode('utf-8')
|
|
|
|
write_output(packages, important_regex)
|
|
|
|
|
|
def main(important_regex=None):
|
|
generate_and_update_database()
|
|
check_updates(important_regex)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if len(sys.argv) > 1:
|
|
main(sys.argv[1])
|
|
else:
|
|
main()
|