mercurial/fancyopts.py
author Alecs King <alecsk@gmail.com>
Mon, 04 Jul 2005 12:15:44 -0800
changeset 612 9cd745437269
parent 608 d2994b5298fb
child 667 31a9aa890016
permissions -rw-r--r--
On Sat, Jul 02, 2005 at 02:11:34PM -0700, Matt Mackall wrote: # HG changeset patch # User Alecs King <alecsk@gmail.com> On Sat, Jul 02, 2005 at 02:11:34PM -0700, Matt Mackall wrote: > On Sun, Jul 03, 2005 at 12:49:27AM +0800, Alecs King wrote: > > Hg is really very nice. The only feature i miss from git is the > > whatchanged -p, which shows a diff along with a changeset. > > python before, i just dig into the mercurial/commands.py a while and > > see what diff(), dodiff(), export(), show_changeset(), log() would > > normally do. There might be one thing or two missed or wrong. But here > > it is: a '-d' option to 'hg log' showing the diff info. You can use 'hg > > log -d' to show the whole history with the diff or 'hg log -d <file>' to > > show that info of a particular file. And also works with the '-r' > > option. > > Let's use -p. We're going to be combining the global and per command > switch namespace shortly and the global -p will disappear. Okay. '-d' changed to '-p'. Just like 'whatchanged -p', now we have 'hg log -p'. > Also, the argument list for show_changeset is getting a bit unwieldy. This time i remain show_changeset untouched at all. Only changed some bits of log().

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