mercurial/fancyopts.py
author mpm@selenic.com
Wed, 27 Jul 2005 18:50:32 -0800
changeset 786 902b12d55751
parent 667 31a9aa890016
child 959 0aaeee519c66
child 981 4f81068ed8cd
permissions -rw-r--r--
Fix the directory and revlog collision problem This adds escaping for directory names so that directory foo.i doesn't collide with the revision data for file foo.

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