-#!/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']+'/pld-ftp-admin/modules')
import ftptree
+import getpass
from common import checkdir
import ftpio
from config import sign_key
from sign import is_signed, signpkgs
-if len(sys.argv) < 3:
- print >>sys.stderr, "ERR: not enough parameters given"
- print >>sys.stderr, "sign.py tree package1 [package2...]"
+os.umask(0o022)
+
+try:
+ opts, args = getopt.getopt(sys.argv[1:], '')
+except getopt.GetoptError:
+ print("ERR: options error", file=sys.stderr)
+ print("sign.py tree package1 [package2...]", file=sys.stderr)
+ sys.exit(1)
+
+if len(args) < 1:
+ 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)
-checkdir(sys.argv[1])
+treename = args[0]
+packages = args[1:]
+
+checkdir(treename)
ftpio.connect('sign')
-if not ftpio.lock(sys.argv[1], True):
- print >>sys.stderr, "ERR: %s tree already locked" % sys.argv[1]
+if not ftpio.lock(treename, True):
+ print("ERR: %s tree already locked" % treename, file=sys.stderr)
sys.exit(1)
files = []
try:
- tree = ftptree.FtpTree(sys.argv[1])
- tree.mark4moving(sys.argv[2:])
+ if len(packages) < 1:
+ loadall = True
+ else:
+ loadall = False
+
+ # if no files specified, grab whole tree contents
+ tree = ftptree.FtpTree(treename, loadall = loadall)
+ if loadall:
+ # this is hack, should be a param, not access private .loadedpkgs element
+ tree.mark4moving(tree.loadedpkgs)
+ else:
+ tree.mark4moving(packages)
files = tree.rpmfiles()
except ftptree.SomeError:
# In case of problems we need to unlock the tree before exiting
- ftpio.unlock(sys.argv[1])
+ ftpio.unlock(treename)
sys.exit(1)
-ftpio.unlock(sys.argv[1])
+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:
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
[[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)
- signpkgs(x)
-except OSError, e:
- print >>sys.stderr, "ERR: %s" % e
+ print("Signing %d files" % len(x))
+ signpkgs(x, password)
+except OSError as e:
+ print("ERR: %s" % e, file=sys.stderr)
exit(1)