]> TLD Linux GIT Repositories - tld-ftp-admin.git/commitdiff
- merged PLD changes
authorMarcin Krol <mk@furud.net>
Sun, 3 Apr 2022 12:46:42 +0000 (14:46 +0200)
committerMarcin Krol <mk@furud.net>
Sun, 3 Apr 2022 12:46:42 +0000 (14:46 +0200)
24 files changed:
bin/pfa-checksign
bin/pfa-checktree
bin/pfa-dump-locks
bin/pfa-from-incoming
bin/pfa-genindex
bin/pfa-lintpkg
bin/pfa-maintainer
bin/pfa-mvpkg
bin/pfa-rmpkg
bin/pfa-signpkg
bin/pfa-testmvpkg
bin/pfa-unlocktree
ftpiod/ftpiod.py
modules/baseftptree.py
modules/cmds.py
modules/common.py
modules/config.py
modules/cons.py
modules/ftpio.py
modules/ftptree.py
modules/mailer.py
modules/sign.py
modules/user.py
modules/wwwiface.py

index 0da6f610ead6bbc763ef7d2a7b50f1d74d60e7b8..4e22373c2bf3d83424eb4ce5d1b02b275c8fca9b 100755 (executable)
@@ -1,6 +1,8 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
+from __future__ import print_function
+
 import sys, os
 import getopt
 sys.path.insert(0, os.environ['HOME']+'/tld-ftp-admin/modules')
@@ -14,17 +16,17 @@ from sign import is_signed, signpkgs
 try:
     opts, args = getopt.getopt(sys.argv[1:], '')
 except getopt.GetoptError:
-    print >>sys.stderr, "ERR: options error"
-    print >>sys.stderr, "checksign.py tree package1 [package2...]"
+    print("ERR: options error", file=sys.stderr)
+    print("checksign.py tree package1 [package2...]", file=sys.stderr)
     sys.exit(1)
 
 if len(args) < 1:
-    print >>sys.stderr, "ERR: missing tree name"
-    print >>sys.stderr, "checksign.py tree package1 [package2...]"
+    print("ERR: missing tree name", file=sys.stderr)
+    print("checksign.py tree package1 [package2...]", file=sys.stderr)
     sys.exit(1)
 
 if sign_key == None:
-    print >>sys.stderr, "ERR: sign_key not defined in config"
+    print("ERR: sign_key not defined in config", file=sys.stderr)
     sys.exit(1)
 
 treename = args[0]
@@ -35,7 +37,7 @@ checkdir(treename)
 ftpio.connect('sign')
 
 if not ftpio.lock(treename, True):
-    print >>sys.stderr, "ERR: %s tree already locked" % treename
+    print("ERR: %s tree already locked" % treename, file=sys.stderr)
     sys.exit(1)
 
 files = []
@@ -60,7 +62,7 @@ except ftptree.SomeError:
 
 ftpio.unlock(treename)
 
-print "Checking signatures of %d packages" % len(tree.loadedpkgs)
+print("Checking signatures of %d packages" % len(tree.loadedpkgs))
 sign = []
 for pkg in tree.marked4moving:
     unsigned = 0
@@ -69,8 +71,8 @@ for pkg in tree.marked4moving:
             unsigned += 1
 
     if unsigned != 0:
-        print '%s: %d files NOT signed' % (pkg.nvr, unsigned)
+        print('%s: %d files NOT signed' % (pkg.nvr, unsigned))
     else:
-        print '%s signed' % pkg.nvr
+        print('%s signed' % pkg.nvr)
 
 sys.exit(0)
index b2e424a65f1275694323c2b9776bb7bcb87a9f77..6133082f7414c4c76517dbadffa8437bd44c317c 100755 (executable)
@@ -1,6 +1,8 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
+from __future__ import print_function
+
 import sys, os
 sys.path.insert(0, os.environ['HOME']+'/tld-ftp-admin/modules')
 import ftptree
@@ -13,8 +15,8 @@ cval=config.value
 import curses
 
 if len(sys.argv) != 3:
-    print "ERR: wrong number of arguments"
-    print "check-tree.py srctree dsttree"
+    print("ERR: wrong number of arguments")
+    print("check-tree.py srctree dsttree")
     sys.exit(1)
 
 checkdir(sys.argv[1])
@@ -22,12 +24,12 @@ checkdir(sys.argv[1])
 ftpio.connect('check-tree')
 
 if not ftpio.lock(sys.argv[1], True):
-    print "ERR: %s tree already locked" % sys.argv[1]
+    print("ERR: %s tree already locked" % sys.argv[1])
     sys.exit(1)
 
 if not ftpio.lock(sys.argv[2], True):
     ftpio.unlock(sys.argv[1])
-    print "ERR: %s tree already locked" % sys.argv[2]
+    print("ERR: %s tree already locked" % sys.argv[2])
     sys.exit(1)
 
 srctree=ftptree.FtpTree(sys.argv[1], loadall=True)
@@ -211,9 +213,9 @@ class Screen:
             else:
                 self.pkglist.bkgdset(ord(' '), self.COLOR_STANDARD)
             if i == self.pkglistselected:
-                self.pkglist.addstr(i, 2, `self.elements[i]`, curses.A_REVERSE)
+                self.pkglist.addstr(i, 2, repr(self.elements[i]), curses.A_REVERSE)
             else:
-                self.pkglist.addstr(i, 2, `self.elements[i]`, curses.A_BOLD)
+                self.pkglist.addstr(i, 2, repr(self.elements[i]), curses.A_BOLD)
             self.pkglist.bkgdset(ord(' '), self.COLOR_STANDARD)
         self.pkglist.noutrefresh(self.pkgliststartpad,0,1,0,self.pad_h,self.scr_w-1)
 
@@ -260,7 +262,7 @@ class Screen:
             self.pkgliststartpad = 0
 
     def __do_quit(self):
-        raise DoQuit
+        raise DoQuit()
 
     def __do_mark(self):
         pkg=self.elements[self.pkglistselected]
@@ -289,7 +291,7 @@ class Screen:
                     exec 'self._Screen__do_%s()' % bind[1]
 
         else:
-#            self.elements[0]=`key`
+#            self.elements[0]=repr(key)
             for bind in self.globalkeys+self.perwindowkeys[self.window-1]:
                 if bind[0].startswith('KEY_'):
                     if key == getattr(curses, bind[0]):
index 84b9b95aa5f0a5a5542d7fe9326d90f1159f5c8b..a4c825306ce658359a71ae67a9187c07121db16b 100755 (executable)
@@ -1,6 +1,8 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
+from __future__ import print_function
+
 import sys, os
 sys.path.insert(0, os.environ['HOME']+'/tld-ftp-admin/modules')
 import ftptree
@@ -8,4 +10,4 @@ import ftpio
 import config
 
 ftpio.connect()
-print ftpio.locks_dump()
+print(ftpio.locks_dump())
index 3d7ea08a59732ea0566dc140f3b8ed7156dcf5f3..1ea2d59ae3a7e4cf4067c0c860618e0cf1fe2c48 100755 (executable)
@@ -1,6 +1,8 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
+from __future__ import print_function
+
 import sys, os, stat, time, re
 sys.path.insert(0, os.environ['HOME']+'/tld-ftp-admin/modules')
 from config import incoming_dir, default_to, ftp_archs
@@ -11,7 +13,7 @@ from baseftptree import BaseFtpTree, BasePkg
 from ftptree import FtpTree, Pkg
 import ftpio
 
-os.umask(022)
+os.umask(0o022)
 
 def rm(file):
     os.remove(file)
@@ -27,7 +29,7 @@ def is_debuginfo(nvr):
     if not config.separate_debuginfo:
         return False
     pkg = nvr.split('-')[:-2]
