diff --git a/Pkg.py b/Pkg.py index 9c43bb16..170e74a1 100644 --- a/Pkg.py +++ b/Pkg.py @@ -388,6 +388,27 @@ class Pkg: rpm.RPMTAG_OBSOLETEVERSION, rpm.RPMTAG_OBSOLETEFLAGS) +def getInstalledPkgs(name): + """Get list of installed package objects by name.""" + pkgs = [] + if v42: + ts = rpm.TransactionSet() + tab = ts.dbMatch("name", name) + if not tab: + raise KeyError, name + for hdr in tab: + pkgs.append(InstalledPkg(name, hdr)) + else: + db = rpm.opendb() + ixs = db.findbyname(name) + if not ixs: + del db + raise KeyError, name + for ix in ixs: + pkgs.append(InstalledPkg(name, db[ix])) + del db + return pkgs + # Class to provide an API to an installed package class InstalledPkg(Pkg): def __init__(self, name, h=None): diff --git a/rpmlint.py b/rpmlint.py index fcea7f56..702b8a85 100644 --- a/rpmlint.py +++ b/rpmlint.py @@ -56,31 +56,34 @@ def main(): # Loop over all file names given in arguments dirs=[] for f in args: + pkgs = [] try: try: st=os.stat(f) if stat.S_ISREG(st[stat.ST_MODE]): - pkg=Pkg.Pkg(f, extract_dir) + pkgs.append(Pkg.Pkg(f, extract_dir)) elif stat.S_ISDIR(st[stat.ST_MODE]) and (f.index('/') >=0): dirs.append(f) continue else: raise OSError except OSError: - pkg=Pkg.InstalledPkg(f) + pkgs.extend(Pkg.getInstalledPkgs(f)) except KeyboardInterrupt: sys.stderr.write('Interrupted, exiting while reading ' + f + '\n') sys.exit(2) except rpm.error, e: sys.stderr.write('Error while reading %s: %s\n' % (f, e)) - pkg=None + pkgs = [] continue except: sys.stderr.write('Error while reading ' + f + '\n') - pkg=None + pkgs = [] continue - runChecks(pkg) + for pkg in pkgs: + runChecks(pkg) + pkg.cleanup() for d in dirs: try: