# HG changeset patch # User mpm@selenic.com # Date 1118290317 28800 # Node ID 11d64332a1cb8fca4e1eeccc4ca01c16815a3f56 # Parent 09364bcebdf0af2a237937a7571addd7196ab652 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----- diff -r 09364bcebdf0 -r 11d64332a1cb mercurial/commands.py --- a/mercurial/commands.py Wed Jun 08 17:38:46 2005 -0800 +++ b/mercurial/commands.py Wed Jun 08 20:11:57 2005 -0800 @@ -77,6 +77,17 @@ try: i = find(cmd) ui.write("%s\n\n" % i[2]) + + if i[1]: + for s, l, d, c in i[1]: + opt=' ' + if s: opt = opt + '-' + s + ' ' + if l: opt = opt + '--' + l + ' ' + if d: opt = opt + '(' + str(d) + ')' + ui.write(opt, "\n") + if c: ui.write(' %s\n' % c) + ui.write("\n") + ui.write(i[0].__doc__, "\n") except UnknownCommand: ui.warn("hg: unknown command %s\n" % cmd) @@ -603,7 +614,12 @@ signal.signal(signal.SIGTERM, catchterm) cmdoptions = {} - args = fancyopts.fancyopts(args, i[1], cmdoptions, i[2]) + try: + args = fancyopts.fancyopts(args, i[1], cmdoptions, i[2]) + except fancyopts.getopt.GetoptError, inst: + u.warn("hg %s: %s\n" % (cmd, inst)) + help(u, cmd) + sys.exit(-1) if cmd not in norepo.split(): repo = hg.repository(ui = u) @@ -627,7 +643,8 @@ tb = traceback.extract_tb(sys.exc_info()[2]) if len(tb) > 2: # no raise - raise + u.debug(inst, "\n") u.warn("%s: invalid arguments\n" % i[0].__name__) - u.warn("syntax: %s\n" % i[2]) + help(u, cmd) sys.exit(-1) + diff -r 09364bcebdf0 -r 11d64332a1cb mercurial/fancyopts.py --- a/mercurial/fancyopts.py Wed Jun 08 17:38:46 2005 -0800 +++ b/mercurial/fancyopts.py Wed Jun 08 20:11:57 2005 -0800 @@ -6,48 +6,25 @@ map={} dt={} - def help(state, opt, arg, options=options, syntax=syntax): - print "Usage: ", syntax - - for s, l, d, c in options: - opt=' ' - if s: opt = opt + '-' + s + ' ' - if l: opt = opt + '--' + l + ' ' - if d: opt = opt + '(' + str(d) + ')' - print opt - if c: print ' %s' % c - sys.exit(0) - - if len(args) < minlen: - help(state, None, args) - - options=[('h', 'help', help, 'Show usage info')] + options - 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 type(d) is type(help): s, l=s+':', l+'=' + if not d is None and not callable(d): s, l=s+':', l+'=' if s: short = short + s if l: long.append(l) if os.environ.has_key("HG_OPTS"): args = os.environ["HG_OPTS"].split() + args - try: - opts, args = getopt.getopt(args, short, long) - except getopt.GetoptError: - help(state, None, args) - sys.exit(-1) + opts, args = getopt.getopt(args, short, long) for opt, arg in opts: - if dt[map[opt]] is type(help): state[map[opt]](state,map[opt],arg) + 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 - del state["help"] - return args