Created
September 14, 2017 08:06
-
-
Save christopherobin/34f094ef919bbf728566be95f176d5d0 to your computer and use it in GitHub Desktop.
Pretty update information for yum distros
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import rpm | |
import yum | |
from operator import itemgetter | |
def colorize(str, col): | |
return "\x1b[%d;1m%s\x1b[0m" % (col, str) | |
# ask yum to find all packages that would be updated | |
yb = yum.YumBase() | |
updates = yb.doPackageLists('updates').updates | |
result = { | |
'updates': [], | |
'new_packages': [] | |
} | |
# for some reason yum returns some duplicates, use a set to dedup | |
seen = set() | |
max_version_len = 0 | |
for package in updates: | |
if package.base_package_name in seen: | |
continue | |
seen.add(package.base_package_name) | |
try: | |
installed_pkg = yb.getInstalledPackageObject((package.base_package_name, None, None, None, None)) | |
except: | |
result['new_packages'].append((package.base_package_name, package)) | |
continue | |
result['updates'].append((package.base_package_name, installed_pkg, package)) | |
if len(package.printVer()) > max_version_len: | |
max_version_len = len(package.printVer()) | |
# sort by name | |
result['new_packages'].sort(key=itemgetter(0)) | |
result['updates'].sort(key=itemgetter(0)) | |
# print version updates | |
print("\n%s %s :" % ( | |
colorize("==>", 32), | |
colorize("Software upgrade (new version)", 0) | |
)) | |
for update in result['updates']: | |
print(("{0:<40s} {1:<%ds} -> {2}" % (max_version_len + 9)).format( | |
colorize(update[0], 0), | |
colorize(update[1].printVer(), 32), | |
colorize(update[2].printVer(), 31) | |
)) | |
# print packages being installed | |
print("\n%s %s :" % ( | |
colorize("==>", 32), | |
colorize("New package", 0) | |
)) | |
for update in result['new_packages']: | |
print(("{0:<40s} {1:<%ds}" % (max_version_len + 9)).format( | |
colorize(update[0], 0), | |
colorize(update[1].printVer(), 32) | |
)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Preview: