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.
--- 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 <mpm@selenic.com>\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])
--- 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
--- 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