# HG changeset patch # User Thomas Arendsen Hein # Date 1123339392 -3600 # Node ID 8933ef744325d4ce9f09c100d603af5b4d165254 # Parent 221628fe9b62873d74b002e40ab715632bf9503d Further help improvements: Show command aliases in 'hg help something', unless in quiet mode. Show short command description with 'hg help -q something'. Show global options in verbose mode of command help. State that Mercurial is a Distributed SCM. diff -r 221628fe9b62 -r 8933ef744325 mercurial/commands.py --- a/mercurial/commands.py Sat Aug 06 14:04:59 2005 +0100 +++ b/mercurial/commands.py Sat Aug 06 15:43:12 2005 +0100 @@ -276,7 +276,8 @@ def show_version(ui): """output version and copyright information""" - ui.write("Mercurial version %s\n" % version.get_version()) + ui.write("Mercurial Distributed SCM (version %s)\n" + % version.get_version()) ui.status( "\nCopyright (C) 2005 Matt Mackall \n" "This is free software; see the source for copying conditions. " @@ -287,10 +288,25 @@ def help_(ui, cmd=None): """show help for a given command or all commands""" if cmd and cmd != 'shortlist': - i = find(cmd) + key, i = find(cmd) + # synopsis ui.write("%s\n\n" % i[2]) - if i[1]: + # description + doc = i[0].__doc__ + if ui.quiet: + doc = doc.splitlines(0)[0] + ui.write("%s\n" % doc.rstrip()) + + # aliases + if not ui.quiet: + aliases = ', '.join(key.split('|')[1:]) + if aliases: + ui.write("\naliases: %s\n" % aliases) + + # options + if not ui.quiet and i[1]: + ui.write("\noptions:\n\n") for s, l, d, c in i[1]: opt = ' ' if s: @@ -302,33 +318,24 @@ ui.write(opt, "\n") if c: ui.write(' %s\n' % c) - ui.write("\n") - ui.write(i[0].__doc__, "\n") - sys.exit(0) else: + # program name if ui.verbose: show_version(ui) - ui.write('\n') - if ui.verbose: - ui.write("global options:\n\n") - for s, l, d, c in globalopts: - 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") + else: + ui.status("Mercurial Distributed SCM\n") + ui.status('\n') - ui.write('hg commands:\n\n') - + # list of commands if cmd == "shortlist": - ui.write('basic hg commands (use "hg help" for more):\n\n') + ui.status('basic commands (use "hg help" ' + 'for the full list or option "-v" for details):\n\n') + elif ui.verbose: + ui.status('list of commands:\n\n') + else: + ui.status('list of commands (use "hg help -v" ' + 'to show aliases and global options):\n\n') h = {} cmds = {} @@ -336,9 +343,9 @@ f = c.split("|")[0] if cmd == "shortlist" and not f.startswith("^"): continue + f = f.lstrip("^") if not ui.debugflag and f.startswith("debug"): continue - f = f.lstrip("^") d = "" if e[0].__doc__: d = e[0].__doc__.splitlines(0)[0].rstrip() @@ -355,6 +362,21 @@ else: ui.write(' %-*s %s\n' % (m, f, h[f])) + # global options + if ui.verbose: + ui.write("\nglobal options:\n\n") + for s, l, d, c in globalopts: + 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) + # Commands start here, listed alphabetically def add(ui, repo, *pats, **opts): @@ -1330,7 +1352,7 @@ def find(cmd): for e in table.keys(): if re.match("(%s)$" % e, cmd): - return table[e] + return e, table[e] raise UnknownCommand(cmd) @@ -1362,7 +1384,7 @@ else: cmd, args = args[0], args[1:] - i = find(cmd) + i = find(cmd)[1] # combine global options into local c = list(i[1]) diff -r 221628fe9b62 -r 8933ef744325 tests/test-help --- a/tests/test-help Sat Aug 06 14:04:59 2005 +0100 +++ b/tests/test-help Sat Aug 06 15:43:12 2005 +0100 @@ -1,11 +1,15 @@ #!/bin/sh +hg +hg -q hg help hg -q help hg add -h hg add --skjdfks hg help diff +hg help status +hg -q help status hg help foo -hg -q commands +hg skjdfks exit 0 diff -r 221628fe9b62 -r 8933ef744325 tests/test-help.out --- a/tests/test-help.out Sat Aug 06 14:04:59 2005 +0100 +++ b/tests/test-help.out Sat Aug 06 15:43:12 2005 +0100 @@ -1,4 +1,44 @@ ++ hg +Mercurial Distributed SCM + +basic commands (use "hg help" for the full list or option "-v" for details): + + add add the specified files on the next commit + annotate show changeset information per file line + clone make a copy of an existing repository + commit commit the specified files or all outstanding changes + diff diff working directory (or selected files) + export dump the header and diffs for one or more changesets + init create a new repository in the current directory + log show the revision history of the repository or a single file + pull pull changes from the specified source + push push changes to the specified destination + remove remove the specified files on the next commit + revert revert modified files or dirs back to their unmodified states + serve export the repository via HTTP + status show changed files in the working directory + update update or merge working directory ++ hg -q + add add the specified files on the next commit + annotate show changeset information per file line + clone make a copy of an existing repository + commit commit the specified files or all outstanding changes + diff diff working directory (or selected files) + export dump the header and diffs for one or more changesets + init create a new repository in the current directory + log show the revision history of the repository or a single file + pull pull changes from the specified source + push push changes to the specified destination + remove remove the specified files on the next commit + revert revert modified files or dirs back to their unmodified states + serve export the repository via HTTP + status show changed files in the working directory + update update or merge working directory + hg help +Mercurial Distributed SCM + +list of commands (use "hg help -v" to show aliases and global options): + add add the specified files on the next commit addremove add all new files, delete all missing files annotate show changeset information per file line @@ -76,36 +116,72 @@ hg add: option -h not recognized hg add [FILE]... - -I --include - include path in search - -X --exclude - exclude path from search +add the specified files on the next commit -add the specified files on the next commit -+ hg add --skjdfks -hg add: option --skjdfks not recognized -hg add [FILE]... +options: -I --include include path in search -X --exclude exclude path from search ++ hg add --skjdfks +hg add: option --skjdfks not recognized +hg add [FILE]... add the specified files on the next commit + +options: + + -I --include + include path in search + -X --exclude + exclude path from search + hg help diff hg diff [-r REV1 [-r REV2]] [FILE]... +diff working directory (or selected files) + +options: + -r --rev revision -I --include include path in search -X --exclude exclude path from search ++ hg help status +hg status [FILE]... -diff working directory (or selected files) +show changed files in the working directory + + M = modified + A = added + R = removed + ? = not tracked + +options: + + -m --modified + show only modified files + -a --added + show only added files + -r --removed + show only removed files + -u --unknown + show only unknown (not tracked) files + -I --include + include path in search + -X --exclude + exclude path from search ++ hg -q help status +hg status [FILE]... + +show changed files in the working directory + hg help foo hg: unknown command 'foo' -basic hg commands (use "hg help" for more): +Mercurial Distributed SCM + +basic commands (use "hg help" for the full list or option "-v" for details): add add the specified files on the next commit annotate show changeset information per file line @@ -122,9 +198,11 @@ serve export the repository via HTTP status show changed files in the working directory update update or merge working directory -+ hg -q commands -hg: unknown command 'commands' -basic hg commands (use "hg help" for more): ++ hg skjdfks +hg: unknown command 'skjdfks' +Mercurial Distributed SCM + +basic commands (use "hg help" for the full list or option "-v" for details): add add the specified files on the next commit annotate show changeset information per file line