[PATCH 4 of 6] hgweb: generate HTML documentation

Pierre-Yves David pierre-yves.david at ens-lyon.org
Sat Feb 9 07:59:50 CST 2013


On Sat, Feb 09, 2013 at 01:00:38PM +0000, Dan Villiom Podlaski Christiansen wrote:
> # HG changeset patch
> # User Dan Villiom Podlaski Christiansen  <danchr at gmail.com>
> # Date 1360414104 0
> # Node ID 675a399c2c9d5c94d4798bc8fd11f855eaff5672
> # Parent  03c9cfc461cce54da65f0ad0529a734181022b83
> hgweb: generate HTML documentation
> 
> diff --git a/mercurial/help/templates.txt b/mercurial/help/templates.txt
> --- a/mercurial/help/templates.txt
> +++ b/mercurial/help/templates.txt
> @@ -60,6 +60,8 @@ In addition to filters, there are some b
>  
>  - sub(pat, repl, expr)
>  
> +- rstdoc(text, style)
> +
>  Also, for any expression that returns a list, there is a list operator:
>  
>  - expr % "{template}"
> diff --git a/mercurial/hgweb/webcommands.py b/mercurial/hgweb/webcommands.py
> --- a/mercurial/hgweb/webcommands.py
> +++ b/mercurial/hgweb/webcommands.py
> @@ -995,8 +995,7 @@ def help(web, req, tmpl):
>      u.pushbuffer()

extra pushbuffer call

>      u.verbose = True
>      try:
> -        commands.help_(u, topicname)
> +        doc = helpmod.help_(u, topicname, indent=0)
>      except error.UnknownCommand:
>          raise ErrorResponse(HTTP_NOT_FOUND)
> -    doc = u.popbuffer()