-    return pkg[-1] == 'debuginfo'
+    return pkg[-1] == 'debuginfo' or pkg[-1] == 'debugsource'
 
 def findfiles(dir):
     def filterinfos(x):
@@ -77,8 +79,8 @@ Subject: %s
     if files_differ:
         f=open("%s/files.diff" % tmpdir, 'r')
         sm.write("Difference between %s (currently in %s) and %s FILES\n" %
-              (pkg.noarch_arch[rpmfile], `ftptree`, arch)),
-        for line in f.readlines(True)[2:]:
+              (pkg.noarch_arch[rpmfile], repr(ftptree), arch)),
+        for line in f.readlines()[2:]:
             sm.write(line)
         f.close()
 
@@ -87,15 +89,15 @@ Subject: %s
     if reqs_differ:
         f=open("%s/reqs.diff" % tmpdir, 'r')
         sm.write("Difference between %s (currently in %s) and %s REQS\n" %
-              (pkg.noarch_arch[rpmfile], `ftptree`, arch)),
-        for line in f.readlines(True)[2:]:
+              (pkg.noarch_arch[rpmfile], repr(ftptree), arch)),
+        for line in f.readlines()[2:]:
             sm.write(line)
         f.close()
 
     sm.close()
 
 def move_noarch(f, arch, rpmfile, dstpkg):
-    if dstpkg.noarch_arch.has_key(rpmfile):
+    if rpmfile in dstpkg.noarch_arch:
         os.system("LC_ALL=C rpm -qlp %s | LC_ALL=C sort > %s/files.new" %
                   (incoming_dir + arch + '/' + rpmfile, tmpdir))
         os.system("rpm -qRp %s | LC_ALL=C sort | LC_ALL=C uniq > %s/reqs.new" %
@@ -120,7 +122,7 @@ def move_noarch(f, arch, rpmfile, dstpkg):
                   (incoming_dir + arch + '/' + rpmfile, noarchcachedir, rpmfile))
         os.system("rpm -qRp %s | LC_ALL=C sort | LC_ALL=C uniq > %s/%s.reqlist" %
                   (incoming_dir + arch + '/' + rpmfile, noarchcachedir, rpmfile))
-        if not dstpkg.files.has_key(arch):
+        if arch not in dstpkg.files:
             f.write("file:noarch:%s\ninfo:noarch_arch:%s:%s\n" % (rpmfile, rpmfile, arch))
         mv(incoming_dir + arch + '/' + rpmfile, default_to + 'noarch/RPMS')
 
@@ -153,7 +155,7 @@ Subject: %s
     sm.write(msg)
 
     sm.write("Difference between %s SRPM (currently in %s) and %s RPM NVR:\n\n" %
-          (snvr[0], `ftptree`, arch)),
+          (snvr[0], repr(ftptree), arch)),
     sm.write("Expected (%s):\nV: %s\nR: %s\n\n" % snvr)
     sm.write("RPM:\nN: %s\nV: %s\nR: %s\n" % anvr)
     sm.write('\n')
@@ -164,13 +166,13 @@ Subject: %s
 try:
     ftpio.connect('from-incoming-pid-%s' % os.getpid())
 except:
-    print "Can't get ftpiod connection"
+    print("Can't get ftpiod connection")
     sys.exit(1)
 
 ftptree = BaseFtpTree(cval['default_to'])
 
 if not ftpio.lock(cval['default_to']):
-    print "Can't get lock: %s" % cval['default_to']
+    print("Can't get lock: %s" % cval['default_to'])
     sys.exit(1)
 
 moved_anything = False
@@ -187,11 +189,11 @@ for uploadinfo in findfiles(incoming_dir + 'SRPMS'):
         ftpio.log("%s file missing; skipping move until next round" % (srpm))
         continue
 
-    if ftptree.has_key(`pkg`):
+    if ftptree.has_key(repr(pkg)):
         ftpio.log("%s already present in %s; removing older files" % (srpm, ftptree))
         rm(default_to + 'SRPMS/RPMS/' + srpm)
         f = open(default_to + 'SRPMS/.metadata/' + srpm+'.info', 'a')
-        bid = pkg.build.keys()[0]
+        bid = list(pkg.build.keys())[0]
         build = pkg.build[bid]
         f.write("info:build:%s:requester:%s\ninfo:build:%s:requester_email:%s\n"
                  % (bid, build.requester, bid, build.requester_email))
@@ -214,7 +216,7 @@ for arch in ftp_archs:
         srcpkg = BasePkg(uploadinfo[:-19], content = content)
         srpm = srcpkg.files['SRPMS'][0]
 
-        if not ftptree.has_key(`srcpkg`):
+        if not ftptree.has_key(repr(srcpkg)):
             continue # We require the src.rpm to be present
 
         renvr = re.compile(r'(.*)-(.*)-(.*)\.[^.]*\.rpm')
@@ -226,10 +228,10 @@ for arch in ftp_archs:
                 ftpio.log("%s file missing; skipping move until next round" % (filem))
             continue
 
-        dstpkg = BasePkg(`srcpkg`, ftptree)
+        dstpkg = BasePkg(repr(srcpkg), ftptree)
 
-        if dstpkg.files.has_key(arch):
-            ftpio.log("files from %s for arch %s already present in %s; removing older files" % (`srcpkg`, arch, ftptree))
+        if arch in dstpkg.files:
+            ftpio.log("files from %s for arch %s already present in %s; removing older files" % (repr(srcpkg), arch, ftptree))
             for rpmfile in dstpkg.files[arch]:
                 if is_debuginfo(rpmfile):
                     dstfile = default_to + arch + '/debuginfo'
@@ -237,10 +239,10 @@ for arch in ftp_archs:
                     dstfile = default_to + arch + '/RPMS'
                 try:
                     rm(dstfile + '/' + rpmfile)
-                except OSError, e:
+                except OSError as e:
                     l = "Removing %s problem: %s" % (dstfile + '/' + rpmfile, e)
                     ftpio.log(l)
-                    print l
+                    print(l)
 
         f = open(default_to + 'SRPMS/.metadata/' + srpm + '.info', 'a')
         for rpmfile in srcpkg.files['ARCH']:
@@ -254,7 +256,7 @@ for arch in ftp_archs:
             if rpmfile[-11:] == '.noarch.rpm' and config.separate_noarch:
                 move_noarch(f, arch, rpmfile, dstpkg)
             else:
-                if not dstpkg.files.has_key(arch):
+                if arch not in dstpkg.files:
                     f.write("file:%s:%s\n" % (arch, rpmfile))
                 srcfile = incoming_dir + arch + '/' + rpmfile
 
@@ -265,10 +267,10 @@ for arch in ftp_archs:
 
                 try:
                     mv(srcfile, dstfile)
-                except OSError, e:
+                except OSError as e:
                     l = "Moving %s to %s problem: %s" % (srcfile, dstfile, e)
                     ftpio.log(l)
-                    print l
+                    print(l)
         f.close()
 
         rm(incoming_dir + arch + '/' + uploadinfo)
index a5133c5296cd9a87f4242b2d74af1dcb0c01a166..01ff1ee51ed65a77a5f467a5cf020dc67ddbc184 100755 (executable)
@@ -1,6 +1,8 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
+from __future__ import print_function
+
 import getopt
 import sys, os
 sys.path.insert(0, os.environ['HOME']+'/tld-ftp-admin/modules')
@@ -18,8 +20,8 @@ try:
         ]
     )
 except getopt.GetoptError:
-    print >>sys.stderr, "ERR: not enough parameters given"
-    print >>sys.stderr, "gen-indexes.py [--quiet] [--[no]poldek] [--[no]yum] [--[no]rpmrepo] tree [tree2...]"
+    print("ERR: not enough parameters given", file=sys.stderr)
+    print("gen-indexes.py [--quiet] [--[no]poldek] [--[no]yum] [--[no]rpmrepo] tree [tree2...]", file=sys.stderr)
     sys.exit(1)
 
 do_poldek = True
