mercurial/fancyopts.py
author Bryan O'Sullivan <bos@serpentine.com>
Fri, 29 Jul 2005 08:49:01 -0800
changeset 810 790a0ff306f2
parent 667 31a9aa890016
child 959 0aaeee519c66
child 981 4f81068ed8cd
permissions -rw-r--r--
Move commands.forget over to using new walk code. With no names, it now recursively forgets everything, as is the default behaviour of other commands. And prints the names of all files it hasn't specifically been told to forget.

import getopt

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

    for s, l, d, c in options:
        map['-'+s] = map['--'+l]=l
        state[l] = d
        dt[l] = type(d)
        if not d is None and not callable(d): s, l=s+':', 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