mercurial/fancyopts.py
author Matt Mackall <mpm@selenic.com>
Wed, 06 Jul 2005 22:25:40 -0800
changeset 640 b48b91d3fb4a
parent 608 d2994b5298fb
child 667 31a9aa890016
permissions -rw-r--r--
Switch push over to the new scheme Now push works transparently with any repo with lock and addchangegroup. Currently this is local repos and ssh.

import os, 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