summaryrefslogtreecommitdiff
path: root/scripts/outdated.py
diff options
context:
space:
mode:
authorMichael Forney <mforney@mforney.org>2019-03-19 01:19:40 -0700
committerMichael Forney <mforney@mforney.org>2019-03-19 11:35:56 -0700
commit020a443e3b98c15165bbbd378c5c876e7b1aa928 (patch)
treeee9cc2d795aa7606dcf5878b9581456f69bbd8a0 /scripts/outdated.py
parentf9a9ca97042e50b283f940cdad73f1edd9344957 (diff)
Add script to check for out-of-date packages
Diffstat (limited to 'scripts/outdated.py')
-rw-r--r--scripts/outdated.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/scripts/outdated.py b/scripts/outdated.py
new file mode 100644
index 00000000..88911c95
--- /dev/null
+++ b/scripts/outdated.py
@@ -0,0 +1,57 @@
+import collections
+import json
+import os
+import subprocess
+import sys
+import urllib.request
+
+names = {
+ 'awk': 'nawk',
+ 'bc': 'bc-gh',
+ 'hostap': 'wpa-supplicant',
+ 'lua': 'lua52',
+ 'python': 'python3',
+ 'st': 'st-term',
+ 'terminus-font': 'fonts:terminus',
+ 'the_silver_searcher': 'the-silver-searcher',
+ 'tz': 'tzdata',
+}
+skip = set([
+ 'adobe-source-fonts',
+ 'mc',
+ 'openbsd',
+ 'plan9port',
+ 'qbe',
+ 'sbase',
+ 'sdhcp',
+ 'skeleton',
+ 'st',
+ 'swc',
+ 'ubase',
+ 'velox',
+ 'wld',
+])
+
+p = subprocess.Popen(['git', '-C', 'pkg', 'ls-tree', 'HEAD'], stdout=subprocess.PIPE)
+for line in p.stdout:
+ fields = line.decode().split()
+ if fields[1] != 'tree' or fields[3] in skip:
+ continue
+ name = fields[3]
+ with open('pkg/{}/ver'.format(name), 'r') as f:
+ oldver = f.read().rsplit(maxsplit=1)[0]
+ proj = names.get(name, name)
+ with urllib.request.urlopen('https://repology.org/api/v1/project/{}'.format(proj)) as response:
+ pkgs = json.loads(response.read())
+ newest = collections.Counter()
+ for pkg in pkgs:
+ if pkg['status'] == 'newest':
+ newest[pkg['version']] += 1
+ if not newest:
+ print('could not find newest version of {}'.format(proj), file=sys.stderr)
+ continue
+ newver = newest.most_common(1)[0][0]
+ if oldver != newver:
+ print('{:20} {:16} => {:16}'.format(name, oldver, newver))
+if p.wait():
+ raise CalledProcessError(p.retcode, p.args)