#!/usr/bin/env python import os import sys import rpm import struct def readHeader(filename): fd = os.open(filename, os.O_RDONLY) h = ts.hdrFromFdno(fd) os.close(fd) return h def writeLead(filename, type, name, version, release): fd = os.open(filename, os.O_RDWR) # rpmlead.type buf = struct.pack("!H", type) assert(len(buf) == 2) os.lseek(fd, 6, 0) os.write(fd, buf) # rpmlead.name buf = "%s-%s-%s" % (name, version, release) if len(buf) > 64: buf = buf[0:64] os.lseek(fd, 10, 0) os.write(fd, buf) os.close(fd) RPMLEAD_BINARY = 0 RPMLEAD_SOURCE = 1 ts = rpm.TransactionSet() for arg in sys.argv[1:]: statinfo = os.stat(arg) hdr = readHeader(arg) if hdr[rpm.RPMTAG_SOURCEPACKAGE]: leadtype = RPMLEAD_SOURCE else: if (hdr[rpm.RPMTAG_SOURCERPM] and hdr[rpm.RPMTAG_SOURCERPM] != '(none)'): leadtype = RPMLEAD_BINARY else: leadtype = RPMLEAD_SOURCE writeLead(arg, leadtype, hdr['name'], hdr['version'], hdr['release']) os.utime(arg, (statinfo[7], statinfo[8]))