Skip to content

Instantly share code, notes, and snippets.

@christopherobin
Created September 14, 2017 08:06
Show Gist options
  • Save christopherobin/34f094ef919bbf728566be95f176d5d0 to your computer and use it in GitHub Desktop.
Save christopherobin/34f094ef919bbf728566be95f176d5d0 to your computer and use it in GitHub Desktop.
Pretty update information for yum distros
#!/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)
))
@christopherobin
Copy link
Author

Preview:

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment