#!/usr/bin/python
# arekm, 2007
+from __future__ import print_function
+
import os
-import re
import rpm
-import struct
import subprocess
import sys
self.cvs = {}
self.cvs_new_nvr = []
self.cvs_new_nv = []
- self.re_n = re.compile('^(.*)-([^-]*)-([^-]*)\.src\.rpm$')
rpm.addMacro('patch', '%{nil}')
rpm.addMacro('requires_eq', '#')
rpm.addMacro('requires_eq_to', '#')
rpm.addMacro('requires_releq', '#')
rpm.addMacro('requires_ge', '#')
rpm.addMacro('requires_ge_to', '#')
- self.ts = rpm.ts()
+ rpm.setVerbosity(rpm.RPMLOG_ERR)
+ if sys.version_info[0] == 2:
+ self.ts = rpm.ts()
+
+ def __print_stderr(self, msg):
+ if sys.version_info[0] == 3:
+ print(msg, file=sys.stderr, flush=True)
+ else:
+ print(msg, file=sys.stderr)
def __clean_macros(self):
+ if sys.version_info[0] == 3:
+ rpm.reloadConfig()
for macro in ['rel', '_rel', 'snap', '_snap', 'rc', '_rc', 'subver', 'githash']:
rpm.delMacro(macro)
- macros = rpm.getMacros()
- for macro in macros.iterkeys():
- if macro.startswith('with_') or macro.startswith('without_'):
- rpm.delMacro(macro.split()[0])
-
- def __get_from_rpm(self, file_name):
- m = self.re_n.match(file_name)
- if not m:
- return False
- name = m.group(1).strip()
- version = m.group(2).strip()
- release = m.group(3).strip()
- return (name, version, release)
+ if sys.version_info[0] == 2:
+ macros = rpm.getMacros()
+ for macro in iter(macros.keys()):
+ if macro[:5] == 'with_' or macro[:8] == 'without_':
+ rpm.delMacro(macro.split()[0])
def __get_from_cvs(self, name):
spec = os.path.join(specsdir, name + '.spec')
if not os.path.isfile(spec):
- print >>sys.stderr, 'Spec file does not exist: %s' % spec
+ self.__print_stderr('Spec file does not exist: %s' % spec)
return ('','','')
- print >>sys.stderr, 'Processing: %s.spec' % name
+ self.__print_stderr('Processing: %s.spec' % name)
self.__clean_macros()
try:
- s = self.ts.parseSpec(spec)
- headers = s.headers()
- name, version, release = headers[0].sprintf('%{name};%{version};%{release}').split(';')
- release = release.partition('@')[0]
+ if sys.version_info[0] == 2:
+ s = self.ts.parseSpec(spec)
+ header = s.headers()[2]
+ else:
+ s = rpm.spec(spec)
+ header = s.sourceHeader
+ name = header[rpm.RPMTAG_NAME]
+ version = header[rpm.RPMTAG_VERSION]
+ release = header[rpm.RPMTAG_RELEASE].partition('@')[0]
return (name, version, release)
- except rpm.error:
- print >>sys.stderr, 'Failed to parse: %s.spec' % name
+ except (ValueError, rpm.error):
+ self.__print_stderr('Failed to parse: %s.spec' % name)
return ('','','')
def __update_cvs(self, name):
- if not self.cvs.has_key(name):
+ if name not in self.cvs:
self.cvs[name] = self.__get_from_cvs(name)
def __update_new(self, name):
cvs_nvr = self.cvs[name]
pkg_nvr = self.pkg[name]
- cvs_rpm_vr = rpm.labelCompare((cvs_nvr[0], cvs_nvr[1], cvs_nvr[2]), (pkg_nvr[0], pkg_nvr[1], pkg_nvr[2]))
- cvs_rpm_v = rpm.labelCompare((cvs_nvr[0], cvs_nvr[1], ""), (pkg_nvr[0], pkg_nvr[1], ""))
- rpm_cvs_vr = rpm.labelCompare((pkg_nvr[0], pkg_nvr[1], pkg_nvr[2]), (cvs_nvr[0], cvs_nvr[1], cvs_nvr[2]))
- rpm_cvs_v = rpm.labelCompare((pkg_nvr[0], pkg_nvr[1], ""), (cvs_nvr[0], cvs_nvr[1], ""))
+ try:
+ cvs_rpm_vr = rpm.labelCompare(cvs_nvr, pkg_nvr)
+ except ValueError:
+ cvs_rpm_vr = -1
+ try:
+ cvs_rpm_v = rpm.labelCompare((cvs_nvr[0], cvs_nvr[1], ""), (pkg_nvr[0], pkg_nvr[1], ""))
+ except ValueError:
+ cvs_rpm_v = -1
- if rpm_cvs_v < 0 and cvs_rpm_v > 0:
+ if cvs_rpm_v > 0:
self.cvs_new_nv.append(name)
- else:
- if rpm_cvs_vr < 0 and cvs_rpm_vr > 0 and cvs_nvr[1] == pkg_nvr[1]:
- self.cvs_new_nvr.append(name)
+ return
+ if cvs_rpm_vr > 0:
+ self.cvs_new_nvr.append(name)
def prepare(self):
self.cvs_new_nvr.sort()
self.__update_new(name)
def add_rpm(self, file_name):
- nvr = self.__get_from_rpm(file_name)
- if not nvr:
- return False
+ nvr = tuple(file_name.rsplit('-', 2))
name = nvr[0]
- if self.pkg.has_key(name):
- if rpm.labelCompare(nvr, self.pkg[name]) > 0:
- del self.pkg[name]
- self.pkg[name] = nvr
+ if name in self.pkg:
+ try:
+ if rpm.labelCompare(nvr, self.pkg[name]) > 0:
+ self.pkg[name] = nvr
+ except ValueError:
+ pass
else:
self.pkg[name] = nvr
self.__update_cvs(name)
ver_frac += msg
else:
ver_int += msg
- print ver_int
- print ver_frac
+ print(ver_int)
+ print(ver_frac)
def print_nv(self):
ver_int = "*** VERSION COMPARE ONLY ***\n"
ver_frac += msg
else:
ver_int += msg
- print ver_int
- print ver_frac
+ print(ver_int)
+ print(ver_frac)
p = Pkgs()
for d in dirs:
- for rpm_file_name in os.listdir(d):
- p.add_rpm(rpm_file_name)
+ rpm_files = [f for f in os.listdir(d) if f[-8:] == '.src.rpm']
+ for rpm_file_name in rpm_files:
+ p.add_rpm(rpm_file_name[:-8])
p.prepare()
p.print_nv()
-print "\n\n"
+print("\n\n")
p.print_nvr()