args = commands.keys()
args.sort()
for c in args:
- func, min, max, help = commands[c]
- print '%s %s' % (c, help)
+ try: func, min, max, help = commands[c]
+ except KeyError: die("unknown command `%s'" % c)
+ print '%s%s%s' % (c, help and ' ', help)
###--------------------------------------------------------------------------
### Commands: newmaster
for base in commit:
new = '%s.new' % base
OS.rename(new, base)
+
+ ## Remove files in the base-dir which don't correspond to ones we just
+ ## committed
+ allow = {}
+ basedir = conf['base-dir']
+ bdl = len(basedir)
+ for base in commit:
+ if base.startswith(basedir): allow[base[bdl:]] = 1
+ for found in OS.listdir(basedir):
+ if found not in allow: OS.remove(OS.path.join(basedir, found))
finally:
OS.chdir(cwd)
rmtree('tmp')
OS.chdir(cwd)
if OS.path.exists('repos'): OS.rename('repos', 'repos.old')
OS.rename('tmp/repos', 'repos')
- if not FC.cmp('tmp/tripe-keys.conf', 'tripe-keys.conf'):
+ if not FC.cmp('tmp/tripe-keys.conf', 'tripe-keys.conf', False):
moan('configuration file changed: recommend running another update')
OS.rename('tmp/tripe-keys.conf', 'tripe-keys.conf')
rmtree('repos.old')
###--------------------------------------------------------------------------
### Commands: check
-def cmd_check(args):
+def check_key(k):
now = T.time()
thresh = int(conf['kx-warn-days']) * 86400
- for krf in ['master', 'keyring.pub']:
- if not OS.path.exists(krf): continue
- kr = C.KeyFile(krf)
- for k in kr.itervalues():
- if k.exptime == C.KEXP_FOREVER: continue
- elif k.exptime == C.KEXP_EXPIRE: left = -1
- else: left = k.exptime - now
- if left < 0:
- print "key `%s' HAS EXPIRED" % k.tag
- elif left < thresh:
- if left >= 86400: n, u, uu = left // 86400, 'day', 'days'
- else: n, u, uu = left // 3600, 'hour', 'hours'
- print "key `%s' EXPIRES in %d %s" % (k.tag, n, n == 1 and u or uu)
+ if k.exptime == C.KEXP_FOREVER: return None
+ elif k.exptime == C.KEXP_EXPIRE: left = -1
+ else: left = k.exptime - now
+ if left < 0:
+ return "key `%s' HAS EXPIRED" % k.tag
+ elif left < thresh:
+ if left >= 86400: n, u, uu = left // 86400, 'day', 'days'
+ else: n, u, uu = left // 3600, 'hour', 'hours'
+ return "key `%s' EXPIRES in %d %s" % (k.tag, n, n == 1 and u or uu)
+ else:
+ return None
+
+def cmd_check(args):
+ if OS.path.exists('keyring.pub'):
+ for k in C.KeyFile('keyring.pub').itervalues():
+ whinge = check_key(k)
+ if whinge is not None: print whinge
+ if OS.path.exists('master'):
+ whinges = []
+ for k in C.KeyFile('master').itervalues():
+ whinge = check_key(k)
+ if whinge is None: break
+ whinges.append(whinge)
+ else:
+ for whinge in whinges: print whinge
###--------------------------------------------------------------------------
### Commands: mtu
###--------------------------------------------------------------------------
### Main driver.
-## Exceptions.
-class UsageError (Exception): pass
-
commands = {'help': (cmd_help, 0, 1, ''),
'newmaster': (cmd_newmaster, 0, 0, ''),
'setup': (cmd_setup, 0, 0, ''),
cmd_help([])
else:
c = argv[1]
- func, min, max, help = commands[c]
+ try: func, min, max, help = commands[c]
+ except KeyError: die("unknown command `%s'" % c)
args = argv[2:]
- if len(args) < min or (max > 0 and len(args) > max):
- raise UsageError, (c, help)
+ if len(args) < min or (max is not None and len(args) > max):
+ SYS.stderr.write('Usage: %s %s%s%s\n' % (quis, c, help and ' ', help))
+ SYS.exit(1)
func(args)
###----- That's all, folks --------------------------------------------------