#!/usr/bin/python import os import subprocess import sys PORTS_DIR = '/usr/ports' # ssh - Lake in the Hills, IL cvsroot = 'anoncvs@rt.fm:/cvs' # ssh/pserver - Chicago, IL #cvsroot = 'anoncvs@mirror.sg.depaul.edu:/cvs' # ssh/pserver - Boulder, CO #cvsroot = 'anoncvs@anoncvs3.usa.openbsd.org:/cvs' rev = 'HEAD' #rev = 'OPENBSD_4_3' targets = [ '/usr/src', '/usr/xenocara', '/usr/ports' ] color = True progname = sys.argv[0] def print_green(str): nl = '' if color and str[-1] == '\n': nl = '\n' str = str[:-1] if color: sys.stdout.write('\033[01;32m') sys.stdout.write(str) if color: sys.stdout.write('\033[00m') sys.stdout.write(nl) def update(cvsroot, target, revision=None): print_green('>>> updating %s\n' % target) args = [ 'cvs', '-qd' + cvsroot, 'update', '-Pd' ] if revision: args.append('-r' + revision) sys.stdout.flush() status = 0 try: proc = subprocess.Popen(args, cwd=target) status = proc.wait() except OSError, e: sys.stderr.write('%s: could not run `cvs up\' in %s:\n' '%s\n' % (progname, target, e)) return -1 if status < 0: sys.stderr.write('%s: failed to update %s:\n' ' `cvs up\' terminated by signal %d\n' % (progname, target, -status)) return -1 elif status: sys.stderr.write('%s: failed to update %s:\n' ' `cvs up\' ended with %d\n' % (progname, target, status)) return -1 return 0 def rebuild_index(): print_green('>>> rebuilding %s\n' % os.path.join(PORTS_DIR, 'INDEX')) sys.stdout.flush() status = 0 try: proc = subprocess.Popen(('make', 'index'), cwd=PORTS_DIR) status = proc.wait() except OSError, e: sys.stderr.write('%s: could not execute `make index\':\n' '%s\n' % (progname, e)) return -1 if status < 0: sys.stderr.write('%s: failed to rebuild index:\n' ' `make index\' terminated by signal %d\n' % (progname, -status)) return -1 elif status: sys.stderr.write('%s: failed to rebuild index:\n' ' `make index\' ended with %d\n' % (progname, status)) return -1 return 0 def usage(): print 'usage: %s [ --help | --nocolor ]' % progname def main(args): global color for arg in args[1:]: if arg == '--help': usage() return 1 elif arg == '--nocolor': color = False elif arg == '--color': color = True else: print '%s: unrecognized option: %s' % (progname, arg) usage() return 1 rebuild = False for t in targets: if update(cvsroot, t, rev) != 0: return 1 elif t == PORTS_DIR: rebuild = True if rebuild: if rebuild_index() != 0: return 1 return 0 sys.exit(main(sys.argv))