comparison mercurial/fancyopts.py @ 293:11d64332a1cb

hg help improvements -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 hg help improvements Handle showing option help in commands.py rather than fancyopts Show getopt exception string if argument parsing fails and call help Show help for invalid arguments Show exception string for invalid arguments with -d manifest hash: 9bd3e908cc080c21bb5e85822f675c35a8396fef -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCp8GNywK+sNU5EO8RAoJfAJ4pB0I4xH4CTuGmAwArfBzIsT9plACeImkm 4ml9x78fmPgKpDYIr/qhfVY= =YeZv -----END PGP SIGNATURE-----
author mpm@selenic.com
date Wed, 08 Jun 2005 20:11:57 -0800
parents 63af1db35611
children 03f27b1381f9
comparison
equal deleted inserted replaced
292:09364bcebdf0 293:11d64332a1cb
4 long=[] 4 long=[]
5 short='' 5 short=''
6 map={} 6 map={}
7 dt={} 7 dt={}
8 8
9 def help(state, opt, arg, options=options, syntax=syntax):
10 print "Usage: ", syntax
11
12 for s, l, d, c in options:
13 opt=' '
14 if s: opt = opt + '-' + s + ' '
15 if l: opt = opt + '--' + l + ' '
16 if d: opt = opt + '(' + str(d) + ')'
17 print opt
18 if c: print ' %s' % c
19 sys.exit(0)
20
21 if len(args) < minlen:
22 help(state, None, args)
23
24 options=[('h', 'help', help, 'Show usage info')] + options
25
26 for s, l, d, c in options: 9 for s, l, d, c in options:
27 map['-'+s] = map['--'+l]=l 10 map['-'+s] = map['--'+l]=l
28 state[l] = d 11 state[l] = d
29 dt[l] = type(d) 12 dt[l] = type(d)
30 if not d is None and not type(d) is type(help): s, l=s+':', l+'=' 13 if not d is None and not callable(d): s, l=s+':', l+'='
31 if s: short = short + s 14 if s: short = short + s
32 if l: long.append(l) 15 if l: long.append(l)
33 16
34 if os.environ.has_key("HG_OPTS"): 17 if os.environ.has_key("HG_OPTS"):
35 args = os.environ["HG_OPTS"].split() + args 18 args = os.environ["HG_OPTS"].split() + args
36 19
37 try: 20 opts, args = getopt.getopt(args, short, long)
38 opts, args = getopt.getopt(args, short, long)
39 except getopt.GetoptError:
40 help(state, None, args)
41 sys.exit(-1)
42 21
43 for opt, arg in opts: 22 for opt, arg in opts:
44 if dt[map[opt]] is type(help): state[map[opt]](state,map[opt],arg) 23 if dt[map[opt]] is type(fancyopts): state[map[opt]](state,map[opt],arg)
45 elif dt[map[opt]] is type(1): state[map[opt]] = int(arg) 24 elif dt[map[opt]] is type(1): state[map[opt]] = int(arg)
46 elif dt[map[opt]] is type(''): state[map[opt]] = arg 25 elif dt[map[opt]] is type(''): state[map[opt]] = arg
47 elif dt[map[opt]] is type([]): state[map[opt]].append(arg) 26 elif dt[map[opt]] is type([]): state[map[opt]].append(arg)
48 elif dt[map[opt]] is type(None): state[map[opt]] = 1 27 elif dt[map[opt]] is type(None): state[map[opt]] = 1
49 28
50 del state["help"]
51
52 return args 29 return args
53 30