@@ -58,10 +60,10 @@ for o, a in opts:
                 do_rpmrepo = True
 
 if not quiet:
-    print "poldek: %s; yum: %s; rpmrepo: %s" % (do_poldek, do_yum, do_rpmrepo)
+    print("poldek: %s; yum: %s; rpmrepo: %s" % (do_poldek, do_yum, do_rpmrepo))
 
 if not do_poldek and not do_yum and not do_rpmrepo:
-    print >>sys.stderr, "ERR: speciy at least one action"
+    print("ERR: speciy at least one action", file=sys.stderr)
     sys.exit(1)
 
 trees = args
@@ -77,25 +79,24 @@ for tree in trees:
     if ftpio.lock(tree, True):
         locked.append(tree)
     else:
-        if not quiet:
-            print >>sys.stderr, "ERR: %s tree already locked" % tree
+        print("ERR: %s tree already locked" % tree, file=sys.stderr)
         for i in locked:
             ftpio.unlock(i)
         sys.exit(1)
 
 home = os.environ['HOME']
 
-os.umask(022)
+os.umask(0o022)
 os.nice(19)
 
 if do_poldek:
     poldek = '%s.stat/bin/poldek-new --cachedir=%s/tmp/poldek --conf %s.stat/etc/poldek.conf --mkidxz' % (ftp_dir, home, ftp_dir)
 
     for tree in trees:
-        print '\n-------------------------- %s --------------------------' % tree
+        print('\n-------------------------- %s --------------------------' % tree)
         for arch in all_ftp_archs:
-            print '\ngenerate poldek index for %s' % arch
-            print '%s -s %s%s/%s/RPMS/ --mkidxz --mkidx-type pndir' % (poldek, ftp_dir, tree, arch)
+            print('\ngenerate poldek index for %s' % arch)
+            print('%s -s %s%s/%s/RPMS/ --mkidxz --mkidx-type pndir' % (poldek, ftp_dir, tree, arch))
             os.system('%s -s %s%s/%s/RPMS/ --mkidxz --mkidx-type pndir' % (poldek, ftp_dir, tree, arch))
             if arch != 'noarch' and config.separate_debuginfo:
                 os.system('%s -s %s%s/%s/debuginfo/ --mkidxz --mkidx-type pndir' % (poldek, ftp_dir, tree, arch))
@@ -105,20 +106,20 @@ if do_yum:
     yum = '%s.stat/bin/createrepo -d -v --update --checkts --skip-stat --workers=12 -g %s.stat/repodata/comps.xml' % (ftp_dir, ftp_dir)
     comps_file = '%s.stat/repodata/comps.xml' % ftp_dir
     for tree in trees:
-        print '\n-------------------------- %s --------------------------' % tree
+        print('\n-------------------------- %s --------------------------' % tree)
         cachedir = '%s/tmp/createrepo/%s' % (home, tree)
         treedir = "%s%s" % (ftp_dir, tree)
         for arch in all_ftp_archs:
-            print '\ngenerate repodata for %s using createrepo' % arch
+            print('\ngenerate repodata for %s using createrepo' % arch)
             archdir = "%s/%s" % (treedir, arch)
             poldek_idx = "%s/RPMS/packages.ndir.md" % archdir
             repodata_idx = "%s/RPMS/repodata/repomd.xml" % archdir
             if freshen and os.path.exists(poldek_idx) and os.path.exists(repodata_idx) \
                 and not os.path.getmtime(comps_file) > os.path.getmtime(repodata_idx) \
                 and not os.path.getmtime(poldek_idx) > os.path.getmtime(repodata_idx):
-                print "repodata indexes already fresh"
+                print("repodata indexes already fresh")
                 continue
-            print ('%s %s --cache %s-%s %s/RPMS' % ("" if quiet else "time", yum, cachedir, arch, archdir))
+            print('%s %s --cache %s-%s %s/RPMS' % ("" if quiet else "time", yum, cachedir, arch, archdir))
             os.system('%s %s --cache %s-%s %s/RPMS' % ("" if quiet else "time", yum, cachedir, arch, archdir))
             if arch != 'noarch' and config.separate_debuginfo:
                 os.system('%s %s --cache %s-%s %s/debuginfo' % ("" if quiet else "time", yum, cachedir, arch, archdir))
@@ -126,14 +127,14 @@ if do_yum:
 if do_rpmrepo:
     os.system('%s cd %s.stat/repodata && cvs %s up comps.xml' % ("" if quiet else "set -x;", ftp_dir, "" if quiet else "-Q"))
     for tree in trees:
-        print '\n-------------------------- %s --------------------------' % tree
+        print('\n-------------------------- %s --------------------------' % tree)
         for arch in all_ftp_archs:
             dir = '%s/%s/%s/RPMS' % (ftp_dir, tree, arch)
             if not quiet:
-                print '\ngenerate repodata for %s using rpmrepo (in %s)' % (arch, dir)
+                print('\ngenerate repodata for %s using rpmrepo (in %s)' % (arch, dir))
             os.system('%s rpmrepo %s -o %s' % ("" if quiet else "set -x;", dir, dir))
             if not quiet:
-                print 'copy comps.xml'
+                print('copy comps.xml')
             comps = '%s.stat/repodata/comps.xml' % ftp_dir
             os.system('%s cp -p %s %s/repodata' % ("" if quiet else "set -x;", comps, dir))
 
index dca510f029292ea69c255c1f9614124ecb4bba4c..5fe2a101fe0ac7b3f9522ba5f2d80b4ffe349218 100755 (executable)
@@ -1,6 +1,8 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
+from __future__ import print_function
+
 import sys, os, re
 import getopt
 import subprocess
@@ -12,8 +14,8 @@ import ftpio
 try:
     opts, args = getopt.getopt(sys.argv[1:], 'qsdo:', [ "quiet" ])
 except getopt.GetoptError:
-    print >>sys.stderr, "ERR: options error"
-    print >>sys.stderr, "rpmlint.py tree package1 [package2...]"
+    print("ERR: options error", file=sys.stderr)
+    print("rpmlint.py tree package1 [package2...]", file=sys.stderr)
     sys.exit(1)
 
 quiet = False
@@ -31,8 +33,8 @@ for o, a in opts:
         outstream = open(a, 'w')
 
 if len(args) < 1:
-    print >>sys.stderr, "ERR: missing tree name"
-    print >>sys.stderr, "rpmlint.py tree package1 [package2...]"
+    print("ERR: missing tree name", file=sys.stderr)
+    print("rpmlint.py tree package1 [package2...]", file=sys.stderr)
     sys.exit(1)
 
 treename = args[0]
@@ -43,7 +45,7 @@ checkdir(treename)
 ftpio.connect('rpmlint')
 
 if not ftpio.lock(treename, True):
-    print >>sys.stderr, "ERR: %s tree already locked" % treename
+    print("ERR: %s tree already locked" % treename, file=sys.stderr)
     sys.exit(1)
 
 files = []
@@ -63,7 +65,7 @@ try:
         tree.mark4moving(packages)
     files = tree.rpmfiles(debugfiles = debugfiles, sourcefiles = False)
 
-except (ftptree.SomeError, KeyboardInterrupt), e:
+except (ftptree.SomeError, KeyboardInterrupt) as e:
     # In case of problems we need to unlock the tree before exiting
     ftpio.unlock(treename)
     sys.exit(1)
@@ -97,7 +99,7 @@ class LintPkg:
 
     def get_stats(self, file):
         cachefile = self.cachefile(file)
-        if not os.path.exists(cachefile):
+        if not os.path.exists(cachefile) or os.path.getsize(cachefile) <= 0:
             return None
 
         # show last line (that contains status)
