[PATCH] Bug 3749 --help does not show non-command help topics

Mads Kiilerich mads at kiilerich.com
Wed Apr 17 08:43:12 CDT 2013


[Resending with proper formatting ... mehope]

Hi

Nice patch.

Anyway, here are some comments that perhaps can make it even better.

On 04/17/2013 11:47 AM, Ankur Ankan wrote:
> # HG changeset patch
> # User Ankur Ankan <ankurankan at gmail.com <mailto:ankurankan at gmail.com>>
> # Date 1366191853 -19800
> #      Wed Apr 17 15:14:13 2013 +0530
> # Node ID 3c08507d8eff9c67d376e7283e096e64e794197b
> # Parent  a59e575c6ff87b517a8bb167c509a93003bfef53
> help: show topic help with --help (issue3749)
>

I would like to see a bit more description here. ( 
http://mercurial.selenic.com/wiki/ContributingChanges#Patch_descriptions )

First of all I would like to see an example of what command line it is 
that will be possible. It is not obvious from the summary line.

I assume that one thing you learned while creating this patch is that it 
is a bit tricky because help topics not are commands and options like 
--help can't take optional parameters. A reviewer might be wondering why 
this can't be implemented the same way as ordinary --help is. Briefly 
explaining the tricky part makes it easier to review ... and to 
understand the change later on.

Have you considered the alternative approach of adding help topics to 
the command list? It with perhaps be interesting with a brief note 
telling why you decided not do that.

> diff -r a59e575c6ff8 -r 3c08507d8eff mercurial/dispatch.py
> --- a/mercurial/dispatch.pyTue Apr 16 15:33:18 2013 +0200
> +++ b/mercurial/dispatch.pyWed Apr 17 15:14:13 2013 +0530
> @@ -635,7 +635,18 @@
>          encoding.fallbackencoding = fallback
>      fullargs = args
> -    cmd, func, args, options, cmdoptions = _parse(lui, args)
> +    try:
> +        cmd, func, args, options, cmdoptions = _parse(lui, args)
> +    except error.UnknownCommand:
> +        if '--help' in fullargs[:-1]:
> +            commands.help_(ui, fullargs[-1])

These two lines seems to assume that the options are given exactly as 
'--help topicname'.

Shouldn't 'hg topicname --help' be supported too? The tests indicate 
that it intentionally shouldn't. I would expect a brief explanation of 
that in the description.

And how about 'hg -v --help urls --debug' ?

> +            return
> +        else:

else is not necessary after an unconditional return. It could be argued 
that being explicit is good ... but usually we like briefness and no 
redundancy even more.

> +            for args in fullargs:
> +                if args[0] != '-':
> +                    cmd = args
> +                    break
> +            raise error.UnknownCommand(cmd)

This is all just to raise the exception again if there was no --help? 
Then just use 'raise'.

>      if options["config"]:
>          raise util.Abort(_("option --config may not be abbreviated!"))
> diff -r a59e575c6ff8 -r 3c08507d8eff tests/test-help.t
> --- a/tests/test-help.tTue Apr 16 15:33:18 2013 +0200
> +++ b/tests/test-help.tWed Apr 17 15:14:13 2013 +0530
> @@ -741,6 +741,419 @@
>        The reserved name "." indicates the working directory parent. If no
>        working directory is checked out, it is equivalent to null. If an
>        uncommitted merge is in progress, "." is the revision of the 
> first parent.
> +Test for topic help with --help

I suggest adding an empty line before the description of the new test - 
that makes the test file more readable.

> +
> +  $ hg --help revset

(revset is one of the bigger help topics. Using a short one like 
'multirevs' makes the test less verbose and more readable.)

> +Test for Unknown Command when hg revset --help is used
> +
> +  $ hg revset --help
> +  hg: unknown command 'revset'
> +  Mercurial Distributed SCM

It might also be an idea to test some other 'evil' command lines such as 
the example I gave above - no matter if you intentionally do support 
them or not.

'hg --help foo' might also be interesting to test ... unless we already 
have test coverage for that.

/Mads
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20130417/a8aa4d2b/attachment.html>


More information about the Mercurial-devel mailing list