#!/bin/env python
"""
RPM newst find tool
"""
import glob
import os
import rpm
import sys

readdir = '/var/opt/nec/wbmc/allrpmtmp'

class RPMFile:
       def __init__(self, file):
        self.ts = rpm.TransactionSet()
        self.ts.setVSFlags(-1) # no SIG check
        self.err = 0
        try:
            fd = os.open(file, os.O_RDONLY)
            self.header = self.ts.hdrFromFdno(fd)
            os.close(fd)
        except:
            print 'cannot open %s' % file
            self.err = 1

def compare_version(rpma, rpmb):
    return rpm.versionCompare(
               RPMFile(rpma).header, RPMFile(rpmb).header)

def get_newst_version(rpm_name):
    rpm_file = []
    for match in glob.glob(os.path.join(readdir, rpm_name + '-*.rpm')):
        r = RPMFile(match)
        if (r.err != 1):
          if rpm_name == r.header['name']:
            rpm_file.append(match)

    if rpm_file:
        rpm_file.sort(compare_version, reverse=True)
        print rpm_file[0]

def main():
    rpm_list = []
    rpm_namelist = []
    readrpmfiles = readdir[1:] + '*.rpm'
    for match in glob.glob(os.path.join(readdir,'*.rpm')):
        r = RPMFile(match)
        if (r.err != 1):
          rpm_list.append(r.header['name'])


    if rpm_list:
        rpm_namelist = set(rpm_list)

    for name in rpm_namelist:
        get_newst_version(name)

if __name__ == '__main__':
    main()