@@ -129,13 +131,13 @@ class LintPkg:
     def print_stats(self, file = None):
         if file:
             (dirname, filename) = os.path.split(file)
-            print >>self.outstream, "\r\033[0K%d packages and %d specfiles checked; %d errors, %d warnings. [%s]" % (self.packages, self.specfiles, self.errors, self.warnings, filename),
+            print("\r\033[0K%d packages and %d specfiles checked; %d errors, %d warnings. [%s]" % (self.packages, self.specfiles, self.errors, self.warnings, filename), file=self.outstream)
         else:
-            print >>self.outstream, "\r\033[0K%d packages and %d specfiles checked; %d errors, %d warnings." % (self.packages, self.specfiles, self.errors, self.warnings)
+            print("\r\033[0K%d packages and %d specfiles checked; %d errors, %d warnings." % (self.packages, self.specfiles, self.errors, self.warnings), file=self.outstream)
         sys.stdout.flush()
 
     def cat(self, file):
-        print >>self.outstream, "".join(open(file, 'r').readlines())
+        print("".join(open(file, 'r').readlines()), file=self.outstream)
 
     def show_results(self, file):
         m = self.get_stats(file)
@@ -144,11 +146,11 @@ class LintPkg:
 
         cachefile = self.cachefile(file)
         if not os.path.exists(cachefile):
-            print >>self.outsteram, "MISSING: report: %s" % file
+            print("MISSING: report: %s" % file, file=self.outstream)
 
         if m['errors'] > 0 or m['warnings'] > 0:
             (dirname, filename) = os.path.split(file)
-            print >>self.outstream, "rpmlint: %s" % filename
+            print("rpmlint: %s" % filename, file=self.outstream)
             self.cat(cachefile)
 
     def rpmlint(self, file):
@@ -177,11 +179,11 @@ class LintPkg:
 try:
     lock = 'rpmlint:'+treename
     if not ftpio.lock(lock, True):
-        print >>sys.stderr, "ERR: %s tree already locked for rpmlint" % treename
+        print("ERR: %s tree already locked for rpmlint" % treename, file=sys.stderr)
         sys.exit(1)
 
     if not quiet:
-        print >>outstream, "rpmlint of %d files from %d packages" % (len(files), len(tree.loadedpkgs))
+        print("rpmlint of %d files from %d packages" % (len(files), len(tree.loadedpkgs)), file=outstream)
     lint = LintPkg("~/tmp/rpmlint")
     lint.outstream = outstream
     for file in files:
index 87fe48b730445de34d5df373672c263786d763be..31b60a1bc9e32ffad6e656dbb43e6994d90e45b2 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
 import sys, os
index dc225d165bf76507f8374dd0f616031b39cbe411..a10367028f2086778190965576c6f895ccc78219 100755 (executable)
@@ -1,6 +1,8 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
+from __future__ import print_function
+
 import sys, os
 sys.path.insert(0, os.environ['HOME']+'/tld-ftp-admin/modules')
 import ftptree
@@ -9,7 +11,7 @@ import ftpio
 from mailer import Message
 from config import archived_trees, logs_list
 
-os.umask(022)
+os.umask(0o022)
 
 nocheckbuild = False
 if len(sys.argv) > 4 and sys.argv[1] == '-nb':
@@ -17,10 +19,10 @@ if len(sys.argv) > 4 and sys.argv[1] == '-nb':
     sys.argv = sys.argv[1:]
 
 if len(sys.argv) < 4:
-    print >>sys.stderr, "ERR: not enough parameters given"
-    print >>sys.stderr, "move.py [options] src-tree dst-tree package [package2 package3 ...]"
-    print >>sys.stderr, "\nOptions:"
-    print >>sys.stderr, "      -nb    Do not check if builds are finished.\n"
+    print("ERR: not enough parameters given", file=sys.stderr)
+    print("move.py [options] src-tree dst-tree package [package2 package3 ...]", file=sys.stderr)
+    print("\nOptions:", file=sys.stderr)
+    print("      -nb    Do not check if builds are finished.\n", file=sys.stderr)
     sys.exit(1)
 
 checkdir(sys.argv[1])
@@ -35,18 +37,18 @@ else:
 ftpio.connect('move')
 
 if not ftpio.lock(sys.argv[1], True):
-    print >>sys.stderr, "ERR: %s tree already locked" % sys.argv[1]
+    print("ERR: %s tree already locked" % sys.argv[1], file=sys.stderr)
     sys.exit(1)
 
 if not ftpio.lock(sys.argv[2], True):
     ftpio.unlock(sys.argv[1])
-    print >>sys.stderr, "ERR: %s tree already locked" % sys.argv[2]
+    print("ERR: %s tree already locked" % sys.argv[2], file=sys.stderr)
     sys.exit(1)
 
 if archivetreename != None and archivetreename != sys.argv[1] and not ftpio.lock(archivetreename, True):
     ftpio.unlock(sys.argv[2])
     ftpio.unlock(sys.argv[1])
-    print "ERR: %s tree already locked" % archivetreename
+    print("ERR: %s tree already locked" % archivetreename, file=sys.stderr)
     sys.exit(1)
 
 try:
@@ -78,7 +80,7 @@ if archivetreename != None and archivetreename != sys.argv[1]:
 if logs_list == None:
     sys.exit(0)
 
-print 'Sending mail notification to %s...' % logs_list
+print('Sending mail notification to %s...' % logs_list)
 
 pkgs = {}
 
@@ -92,7 +94,7 @@ for pkg in srctree.marked4moving:
 ftpadmin = "(unknown)"
 try:
     ftpadmin = os.environ['FTPADM']
