#!/usr/bin/env python
#---------------------------------------------------------------
# Project         : Mandrake Linux
# Module          : rpm-rebuilder
# File            : rpmold
# Version         : $Id: rpmold,v 1.3 2003/08/07 12:23:42 gbeauchesne Exp $
# Author          : Frederic Lepied
# Created On      : Wed Feb  2 05:57:50 2000
#---------------------------------------------------------------

import rpm
import sys
import os

# check if we use a rpm version compatible with 4.2
try:
    if rpm.RPMTAG_SOURCEPACKAGE:
        v42=1
except AttributeError:
    v42=0

def headersToInfo(headers):
	return ()

def compareVersions(p1, p2):
	e1=p1[0]
	e2=p2[0]
#	print "epoch", e1, e2
	# First compare epoch
	if e1 and not e2:
		return 1
	elif not e1 and e2:
		return -1
	elif e1 and e2 and cmp(e1, e2) != 0:
            return cmp(e1, e2)
	else:
		# no epoch
		v1=p1[1]
		v2=p2[1]
		ret=cmp(v1, v2)
#		print "version", v1, v2, ret
		if ret != 0:
			return ret
		r1=p1[2]
		r2=p2[2]
		ret=cmp(r1, r2)
#		print "release", r1, r2, ret
		return ret

def rpmOld(files):
    # Associative array indexed on package names.
    # Data element is a list for each package of the epoch, the version, the
    # release and the file name.
    all={}

    # list of wrong files
    l=[]
    for f in files:
	try:
            fd=os.open(f, os.O_RDONLY)

	    if v42:
                ts=rpm.TransactionSet()
                # Don't check signatures here...
                ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES)
                headers=ts.hdrFromFdno(fd)
                if headers[rpm.RPMTAG_SOURCEPACKAGE]:
                    is_source=1
                else:
                    is_source=0
            else:
                (headers, is_source)=rpm.headerFromPackage(fd)

            os.close(fd)
	except:
            sys.stderr.write("error reading " + f +"\n")
            continue
	name=headers[rpm.RPMTAG_NAME]
	info=(headers[rpm.RPMTAG_EPOCH],  headers[rpm.RPMTAG_VERSION], headers[rpm.RPMTAG_RELEASE], f)
	try:
            other=all[name]
            c=compareVersions(other, info)
            if c == 0:
                sys.stderr.write("error same versions for " + f + " and " + other[3] + "\n")
            elif c < 0:
                l.append(other[3])
                all[name]=info
            else:
                print info[3]
        except KeyError:
            all[name]=info
    return l

if __name__ == '__main__':
    for f in rpmOld(sys.argv[1:]):
        print f
    
# rpmold ends here
