]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blobdiff - wwwbin/ftp-freshness.py
Fix outdated syntax
[projects/pld-ftp-admin.git] / wwwbin / ftp-freshness.py
index 6bb190f81cc292e8eb391f24470d4c97b7c6c336..1f71180755a5ff2e9eba0c1dc69eee1dc7883e30 100755 (executable)
@@ -1,10 +1,10 @@
-#!/usr/bin/python
+#!/usr/bin/python3
 # arekm, 2007
 
+from __future__ import print_function
+
 import os
-import re
 import rpm
-import struct
 import subprocess
 import sys
 
@@ -31,68 +31,77 @@ class Pkgs(object):
         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)
-            header = s.headers()[0]
+            if sys.version_info[0] == 2:
+                s = self.ts.parseSpec(spec)
+                header = s.headers()[0]
+            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, pkg_nvr)
-        cvs_rpm_v = rpm.labelCompare((cvs_nvr[0], cvs_nvr[1], ""), (pkg_nvr[0], pkg_nvr[1], ""))
-        rpm_cvs_vr = rpm.labelCompare(pkg_nvr, cvs_nvr)
-        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()
@@ -106,14 +115,14 @@ class Pkgs(object):
             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)
@@ -130,8 +139,8 @@ class Pkgs(object):
                 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"
@@ -145,17 +154,18 @@ class Pkgs(object):
                 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()
This page took 0.102333 seconds and 4 git commands to generate.