-except KeyError, e:
+except KeyError as e:
     pass
 m = Message()
 m.set_headers(
@@ -117,4 +119,4 @@ for nvr in sorted(pkgs.keys()):
 
 m.send()
 
-print 'done.'
+print('done.')
index d5ee340cd9be7eb4123ff6548ed640aaac815b48..d44bac42840a7fa08c9059d661690e823dfba77e 100755 (executable)
@@ -1,6 +1,8 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
+from __future__ import print_function
+
 import sys, os
 sys.path.insert(0, os.environ['HOME']+'/tld-ftp-admin/modules')
 import ftptree
@@ -8,8 +10,8 @@ from common import checkdir
 import ftpio
 
 if len(sys.argv) < 3:
-    print "ERR: not enough parameters given"
-    print "remove.py tree package1 [package2...]"
+    print("ERR: not enough parameters given")
+    print("remove.py tree package1 [package2...]")
     sys.exit(1)
 
 checkdir(sys.argv[1])
@@ -17,7 +19,7 @@ checkdir(sys.argv[1])
 ftpio.connect('remove')
 
 if not ftpio.lock(sys.argv[1], True):
-    print "ERR: %s tree already locked" % sys.argv[1]
+    print("ERR: %s tree already locked" % sys.argv[1])
     sys.exit(1)
 
 try:
index e976b2f99c9f9d2ade10a9fe36bc46a38245bf20..7df7f43f809361f830a3c047958e55e8620bc83f 100755 (executable)
@@ -1,6 +1,8 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
+from __future__ import print_function
+
 import sys, os
 import getopt
 sys.path.insert(0, os.environ['HOME']+'/tld-ftp-admin/modules')
@@ -11,22 +13,22 @@ import ftpio
 from config import sign_key
 from sign import is_signed, signpkgs
 
-os.umask(022)
+os.umask(0o022)
 
 try:
     opts, args = getopt.getopt(sys.argv[1:], '')
 except getopt.GetoptError:
-    print >>sys.stderr, "ERR: options error"
-    print >>sys.stderr, "sign.py tree package1 [package2...]"
+    print("ERR: options error", file=sys.stderr)
+    print("sign.py tree package1 [package2...]", file=sys.stderr)
     sys.exit(1)
 
 if len(args) < 1:
-    print >>sys.stderr, "ERR: missing tree name"
-    print >>sys.stderr, "sign.py tree package1 [package2...]"
+    print("ERR: missing tree name", file=sys.stderr)
+    print("sign.py tree package1 [package2...]", file=sys.stderr)
     sys.exit(1)
 
 if sign_key == None:
-    print >>sys.stderr, "ERR: sign_key not defined in config"
+    print("ERR: sign_key not defined in config", file=sys.stderr)
     sys.exit(1)
 
 treename = args[0]
@@ -37,7 +39,7 @@ checkdir(treename)
 ftpio.connect('sign')
 
 if not ftpio.lock(treename, True):
-    print >>sys.stderr, "ERR: %s tree already locked" % treename
+    print("ERR: %s tree already locked" % treename, file=sys.stderr)
     sys.exit(1)
 
 files = []
@@ -63,7 +65,7 @@ except ftptree.SomeError:
 
 ftpio.unlock(treename)
 
-print "Checking signatures of %d files from %d packages" % (len(files), len(tree.loadedpkgs))
+print("Checking signatures of %d files from %d packages" % (len(files), len(tree.loadedpkgs)))
 sign = []
 n = c = 0
 for file in files:
@@ -71,12 +73,12 @@ for file in files:
         sign.append(file)
         c += 1
     n += 1
-    print "\r%d/%d %s\033[0K" % (n, c, file),
+    print("\r%d/%d %s\033[0K" % (n, c, file), end='')
 
-print ""
+print()
 
 if len(sign) == 0:
-    print "No files to sign"
+    print("No files to sign")
     sys.exit(0)
 
 # http://mail.python.org/pipermail/python-list/2009-February/700658.html
@@ -95,22 +97,22 @@ def chunk(seq, size, pad=None):
      [[1], [2], [3], [4], [5], [6], [7], [8], [9]]
      >>> list(chunk(range(1,10),9))
      [[1, 2, 3, 4, 5, 6, 7, 8, 9]]
-     >>> for X in chunk([],3): print X
+     >>> for X in chunk([],3): print(X)
      >>>
      '''
      n = len(seq)
      mod = n % size
-     for i in xrange(0, n - mod, size):
+     for i in range(0, n - mod, size):
          yield seq[i : i + size]
      if mod:
          yield seq[-mod:]
 
-print "Total %d files to sign" % len(sign)
+print("Total %d files to sign" % len(sign))
 password = getpass.getpass("Enter signing password: ")
 try:
     for x in chunk(sign, 512):
-        print "Signing %d files" % len(x)
+        print("Signing %d files" % len(x))
         signpkgs(x, password)
-except OSError, e:
-    print >>sys.stderr, "ERR: %s" % e
+except OSError as e:
+    print("ERR: %s" % e, file=sys.stderr)
     exit(1)
index c35c71ee1e0d394b5c7490f94bb11e6b066fb592..ba2b3ce03d198645191f7d936cdd5d3f5fa1f500 100755 (executable)
@@ -1,6 +1,8 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
+from __future__ import print_function
+
 import sys, os
 sys.path.insert(0, os.environ['HOME']+'/tld-ftp-admin/modules')
 import ftptree
@@ -9,8 +11,8 @@ import ftpio
 from config import archived_trees, logs_list
 
 if len(sys.argv) < 4:
-    print "ERR: not enough parameters given"
-    print "test-move.py src-tree dst-tree package [package2 package3 ...]"
+    print("ERR: not enough parameters given")
+    print("test-move.py src-tree dst-tree package [package2 package3 ...]")
     sys.exit(1)
 
 checkdir(sys.argv[1])
@@ -25,18 +27,18 @@ else:
 ftpio.connect('test-move')
 
 if not ftpio.lock(sys.argv[1], True):
-    print "ERR: %s tree already locked" % sys.argv[1]
+    print("ERR: %s tree already locked" % sys.argv[1])
     sys.exit(1)
 
 if not ftpio.lock(sys.argv[2], True):
     ftpio.unlock(sys.argv[1])
-    print "ERR: %s tree already locked" % sys.argv[2]
+    print("ERR: %s tree already locked" % sys.argv[2])
     sys.exit(1)
 
 if archivetreename != None and archivetreename != sys.argv[1] and not ftpio.lock(archivetreename, True):
     ftpio.unlock(sys.argv[2])
     ftpio.unlock(sys.argv[1])
-    print "ERR: %s tree already locked" % archivetreename
+    print("ERR: %s tree already locked" % archivetreename)
     sys.exit(1)
 
 try:
index 32e06a4ecdb94c7bd86030b7095228da26448111..b4391203d6b0aa0afee1227639200b757ddd8204 100755 (executable)
@@ -1,6 +1,8 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
+from __future__ import print_function
+
 import sys, os
 sys.path.insert(0, os.environ['HOME']+'/tld-ftp-admin/modules')
 import ftptree
@@ -8,10 +10,10 @@ import ftpio
 import config
 
 if len(sys.argv) < 2:
-    print "ERR: not enough parameters given"
-    print "unlock.py tree"
+    print("ERR: not enough parameters given")
+    print("unlock.py tree")
     sys.exit(1)
 
 for tree in sys.argv[1:]:
     ftpio.connect()
-    print "Unlock %s: %s" % (tree, ftpio.unlock(sys.argv[1]))
+    print("Unlock %s: %s" % (tree, ftpio.unlock(sys.argv[1])))
index 00f2a2ed43306d238d09d138b1236c9d3f412ca2..2ca9fcaae2d3733fcce2bcd37fca52504d2b37fb 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
 import sys, os
index 1f3febc0e7c7dca046362ee732fb331e1dfcbc8c..64f81a40af4220aee136e72637cde0918f82871d 100644 (file)
@@ -31,12 +31,12 @@ class BasePkg:
             f.close()
 
         for entry in lines:
-            i=string.split(string.strip(entry), ':')
+            i=str.split(str.strip(entry), ':')
             if i[0] == 'info':
                 if len(i)==3:
                     self.info[i[1]]=i[2]
                 elif i[1]=='build':
-                    if not self.build.has_key(i[2]):
+                    if i[2] not in self.build:
                         self.build[i[2]]=Build()
                         self.lastbid=i[2]
                     if i[3]=='requester':
@@ -48,7 +48,7 @@ class BasePkg:
                 else:
                     self.info[i[1]]=i[2:]
             elif i[0] == 'file':
-                if not self.files.has_key(i[1]):
+                if i[1] not in self.files:
                     self.files[i[1]]=[]
                 self.files[i[1]].append(i[2])
 
index 192dbf672ea73af9acc1c3d692405e28223c7375..9fa2b195c89ece9c06d438ec0f244393ff9aba3f 100644 (file)
@@ -4,7 +4,7 @@ import os
 import time
 import config
 import common
-import md5
+import hashlib
 import ftptree
 
 
@@ -17,7 +17,7 @@ def parse(con):
         con.data=con.data[len(cmd)+1:]
         cmdname=cmd[:4]
         if not con.authorized and cmdname not in ('linp', 'linc', 'name'):
-            raise BailOut
+            raise BailOut()
             # TODO: log unauthorized access
         if cmdname in cmdlist_noargs:
             if len(cmd)==4:
@@ -32,24 +32,24 @@ def parse(con):
                 pass
                 # TODO: log malicious msg
         else:
-            raise BailOut
+            raise BailOut()
             # TODO: log this
 
 def lock(con, arg, hard):
     if arg not in locks:
         locks[arg]={'hard': hard, 'name': con.name, 'time': int(time.time())}
-        con.sock.send("OK")
+        con.sock.send(bytearray("OK", encoding='utf-8'))
     elif locks[arg]['hard']:
-        con.sock.send("HARD") # Hard lock - you can go get a cup of tea
+        con.sock.send(bytearray("HARD", encoding='utf-8')) # Hard lock - you can go get a cup of tea
     else:
-        con.sock.send("SOFT") # Soft lock - try in a second or two
+        con.sock.send(bytearray("SOFT", encoding='utf-8')) # Soft lock - try in a second or two
 
 def cmd_unlock(con, arg):
     if arg in locks:
         del locks[arg]
-        con.sock.send("OK")
+        con.sock.send(bytearray("OK", encoding='utf-8'))
     else:
-        con.sock.send("FAIL")
+        con.sock.send(bytearray("FAIL", encoding='utf-8'))
 
 def cmd_lock_soft(con, arg):
     lock(con, arg, False)
@@ -61,17 +61,17 @@ def cmd_show_locks(con):
     cmd_log(con, "Dumping locks data:");
     if len(locks):
         res = ""
-        for lockdata in locks.iteritems():
+        for lockdata in locks.items():
             tree, data = lockdata
             msg = "Tree: %s, Conn name: %s, Hard Lock: %s, Time: %s" % (
                     tree, data['name'], data['hard'], time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(data['time'])))
             cmd_log(con, msg)
             res = res + msg
-#        con.sock.send("BLOB:%d" % len(res))
-        con.sock.send(res)
+#        con.sock.send(bytearray("BLOB:%d" % len(res), encoding='utf-8')))
+        con.sock.send(bytearray(res, encoding='utf-8'))
     else:
-        cmd_log(con, "No locks found.");
-        con.sock.send("NLCK");
+        cmd_log(con, "No locks found.")
+        con.sock.send(bytearray("NLCK", encoding='utf-8'))
 
 def cmd_log(con, msg):
     logfile.write('%s [%s] -- %s\n' % (time.strftime('%Y-%m-%d %H:%M:%S'), con.name, msg))
@@ -88,7 +88,7 @@ def load_creds():
         return
     else:
         f=open(common.ftpadmdir+'/var/passwd', 'r')
-        for line in f.xreadlines():
+        for line in f:
             x=line.strip().split(':')
             if len(x)>=2:
                 users[x[0]]=x[1]
@@ -97,7 +97,7 @@ def load_creds():
         return
     else:
         f=open(common.ftpadmdir+'/var/cookies', 'r')
-        for line in f.xreadlines():
+        for line in f:
             x=line.strip().split(':')
             if len(x)>=2:
                 users[x[0]]=x[1]
@@ -112,31 +112,32 @@ def write_cookies():
 def cmd_login_passwd(con, data):
     tmp=data.split('\n')
     if len(tmp)!=2:
-        raise BailOut
+        raise BailOut()
     login=tmp[0]
     passwd=tmp[1]
-    md5pass=md5.new(passwd).hexdigest()
-    if login in users and users[login]==md5pass:
-        cookie=`time.time()`.split('.')[0]+'_'+md5.new(md5pass+salt).hexdigest()
+    md5pass=hashlib.md5(passwd.encode('utf-8')).hexdigest()
+    if login in users and users[login] == md5pass:
+        fullpass = md5pass+salt
+        cookie=repr(time.time()).split('.')[0]+'_'+hashlib.md5(fullpass.encode('utf-8')).hexdigest()
         cookies[cookie]=login
         write_cookies()
         con.username=login
         con.authorized=True
-        con.sock.send('OK '+cookie)
+        con.sock.send(bytearray('OK '+cookie, encoding='utf-8'))
     else:
         # TODO: log this
-        con.sock.send('FAIL')
-        raise BailOut
+        con.sock.send(bytearray('FAIL', encoding='utf-8'))
+        raise BailOut()
 
 def cmd_login_cookie(con, cookie):
     if cookie in cookies:
         con.cookie=cookie
         con.authorized=True
         con.username=cookies[cookie]
-        con.sock.send('OK '+cookies[cookie])
+        con.sock.send(bytearray('OK '+cookies[cookie], encoding='utf-8'))
     else:
         # TODO: log this (or not)
-        con.sock.send('FAIL')
+        con.sock.send(bytearray('FAIL'))
 
 def cmd_logout(con):
     if con.cookie in cookies:
@@ -146,8 +147,7 @@ def cmd_logout(con):
 def reloadftptree():
     global srctree, pkglist
     srctree=ftptree.FtpTree(config.value['default_to'], loadall=True)
-    pkglist=srctree.keys()
-    pkglist.sort()
+    pkglist=sorted(srctree.keys())
 
 def cmd_gettree(con):
     buf=''
@@ -165,10 +165,10 @@ def cmd_gettree(con):
             line=line+'\n0'
         buf=buf+'\0'+line
     if buf:
-        con.sock.send('%.6d' % (len(buf)-1))
-        con.sock.send(buf[1:])
+        con.sock.send(bytearray('%.6d' % (len(buf)-1), encoding='utf-8'))
+        con.sock.send(bytearray(buf[1:], encoding='utf-8'))
     else:
-        con.sock.send('000000')
+        con.sock.send(bytearray('000000', encoding='utf-8'))
 
 
 cmdlist_args={'lcks':cmd_lock_soft, 'lckh':cmd_lock_hard, 'ulck':cmd_unlock,
@@ -184,5 +184,5 @@ locks={}
 logfile=open(common.ftpadmdir+'/var/log', 'a')
 load_creds()
 reloadftptree()
-salt=md5.new(`time.time()`).hexdigest()
+salt=hashlib.md5(repr(time.time()).encode('utf-8')).hexdigest()
 
index 39279defc3eacd6dcee12a6fd531e88da79b11eb..59f715d9c1f21514d399c24293af9a7d031a9a2c 100644 (file)
@@ -1,5 +1,7 @@
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
+from __future__ import print_function
+
 import os, sys, config
 
 def fileexists(path):
@@ -11,7 +13,7 @@ def fileexists(path):
 
 def checkdir(dir):
     if not fileexists(dir):
-        print >>sys.stderr, 'ERR: ' + config.value['ftp_dir']+'/' + dir + " does not exist"
+        print('ERR: ' + config.value['ftp_dir']+'/' + dir + " does not exist", file=sys.stderr)
         sys.exit(1)
 
 if 'HOME' in os.environ:
index ee32dfac8bdc58c4bc3ad333b92a111f775d6527..cab0594b267a4b2de9376e416bdc719923393e24 100644 (file)
@@ -4,7 +4,7 @@ import string, os
 
 value = {}
 
-if os.environ.has_key('HOME'):
+if 'HOME' in os.environ:
     path = os.environ['HOME']
 else:
     path = '../../' # cgi-bin interface
@@ -12,13 +12,13 @@ else:
 f = open(path + '/.ftpadmrc', 'r')
 
 for line in f.readlines():
-    if line[0] == '#' or string.find(line, '=') == -1:
+    if line[0] == '#' or str.find(line, '=') == -1:
         continue
-    tuple = string.split(string.strip(line), '=')
+    tuple = str.split(str.strip(line), '=')
     if tuple[1][0] == '"':
-        value[string.strip(tuple[0])] = tuple[1][1:-1]
+        value[str.strip(tuple[0])] = tuple[1][1:-1]
     else:
-        value[string.strip(tuple[0])] = string.strip(tuple[1])
+        value[str.strip(tuple[0])] = str.strip(tuple[1])
 
 f.close()
 
index 61569f6e86c7d543031b701d45edcfd301ffaf05..dae0587db217fa5a6dc3a60e22ac1fc4dce28e55 100644 (file)
@@ -30,7 +30,7 @@ class Connection:
         if not newdata:
             self.destroy()
         else:
-            self.data = self.data + newdata
+            self.data = self.data + newdata.decode("utf-8")
 
         try:
             cmds.parse(self)
@@ -58,9 +58,9 @@ def createlistener(path):
     s.setblocking(False)
     s.bind(path)
     if path==ftpio.pubsock:
-        os.chmod(path, 0606)
+        os.chmod(path, 0o606)
     else:
-        os.chmod(path, 0600)
+        os.chmod(path, 0o600)
     s.listen(3)
     return s
 
index 96fbc53d417b0356a9052a4585d14af5237065fc..453f6d09360b0c93e78ae6004b76f8ba9cb13fa4 100644 (file)
@@ -8,7 +8,7 @@ import config
 
 pubsock=config.value['pubsock']
 
-if os.environ.has_key('HOME'):
+if 'HOME' in os.environ:
     privsock=os.environ['HOME']+'/tld-ftp-admin/var/privsock'
     socketname=privsock
 else:
@@ -20,12 +20,12 @@ def connect(name=None):
     sock.connect(socketname)
     if not name:
         name = "pid_%d_name_%s" % (os.getpid(), sys.argv[0])
-    sock.send('name %s\0' % name)
+    sock.send(bytearray('name %s\0' % name, encoding='utf-8'))
 
 def login_passwd(login, passwd):
     'Return cookie if ok'
-    sock.send('linp %s\n%s\0' % (login, passwd))
-    retval=sock.recv(256)
+    sock.send(bytearray('linp %s\n%s\0' % (login, passwd), encoding='utf-8'))
+    retval=sock.recv(256).decode("utf-8")
     if retval=='FAIL':
         return ''
     else:
@@ -33,23 +33,23 @@ def login_passwd(login, passwd):
 
 def login_cookie(cookie):
     'Return login if ok'
-    sock.send('linc %s\0' % cookie)
-    retval=sock.recv(256)
+    sock.send(bytearray('linc %s\0' % cookie, encoding='utf-8'))
+    retval=sock.recv(256).decode('utf-8')
     if retval=='FAIL':
         return ''
     else:
         return retval[3:]
 
 def logout():
-    sock.send('lout\0')
+    sock.send(bytearray('lout\0', encoding='utf-8'))
 
 def lock(path, hard=False):
     def dolock():
         if hard:
-            sock.send('lckh %s\0' % path)
+            sock.send(bytearray('lckh %s\0' % path, encoding='utf-8'))
         else:
-            sock.send('lcks %s\0' % path)
-        return sock.recv(20)
+            sock.send(bytearray('lcks %s\0' % path, encoding='utf-8'))
+        return sock.recv(20).decode("utf-8")
     for i in range(3):
         retcode=dolock()
         if retcode=="OK":
@@ -61,31 +61,31 @@ def lock(path, hard=False):
     return False
     
 def unlock(path):
-    sock.send('ulck %s\0' % path)
-    ret = sock.recv(20)
+    sock.send(bytearray('ulck %s\0' % path, encoding='utf-8'))
+    ret = sock.recv(20).decode("utf-8")
     if ret == "OK":
         return True
     return False
 
 def log(msg):
-    sock.send('log1 %s\0' % msg)
+    sock.send(bytearray('log1 %s\0' % msg, encoding='utf-8'))
 
 def locks_dump():
-    sock.send('slck\0')
-    ret = sock.recv(4096)
+    sock.send(bytearray('slck\0', encoding='utf-8'))
+    ret = sock.recv(4096).decode("utf-8")
     if ret == "NLCK":
         return "No locks held"
 
 #    nbytes = int(ret.split("BLOB:")[1])
-#    ret = sock.recv(nbytes)
+#    ret = sock.recv(nbytes).decode("utf-8")
     return ret
 
 def gettree():
-    sock.send('gett\0')
+    sock.send(bytearray('gett\0', encoding='utf-8'))
     pkgs=[]
-    len=int(sock.recv(6))
+    len=int(sock.recv(6).decode("utf-8"))
     if len:
-        for pkg in sock.recv(len).split('\0'):
+        for pkg in sock.recv(len).decode("utf-8").split('\0'):
             tmp=pkg.split('\n')
             pkgs.append((tmp[0], int(tmp[1]), int(tmp[2])))
     return pkgs
index 70db8a0aa0ac476e64f27a2a1659b801af38e90d..aa00e02f9d3c8e59f52a20a78820d3fbbeba9313 100644 (file)
@@ -1,6 +1,17 @@
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
-import os, config, string, urllib, re, rpm
+from __future__ import print_function
+
+import os
+import config
+import string
+try:
+    import urllib.request as urlmess
+except ImportError:
+    import urllib as urlmess
+    pass
+import re
+import rpm
 from common import fileexists, noarchcachedir
 from baseftptree import BasePkg, BaseFtpTree
 from sign import is_signed
@@ -13,23 +24,23 @@ class SomeError(Exception):
         return
 
     def __str__(self):
-        print "","An Error occured!"
+        return "An Error occured!"
 
 def bailoutonerror():
     if not errnum == 0:
-        print "%d error(s) encountered... aborting" % errnum
-        raise SomeError
+        print("%d error(s) encountered... aborting" % errnum)
+        raise SomeError()
 
 def pinfo(msg):
-    print 'INFO: ' + msg
+    print('INFO: ' + msg)
 
 def perror(msg):
     global errnum
     errnum = errnum + 1
-    print 'ERR: ' + msg
+    print('ERR: ' + msg)
 
 def pwarning(msg):
-    print 'WARN: ' + msg
+    print('WARN: ' + msg)
 
 def rm(file, test = False):
     if test:
@@ -38,7 +49,7 @@ def rm(file, test = False):
     else:
         try:
             os.remove(file)
-        except OSError, e:
+        except OSError as e:
             pinfo("os.remove(%s): %s" % (file, e))
             #raise
 
@@ -53,14 +64,14 @@ def mv(src, dst, test = False):
     else:
         try:
             os.rename(fsrc, fdst)
-        except OSError, e:
+        except OSError as e:
             pinfo("os.rename(%s, %s): %s" % (fsrc, fdst, e))
             raise
 
 class Pkg(BasePkg):
     def __init__(self, nvr, tree):
         BasePkg.__init__(self, nvr, tree)
-        self.name = string.join(nvr.split('-')[:-2], '-')
+        self.name = '-'.join(nvr.split('-')[:-2])
         self.version = nvr.split('-')[-2]
         self.release = nvr.split('-')[-1]
         self.marked4removal = False
@@ -88,7 +99,7 @@ class Pkg(BasePkg):
         if not config.separate_debuginfo:
             return False
         pkg = nvr.split('-')[:-2]
-        return pkg[-1] == 'debuginfo'
+        return pkg[-1] == 'debuginfo' or pkg[-1] == 'debugsource'
 
     def is_sourcefile(self, file):
         """
@@ -139,7 +150,7 @@ class Pkg(BasePkg):
 
     def load(self, content=None):
         BasePkg.load(self, content)
-        if self.info.has_key('move'):
+        if 'move' in self.info:
             self.mark4moving()
 
     def writeinfo(self):
@@ -147,7 +158,7 @@ class Pkg(BasePkg):
         for bid in self.build.keys():
             f.write("info:build:%s:requester:%s\ninfo:build:%s:requester_email:%s\n" % (bid, self.build[bid].requester, bid, self.build[bid].requester_email))
         for key in self.info.keys():
-            f.write("info:%s:%s\n" % (key, string.join(self.info[key], ':')))
+            f.write("info:%s:%s\n" % (key, ':'.join(self.info[key])))
         for arch in self.files.keys():
             for rpm in self.files[arch]:
                 f.write("file:%s:%s\n" % (arch, rpm))
@@ -273,14 +284,14 @@ class FtpTree(BaseFtpTree):
         self.do_checkbuild = True
 
     def __getitem__(self, key):
-        if self.loadedpkgs.has_key(key):
+        if key in self.loadedpkgs:
             return self.loadedpkgs[key]
         elif key in self.pkgnames:
             pkg=Pkg(key, self)
             self.loadedpkgs[key]=pkg
             return pkg
         else:
-            raise KeyError, key
+            raise KeyError(key)
 
     def has_key(self, key):
         if key in self.pkgnames:
@@ -369,8 +380,8 @@ class FtpTree(BaseFtpTree):
                 return True
             else:
                 return False
-        list = filter(checkfiletype, os.listdir(self.basedir+'/SRPMS/.metadata'))
-        self.pkgnames = map((lambda x: x[:-13]), list)
+        pkglist = list(filter(checkfiletype, os.listdir(self.basedir+'/SRPMS/.metadata')))
+        self.pkgnames = list(map((lambda x: x[:-13]), pkglist))
 
     def __mark4something(self, wannabepkgs, markfunction):
         def chopoffextension(pkg):
@@ -396,11 +407,11 @@ class FtpTree(BaseFtpTree):
 
         Reads config.builderqueue to grab the info
         """
-        f = urllib.urlopen(config.builderqueue)
+        f = urlmess.urlopen(config.builderqueue)
         requests = {}
         reid = re.compile(r'^.*id=(.*) pri.*$')
         regb = re.compile(r'^group:.*$|builders:.*$', re.M)
-        for i in re.findall(regb, f.read()):
+        for i in re.findall(regb, f.read().decode('utf-8')):
             if i[0] == 'g':
                 id = reid.sub(r'\1', i)
                 requests[id] = ""
@@ -410,7 +421,7 @@ class FtpTree(BaseFtpTree):
 
         for pkg in marked:
             for bid in pkg.build.keys():
-                if requests.has_key(bid) and not requests[bid].find('?') == -1:
+                if bid in requests and not requests[bid].find('?') == -1:
                     pkg.error("(buildid %s) building not finished" % bid)
 
     def __checkarchs(self, dsttree, marked):
@@ -487,7 +498,7 @@ class FtpTree(BaseFtpTree):
                 return True
             else:
                 return False
-        return filter(filter_other_pkgs, tree.pkgnames)
+        return list(filter(filter_other_pkgs, tree.pkgnames))
 
     def __find_older_pkgs(self, pkg):
         def filter_older_pkgs(x):
@@ -498,7 +509,7 @@ class FtpTree(BaseFtpTree):
                 return True
             else:
                 return False
-        return filter(filter_older_pkgs, self.__find_other_pkgs(pkg, self))
+        return list(filter(filter_older_pkgs, self.__find_other_pkgs(pkg, self)))
 
     def __checksigns(self, tree, pkgs, test = False):
         """
@@ -535,7 +546,7 @@ class FtpTree(BaseFtpTree):
         def findbyname(name):
             def x(nvr):
                 return '-'.join(nvr.split('-')[:-2]) == name
-            return filter(x, tree.pkgnames)
+            return list(filter(x, tree.pkgnames))
 
         for pkg in pkgs:
             obsoletes = pkg.obsoletes()
index bf13ef5e551ebf9b51b31ac2f52d49af435efdcc..825446f36445e0f3c1fdf139835a31bfaf84c92a 100644 (file)
@@ -3,7 +3,10 @@
 import time
 import os
 import sys
-import StringIO
+if sys.version_info[0] == 2:
+    import StringIO
+else:
+    import io as StringIO
 
 import config
 cval=config.value
index 377ee5109635c647ae45a3ae7e488e9c3147af9c..dc5cc4fac964a25fd66e362251a6a8d829b60c5e 100644 (file)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
 import os
@@ -40,20 +40,24 @@ def is_signed(rpm_file):
 
 def signpkgs(files, password):
     if not os.path.isfile('/usr/bin/gpg'):
-        raise OSError, 'Missing gnupg binary'
+        raise OSError('Missing gnupg binary')
     if not os.path.isfile('/bin/rpm'):
-        raise OSError, 'Missing rpm binary'
+        raise OSError('Missing rpm binary')
 
     os.putenv('LC_ALL', 'C')
     args = ['--resign', '--define', '_signature gpg', '--define', '_gpg_name ' + sign_key] + files
-    child = pexpect.spawn('/bin/rpm', args)
+    child = pexpect.spawn('/bin/rpm', args, encoding='utf-8')
     child.logfile_read = sys.stderr
-    child.expect('Enter pass phrase:', timeout=30)
-    child.sendline(password)
+    # TODO: we need a smarter way to figuring out if rpm already stored password in gpg-agent
+    try:
+        child.expect(u'Enter pass phrase:', timeout=30)
+        child.sendline(password)
+    except pexpect.exceptions.TIMEOUT:
+        print('WARN: rpm did not ask for password', file=sys.stderr)
     child.expect(pexpect.EOF, timeout=None)
     child.close()
     rc = child.exitstatus
     if rc != 0:
-        raise OSError, 'package signing failed'
+        raise OSError('package signing failed')
     for rpm in files:
-        os.chmod(rpm, 0644)
+        os.chmod(rpm, 0o644)
index 2b31f1a8c9b70a00cba04480cc1e584e4ad899a5..7f4195863a0bd0b9de02f8deca312d8ec5a89ff8 100644 (file)
@@ -1,5 +1,7 @@
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
+from __future__ import print_function
+
 import Cookie, time, ftpio
 
 UserNotLoggedIn="UserNotLoggedIn"
@@ -31,8 +33,8 @@ class User:
             #C['ftpsessid']['expires']=time.strftime(
                                         #"%a, %d-%b-%y %H:%M:%S GMT",
                                         #time.gmtime(time.time()+86400))
-            print C
-    
+            print(C)
+
     def logout(self):
         self.loggedin=False
         ftpio.logout()
@@ -40,5 +42,5 @@ class User:
         C['ftpsessid']=''
         C['ftpsessid']['expires']=time.strftime("%a, %d-%b-%y %H:%M:%S GMT",
                                     time.gmtime(time.time()-31536000))
-        print C
+        print(C)
 
index bc215ae768cab66fd7d8ec91f29c7cb41c863e2a..4e65630728bb8481c5b2f2007ea3e741396e7899 100644 (file)
@@ -1,5 +1,7 @@
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
+from __future__ import print_function
+
 import cgi, Cookie, os
 
 menu=[]
@@ -14,11 +16,11 @@ def getfile(file):
 
 def catfile(file):
     f=open("../html/" + file + ".html", 'r')
-    print f.read()
+    print(f.read())
     f.close()
 
 def sendhttpheaders():
-    print "Content-Type: text/html\n"
+    print("Content-Type: text/html\n")
 
 def getopts():
     form = cgi.FieldStorage()
@@ -28,7 +30,7 @@ def getopts():
 
     cookies = {}
 
-    if os.environ.has_key('HTTP_COOKIE'):
+    if 'HTTP_COOKIE' in os.environ:
         c = Cookie.SimpleCookie()
         c.load(os.environ['HTTP_COOKIE'])
         for key in c.keys():
@@ -39,21 +41,21 @@ def getopts():
 def sendhtml():
     catfile('header')
 
-    print '<div id="Header">'
+    print('<div id="Header">')
     for i in header:
-        print i
-    print '</div>'
+        print(i)
+    print('</div>')
 
-    print '<div id="Menu">'
+    print('<div id="Menu">')
     for i in menu:
-        print i
+        print(i)
     catfile('menufooter')
-    print '</div>'
+    print('</div>')
 
-    print '<div id="Content">'
+    print('<div id="Content">')
     for i in content:
-        print i
-    print '</div>'
+        print(i)
+    print('</div>')
    
     catfile('footer')