#!/usr/bin/python # wreq.py - (WhatRequires package) # translate provides into package names # # Requires: rpm, python >= 2.3 # # ------------------ example -------------------- # $ wreq.py libglade2 # $ libglade2-2.5.1-1 is required by: # $ beep-0.9.7-1 # $ pygtk2-2.6.2-1 # # Finding orphaned packages: # $ wreq $(rpm -qa) | grep ^\!\! from os import path, putenv, popen import sets, sys Usage = "Usage: %s package\n" % path.basename(sys.argv[0]) if not sys.argv[1:]: print Usage raise SystemExit putenv('LC_ALL', 'C') for args in sets.Set(sys.argv[1:]): # Remove duplicates from list requires = [] installed = [] installed = popen('rpm -q %s' % args) for pkg in set(installed): pkg = pkg.strip() if pkg.find('not installed') != -1: print '%s' % pkg break for item in popen('rpm -q --provides %s' % pkg): if item.find('(') == -1: for b in popen('rpm -q --whatrequires %s' % item): b = b.strip() if b.startswith('no package') or b == pkg: pass else: requires.append(b.strip()) if requires == []: print "!! No package requires %s" % pkg else: requires.sort() requires = sets.Set(requires) print "%s is required by:" % pkg for item in requires: print "\033[31;1m%s\033[0m" % item