while popbuffer have been removed (context manager anyone :-()

>      return tmpl('help', topic=topicname, doc=doc)
> diff --git a/mercurial/templater.py b/mercurial/templater.py
> --- a/mercurial/templater.py
> +++ b/mercurial/templater.py
> @@ -9,6 +9,7 @@ from i18n import _
>  import sys, os, re
>  import util, config, templatefilters, parser, error
>  import types
> +import minirst
>  
>  # template parsing
>  
> @@ -287,6 +288,16 @@ def label(context, mapping, args):
>      t = stringify(args[1][0](context, mapping, args[1][1]))
>      yield runtemplate(context, mapping, compiletemplate(t, context))
>  
> +def rstdoc(context, mapping, args):
> +    if len(args) != 2:
> +        # i18n: "rstdoc" is a keyword
> +        raise error.ParseError(_("rstdoc expects two arguments"))
> +
> +    text = stringify(args[0][0](context, mapping, args[0][1]))
> +    style = stringify(args[1][0](context, mapping, args[1][1]))
> +
> +    return minirst.format(text, style=style)
> +
>  methods = {
>      "string": lambda e, c: (runstring, e[1]),
>      "symbol": lambda e, c: (runsymbol, e[1]),
> @@ -303,6 +314,7 @@ funcs = {
>      "ifeq": ifeq,
>      "join": join,
>      "label": label,
> +    "rstdoc": rstdoc,
>      "sub": sub,
>  }
>  
> diff --git a/mercurial/templates/gitweb/help.tmpl b/mercurial/templates/gitweb/help.tmpl
> --- a/mercurial/templates/gitweb/help.tmpl
> +++ b/mercurial/templates/gitweb/help.tmpl
> @@ -27,8 +27,8 @@ help
>  
>  <div class="title"> </div>
>  
> -<pre>
> -{doc|escape}
> -</pre>
> +<div id="doc">
> +{rstdoc(doc, "html")}
> +</div>
>  
>  {footer}
> diff --git a/mercurial/templates/monoblue/help.tmpl b/mercurial/templates/monoblue/help.tmpl
> --- a/mercurial/templates/monoblue/help.tmpl
> +++ b/mercurial/templates/monoblue/help.tmpl
> @@ -31,8 +31,8 @@
>      </div>
>  
>      <h2 class="no-link no-border">branches</h2>
> -    <pre>
> -    {doc|escape}
> -    </pre>
> +    <div id="doc">
> +    {rstdoc(doc, "html")}
> +    </div>
>  
>  {footer}
> diff --git a/mercurial/templates/paper/help.tmpl b/mercurial/templates/paper/help.tmpl
> --- a/mercurial/templates/paper/help.tmpl
> +++ b/mercurial/templates/paper/help.tmpl
> @@ -31,9 +31,9 @@
>  <div id="hint">find changesets by author, revision,
>  files, or words in the commit message</div>
>  </form>
> -<pre>
> -{doc|escape}
> -</pre>
> +<div id="doc">
> +{rstdoc(doc, "html")}
> +</div>
>  </div>
>  </div>
>  
> diff --git a/tests/test-hgweb-help.t b/tests/test-hgweb-help.t
> --- a/tests/test-hgweb-help.t
> +++ b/tests/test-hgweb-help.t
> @@ -52,65 +52,105 @@ Dish up an empty repo; serve it cold.
>    <div id="hint">find changesets by author, revision,
>    files, or words in the commit message</div>
>    </form>
> -  <pre>
> +  <div id="doc">
> +  <p>
>    hg add [OPTION]... [FILE]...
> +  </p>
> +  <p>
> +  add the specified files on the next commit
> +  </p>
> +  <p>
> +  Schedule files to be version controlled and added to the
> +  repository.
> +  </p>
> +  <p>
> +  The files will be added to the repository at the next commit. To
> +  undo an add before that, see "hg forget".
> +  </p>
> +  <p>
> +  If no names are given, add all files to the repository.
> +  </p>
> +  <p>
> +  Returns 0 if all files are successfully added.
> +  </p>
> +  <p>
> +  options:
> +  </p>
> +  <table>
> +   <tr><td>-I</td>
> +  <td>--include PATTERN [+]</td>
> +  <td>include names matching the given patterns</td></tr>
> +   <tr><td>-X</td>
> +  <td>--exclude PATTERN [+]</td>
> +  <td>exclude names matching the given patterns</td></tr>
> +   <tr><td>-S</td>
> +  <td>--subrepos</td>
> +  <td>recurse into subrepositories</td></tr>
> +   <tr><td>-n</td>
> +  <td>--dry-run</td>
> +  <td>do not perform actions, just print output</td></tr>
> +  </table>
> +  <p>
> +  [+] marked option can be specified multiple times
> +  </p>
> +  <p>
> +  global options:
> +  </p>
> +  <table>
> +   <tr><td>-R</td>
> +  <td>--repository REPO</td>
> +  <td>repository root directory or name of overlay bundle file</td></tr>
> +   <tr><td></td>
> +  <td>--cwd DIR</td>
> +  <td>change working directory</td></tr>
> +   <tr><td>-y</td>
> +  <td>--noninteractive</td>
> +  <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
> +   <tr><td>-q</td>
> +  <td>--quiet</td>
> +  <td>suppress output</td></tr>
> +   <tr><td>-v</td>
> +  <td>--verbose</td>
> +  <td>enable additional output</td></tr>
> +   <tr><td></td>
> +  <td>--config CONFIG [+]</td>
> +  <td>set/override config option (use 'section.name=value')</td></tr>
> +   <tr><td></td>
> +  <td>--debug</td>
> +  <td>enable debugging output</td></tr>
> +   <tr><td></td>
> +  <td>--debugger</td>
> +  <td>start debugger</td></tr>
> +   <tr><td></td>
> +  <td>--encoding ENCODE</td>
> +  <td>set the charset encoding (default: ascii)</td></tr>
> +   <tr><td></td>
> +  <td>--encodingmode MODE</td>
> +  <td>set the charset encoding mode (default: strict)</td></tr>
> +   <tr><td></td>
> +  <td>--traceback</td>
> +  <td>always print a traceback on exception</td></tr>
> +   <tr><td></td>
> +  <td>--time</td>
> +  <td>time how long the command takes</td></tr>
> +   <tr><td></td>
> +  <td>--profile</td>
> +  <td>print command execution profile</td></tr>
> +   <tr><td></td>
> +  <td>--version</td>
> +  <td>output version information and exit</td></tr>
> +   <tr><td>-h</td>
> +  <td>--help</td>
> +  <td>display help and exit</td></tr>
> +   <tr><td></td>
> +  <td>--hidden</td>
> +  <td>consider hidden changesets</td></tr>
> +  </table>
> +  <p>
> +  [+] marked option can be specified multiple times
> +  </p>
>    
> -  add the specified files on the next commit
> -  
> -      Schedule files to be version controlled and added to the repository.
> -  
> -      The files will be added to the repository at the next commit. To undo an
> -      add before that, see "hg forget".
> -  
> -      If no names are given, add all files to the repository.
> -  
> -      An example showing how new (unknown) files are added automatically by "hg
> -      add":
> -  
> -        $ ls
> -        foo.c
> -        $ hg status
> -        ? foo.c
> -        $ hg add
> -        adding foo.c
> -        $ hg status
> -        A foo.c
> -  
> -      Returns 0 if all files are successfully added.
> -  
> -  options:
> -  
> -   -I --include PATTERN [+] include names matching the given patterns
> -   -X --exclude PATTERN [+] exclude names matching the given patterns
> -   -S --subrepos            recurse into subrepositories
> -   -n --dry-run             do not perform actions, just print output
> -  
> -  [+] marked option can be specified multiple times
> -  
> -  global options:
> -  
> -   -R --repository REPO   repository root directory or name of overlay bundle
> -                          file
> -      --cwd DIR           change working directory
> -   -y --noninteractive    do not prompt, automatically pick the first choice for
> -                          all prompts
> -   -q --quiet             suppress output
> -   -v --verbose           enable additional output
> -      --config CONFIG [+] set/override config option (use 'section.name=value')
> -      --debug             enable debugging output
> -      --debugger          start debugger
> -      --encoding ENCODE   set the charset encoding (default: ascii)
> -      --encodingmode MODE set the charset encoding mode (default: strict)
> -      --traceback         always print a traceback on exception
> -      --time              time how long the command takes
> -      --profile           print command execution profile
> -      --version           output version information and exit
> -   -h --help              display help and exit
> -      --hidden            consider hidden changesets
> -  
> -  [+] marked option can be specified multiple times
> -  
> -  </pre>
> +  </div>
>    </div>
>    </div>
>    
> @@ -164,74 +204,105 @@ Dish up an empty repo; serve it cold.
>    <div id="hint">find changesets by author, revision,
>    files, or words in the commit message</div>
>    </form>
> -  <pre>
> +  <div id="doc">
> +  <p>
>    hg remove [OPTION]... FILE...
> +  </p>
> +  <p>
> +  aliases: rm
> +  </p>
> +  <p>
> +  remove the specified files on the next commit
> +  </p>
> +  <p>
> +  Schedule the indicated files for removal from the current branch.
> +  </p>
> +  <p>
> +  This command schedules the files to be removed at the next commit.
> +  To undo a remove before that, see "hg revert". To undo added
> +  files, see "hg forget".
> +  </p>
> +  <p>
> +  Returns 0 on success, 1 if any warnings encountered.
> +  </p>
> +  <p>
> +  options:
> +  </p>
> +  <table>
> +   <tr><td>-A</td>
> +  <td>--after</td>
> +  <td>record delete for missing files</td></tr>
> +   <tr><td>-f</td>
> +  <td>--force</td>
> +  <td>remove (and delete) file even if added or modified</td></tr>
> +   <tr><td>-I</td>
> +  <td>--include PATTERN [+]</td>
> +  <td>include names matching the given patterns</td></tr>
> +   <tr><td>-X</td>
> +  <td>--exclude PATTERN [+]</td>
> +  <td>exclude names matching the given patterns</td></tr>
> +  </table>
> +  <p>
> +  [+] marked option can be specified multiple times
> +  </p>
> +  <p>
> +  global options:
> +  </p>
> +  <table>
> +   <tr><td>-R</td>
> +  <td>--repository REPO</td>
> +  <td>repository root directory or name of overlay bundle file</td></tr>
> +   <tr><td></td>
> +  <td>--cwd DIR</td>
> +  <td>change working directory</td></tr>
> +   <tr><td>-y</td>
> +  <td>--noninteractive</td>
> +  <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
> +   <tr><td>-q</td>
> +  <td>--quiet</td>
> +  <td>suppress output</td></tr>
> +   <tr><td>-v</td>
> +  <td>--verbose</td>
> +  <td>enable additional output</td></tr>
> +   <tr><td></td>
> +  <td>--config CONFIG [+]</td>
> +  <td>set/override config option (use 'section.name=value')</td></tr>
> +   <tr><td></td>
> +  <td>--debug</td>
> +  <td>enable debugging output</td></tr>
> +   <tr><td></td>
> +  <td>--debugger</td>
> +  <td>start debugger</td></tr>
> +   <tr><td></td>
> +  <td>--encoding ENCODE</td>
> +  <td>set the charset encoding (default: ascii)</td></tr>
> +   <tr><td></td>
> +  <td>--encodingmode MODE</td>
> +  <td>set the charset encoding mode (default: strict)</td></tr>
> +   <tr><td></td>
> +  <td>--traceback</td>
> +  <td>always print a traceback on exception</td></tr>
> +   <tr><td></td>
> +  <td>--time</td>
> +  <td>time how long the command takes</td></tr>
> +   <tr><td></td>
> +  <td>--profile</td>
> +  <td>print command execution profile</td></tr>
> +   <tr><td></td>
> +  <td>--version</td>
> +  <td>output version information and exit</td></tr>
> +   <tr><td>-h</td>
> +  <td>--help</td>
> +  <td>display help and exit</td></tr>
> +   <tr><td></td>
> +  <td>--hidden</td>
> +  <td>consider hidden changesets</td></tr>
> +  </table>
> +  <p>
> +  [+] marked option can be specified multiple times
> +  </p>
>    
> -  aliases: rm
> -  
> -  remove the specified files on the next commit
> -  
> -      Schedule the indicated files for removal from the current branch.
> -  
> -      This command schedules the files to be removed at the next commit. To undo
> -      a remove before that, see "hg revert". To undo added files, see "hg
> -      forget".
> -  
> -      -A/--after can be used to remove only files that have already been
> -      deleted, -f/--force can be used to force deletion, and -Af can be used to
> -      remove files from the next revision without deleting them from the working
> -      directory.
> -  
> -      The following table details the behavior of remove for different file
> -      states (columns) and option combinations (rows). The file states are Added
> -      [A], Clean [C], Modified [M] and Missing [!] (as reported by "hg status").
> -      The actions are Warn, Remove (from branch) and Delete (from disk):
> -  
> -           A C  M  !
> -      --------------
> -      none W RD W  R
> -      -f   R RD RD R
> -      -A   W W  W  R
> -      -Af  R R  R  R
> -  
> -      Note that remove never deletes files in Added [A] state from the working
> -      directory, not even if option --force is specified.
> -  
> -      Returns 0 on success, 1 if any warnings encountered.
> -  
> -  options:
> -  
> -   -A --after               record delete for missing files
> -   -f --force               remove (and delete) file even if added or modified
> -   -I --include PATTERN [+] include names matching the given patterns
> -   -X --exclude PATTERN [+] exclude names matching the given patterns
> -  
> -  [+] marked option can be specified multiple times
> -  
> -  global options:
> -  
> -   -R --repository REPO   repository root directory or name of overlay bundle
> -                          file
> -      --cwd DIR           change working directory
> -   -y --noninteractive    do not prompt, automatically pick the first choice for
> -                          all prompts
> -   -q --quiet             suppress output
> -   -v --verbose           enable additional output
> -      --config CONFIG [+] set/override config option (use 'section.name=value')
> -      --debug             enable debugging output
> -      --debugger          start debugger
> -      --encoding ENCODE   set the charset encoding (default: ascii)
> -      --encodingmode MODE set the charset encoding mode (default: strict)
> -      --traceback         always print a traceback on exception
> -      --time              time how long the command takes
> -      --profile           print command execution profile
> -      --version           output version information and exit
> -   -h --help              display help and exit
> -      --hidden            consider hidden changesets
> -  
> -  [+] marked option can be specified multiple times
> -  
> -  </pre>
> +  </div>
>    </div>
>    </div>
>    
> @@ -285,38 +356,50 @@ Dish up an empty repo; serve it cold.
>    <div id="hint">find changesets by author, revision,
>    files, or words in the commit message</div>
>    </form>
> -  <pre>
> -  Specifying Single Revisions
> +  <div id="doc">
> +  <table>
> +   <tr><td>Specifying Single Revisions</td></tr>
> +  </table>
> +  <p>
> +  Mercurial supports several ways to specify individual revisions.
> +  </p>
> +  <p>
> +  A plain integer is treated as a revision number. Negative integers are
> +  treated as sequential offsets from the tip, with -1 denoting the tip,
> +  -2 denoting the revision prior to the tip, and so forth.
> +  </p>
> +  <p>
> +  A 40-digit hexadecimal string is treated as a unique revision
> +  identifier.
> +  </p>
> +  <p>
> +  A hexadecimal string less than 40 characters long is treated as a
> +  unique revision identifier and is referred to as a short-form
> +  identifier. A short-form identifier is only valid if it is the prefix
> +  of exactly one full-length identifier.
> +  </p>
> +  <p>
> +  Any other string is treated as a bookmark, tag, or branch name. A
> +  bookmark is a movable pointer to a revision. A tag is a permanent name
> +  associated with a revision. A branch name denotes the tipmost revision
> +  of that branch. Bookmark, tag, and branch names must not contain the ":"
> +  character.
> +  </p>
> +  <p>
> +  The reserved name "tip" always identifies the most recent revision.
> +  </p>
> +  <p>
> +  The reserved name "null" indicates the null revision. This is the
> +  revision of an empty repository, and the parent of revision 0.
> +  </p>
> +  <p>
> +  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.
> +  </p>
>    
> -      Mercurial supports several ways to specify individual revisions.
> -  
> -      A plain integer is treated as a revision number. Negative integers are
> -      treated as sequential offsets from the tip, with -1 denoting the tip, -2
> -      denoting the revision prior to the tip, and so forth.
> -  
> -      A 40-digit hexadecimal string is treated as a unique revision identifier.
> -  
> -      A hexadecimal string less than 40 characters long is treated as a unique
> -      revision identifier and is referred to as a short-form identifier. A
> -      short-form identifier is only valid if it is the prefix of exactly one
> -      full-length identifier.
> -  
> -      Any other string is treated as a bookmark, tag, or branch name. A bookmark
> -      is a movable pointer to a revision. A tag is a permanent name associated
> -      with a revision. A branch name denotes the tipmost revision of that
> -      branch. Bookmark, tag, and branch names must not contain the ":"
> -      character.
> -  
> -      The reserved name "tip" always identifies the most recent revision.
> -  
> -      The reserved name "null" indicates the null revision. This is the revision
> -      of an empty repository, and the parent of revision 0.
> -  
> -      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.
> -  
> -  </pre>
> +  </div>
>    </div>
>    </div>
>    
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list