mercurial/fancyopts.py
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
Sat, 18 Nov 2006 23:51:14 -0200
changeset 3677 1a0fa3914c46
parent 3673 eb0b4a2d70a9
child 3742 86c1d1d35593
permissions -rw-r--r--
Avoid looking up usernames if the current user owns the .hgrc file Converting uids into usernames may be somewhat expensive when NIS or LDAP is involved.

import getopt

def fancyopts(args, options, state):
    long = []
    short = ''
    map = {}
    dt = {}

    for s, l, d, c in options:
        pl = l.replace('-', '_')
        map['-'+s] = map['--'+l] = pl
        state[pl] = d
        dt[pl] = type(d)
        if not d is None and not callable(d):
            if s: s += ':'
            if l: l += '='
        if s: short = short + s
        if l: long.append(l)

    opts, args = getopt.getopt(args, short, long)

    for opt, arg in opts:
        if dt[map[opt]] is type(fancyopts): state[map[opt]](state, map[opt], arg)
        elif dt[map[opt]] is type(1): state[map[opt]] = int(arg)
        elif dt[map[opt]] is type(''): state[map[opt]] = arg
        elif dt[map[opt]] is type([]): state[map[opt]].append(arg)
        elif dt[map[opt]] is type(None): state[map[opt]] = 1

    return args