#!/usr/bin/python # arekm, 2008 # remove import os import re import time import rpm import sys re_rpm = re.compile(r'.*\.rpm$') re_nvr = re.compile('^(.*)-([^-]*)-([^-]*)\.rpm$') dir = '/home/pld/admins/th/ftp/.archive/PLD/SRPMS/RPMS' ts = rpm.TransactionSet("", (rpm.RPMVSF_NOHDRCHK or rpm.RPMVSF_NEEDPAYLOAD)) def compare(f1, f2): try: fd1 = os.open(os.path.join(dir, f1), os.O_RDONLY) except Exception, e: print e # ignore non-files return 0 try: fd2 = os.open(os.path.join(dir, f2), os.O_RDONLY) except Exception, e: print e # ignore non-files return 0 h1 = ts.hdrFromFdno(fd1) h2 = ts.hdrFromFdno(fd2) os.close(fd1) os.close(fd2) l1 = rpm.versionCompare(h1, h2) l2 = rpm.versionCompare(h2, h1) if l1 > 0 and l2 > 0: return 0 return -l1 def find_old(files): return sorted(files, compare) files = {} dupes = {} for file in os.listdir(dir): if not re_rpm.match(file): continue m = re_nvr.match(file) if not m: print "problem with: %s" % file sys.exit(1) if len(sys.argv) == 0: p = os.path.join(dir, file) mtime = os.stat(p).st_mtime if mtime > time.time() - 3*86400: continue name = m.group(1) if files.has_key(name): if dupes.has_key(name): dupes[name].append(file) else: dupes[name] = [ files[name] ] dupes[name].append(file) else: files[name] = file for i in dupes.iterkeys(): for old in find_old(dupes[i])[1:]: os.system("/home/pld/admins/th/pld-ftp-admin/scripts/remove.py .archive/PLD %s" % old)