{
    "mode": "man",
    "parameter": "HG",
    "section": "1",
    "url": "https://www.chedong.com/phpMan.php/man/HG/1/json",
    "generated": "2026-10-20T06:32:29Z",
    "synopsis": "hg command [option]... [argument]...",
    "sections": {
        "NAME": {
            "content": "hg - Mercurial source code management system\n",
            "subsections": []
        },
        "SYNOPSIS": {
            "content": "hg command [option]... [argument]...\n",
            "subsections": []
        },
        "DESCRIPTION": {
            "content": "The hg command provides a command line interface to the Mercurial system.\n",
            "subsections": []
        },
        "COMMAND ELEMENTS": {
            "content": "",
            "subsections": [
                {
                    "name": "files...",
                    "content": "indicates  one or more filename or relative path filenames; see File Name Patterns for\ninformation on pattern matching\n\npath   indicates a path on the local machine\n"
                },
                {
                    "name": "revision",
                    "content": "indicates a changeset which can be specified as a changeset revision number, a tag, or\na unique substring of the changeset hash value\n"
                },
                {
                    "name": "repository path",
                    "content": "either the pathname of a local repository or the URI of a remote repository.\n"
                }
            ]
        },
        "OPTIONS": {
            "content": "",
            "subsections": [
                {
                    "name": "-R,_",
                    "content": "repository root directory or name of overlay bundle file\n\n--cwd <DIR>\nchange working directory\n"
                },
                {
                    "name": "-y, --noninteractive",
                    "content": "do not prompt, automatically pick the first choice for all prompts\n",
                    "flag": "-y",
                    "long": "--noninteractive"
                },
                {
                    "name": "-q, --quiet",
                    "content": "suppress output\n",
                    "flag": "-q",
                    "long": "--quiet"
                },
                {
                    "name": "-v, --verbose",
                    "content": "enable additional output\n\n--color <TYPE>\nwhen to colorize (boolean, always, auto, never, or debug)\n\n--config <CONFIG[+]>\nset/override config option (use 'section.name=value')\n",
                    "flag": "-v",
                    "long": "--verbose"
                },
                {
                    "name": "--debug",
                    "content": "enable debugging output\n",
                    "long": "--debug"
                },
                {
                    "name": "--debugger",
                    "content": "start debugger\n\n--encoding <ENCODE>\nset the charset encoding (default: UTF-8)\n\n--encodingmode <MODE>\nset the charset encoding mode (default: strict)\n",
                    "long": "--debugger"
                },
                {
                    "name": "--traceback",
                    "content": "always print a traceback on exception\n\n--time time how long the command takes\n",
                    "long": "--traceback"
                },
                {
                    "name": "--profile",
                    "content": "print command execution profile\n",
                    "long": "--profile"
                },
                {
                    "name": "--version",
                    "content": "output version information and exit\n",
                    "long": "--version"
                },
                {
                    "name": "-h, --help",
                    "content": "display help and exit\n",
                    "flag": "-h",
                    "long": "--help"
                },
                {
                    "name": "--hidden",
                    "content": "consider hidden changesets\n\n--pager <TYPE>\nwhen to paginate (boolean, always, auto, or never) (default: auto)\n\n[+] marked option can be specified multiple times\n",
                    "long": "--hidden"
                }
            ]
        },
        "COMMANDS": {
            "content": "",
            "subsections": [
                {
                    "name": "Repository creation",
                    "content": ""
                },
                {
                    "name": "clone",
                    "content": "make a copy of an existing repository:\n\nhg clone [OPTION]... SOURCE [DEST]\n\nCreate a copy of an existing repository in a new directory.\n\nIf no destination directory name is specified, it defaults to the basename of the source.\n\nThe location of the source is added to the new repository's .hg/hgrc file, as the default  to\nbe used for future pulls.\n\nOnly  local  paths and ssh:// URLs are supported as destinations. For ssh:// destinations, no\nworking directory or .hg/hgrc will be created on the remote side.\n\nIf the source repository has a bookmark called '@' set, that revision will be checked out  in\nthe new repository by default.\n\nTo  check  out a particular version, use -u/--update, or -U/--noupdate to create a clone with\nno working directory.\n\nTo pull only a subset of changesets, specify one or more revisions identifiers with  -r/--rev\nor  branches with -b/--branch. The resulting clone will contain only the specified changesets\nand their ancestors. These options (or 'clone src#rev dest') imply  --pull,  even  for  local\nsource repositories.\n\nIn normal clone mode, the remote normalizes repository data into a common exchange format and\nthe  receiving  end  translates this data into its local storage format. --stream activates a\ndifferent clone mode that essentially copies repository files from the  remote  with  minimal\ndata  processing.  This  significantly  reduces the CPU cost of a clone both remotely and lo‐\ncally.  However, it often increases the transferred data size by 30-40%. This can  result  in\nsubstantially  faster clones where I/O throughput is plentiful, especially for larger reposi‐\ntories. A side-effect of --stream clones is that storage settings and requirements on the re‐\nmote are applied locally: a modern client may inherit legacy or inefficient storage  used  by\nthe  remote or a legacy Mercurial client may not be able to clone from a modern Mercurial re‐\nmote.\n\nNote   Specifying a tag will include the tagged changeset but not  the  changeset  containing\nthe tag.\n\nFor efficiency, hardlinks are used for cloning whenever the source and destination are on the\nsame  filesystem  (note  this  applies only to the repository data, not to the working direc‐\ntory). Some filesystems, such as AFS, implement hardlinking incorrectly, but  do  not  report\nerrors. In these cases, use the --pull option to avoid hardlinking.\n\nMercurial will update the working directory to the first applicable revision from this list:\n\na. null if -U or the source repository has no changesets\n\nb. if  -u  .  and the source repository is local, the first parent of the source repository's\nworking directory\n\nc. the changeset specified with -u (if a branch name, this means  the  latest  head  of  that\nbranch)\n\nd. the changeset specified with -r\n\ne. the tipmost head specified with -b\n\nf. the tipmost head specified with the url#branch source syntax\n\ng. the revision marked with the '@' bookmark, if present\n\nh. the tipmost head of the default branch\n\ni. tip\n\nWhen  cloning  from  servers  that  support it, Mercurial may fetch pre-generated data from a\nserver-advertised URL or inline from the same stream. When this is done, hooks  operating  on\nincoming  changesets  and  changegroups  may fire more than once, once for each pre-generated\nbundle and as well as for any additional remaining data. In addition, if an error occurs, the\nrepository may be rolled back to a partial clone. This behavior  may  change  in  future  re‐\nleases.  See hg help -e clonebundles for more.\n\nExamples:\n\n• clone a remote repository to a new directory named hg/:\n\nhg clone https://www.mercurial-scm.org/repo/hg/\n\n• create a lightweight local clone:\n\nhg clone project/ project-feature/\n\n• clone from an absolute path on an ssh server (note double-slash):\n\nhg clone ssh://user@server//home/projects/alpha/\n\n• do a streaming clone while checking out a specified version:\n\nhg clone --stream http://server/repo -u 1.5\n\n• create a repository without changesets after a particular revision:\n\nhg clone -r 04e544 experimental/ good/\n\n• clone (and track) a particular named branch:\n\nhg clone https://www.mercurial-scm.org/repo/hg/#stable\n\nSee hg help urls for details on specifying URLs.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-U, --noupdate",
                    "content": "the clone will include an empty working directory (only a repository)\n",
                    "flag": "-U",
                    "long": "--noupdate"
                },
                {
                    "name": "-u,_",
                    "content": "revision, tag, or branch to check out\n"
                },
                {
                    "name": "-r,_",
                    "content": "do not clone everything, but include this changeset and its ancestors\n"
                },
                {
                    "name": "-b,_",
                    "content": "do not clone everything, but include this branch's changesets and their ancestors\n\n--pull use pull protocol to copy metadata\n"
                },
                {
                    "name": "--uncompressed",
                    "content": "an alias to --stream (DEPRECATED)\n",
                    "long": "--uncompressed"
                },
                {
                    "name": "--stream",
                    "content": "clone with minimal data processing\n",
                    "long": "--stream"
                },
                {
                    "name": "-e,_",
                    "content": "specify ssh command to use\n\n--remotecmd <CMD>\nspecify hg command to run on the remote side\n"
                },
                {
                    "name": "--insecure",
                    "content": "do not verify server certificate (ignoring web.cacerts config)\n\n[+] marked option can be specified multiple times\n",
                    "long": "--insecure"
                },
                {
                    "name": "init",
                    "content": "create a new repository in the given directory:\n\nhg init [-e CMD] [--remotecmd CMD] [DEST]\n\nInitialize a new repository in the given directory. If the given directory does not exist, it\nwill be created.\n\nIf no directory is given, the current directory is used.\n\nIt is possible to specify an ssh:// URL as the destination.  See hg help urls for more infor‐\nmation.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-e,_",
                    "content": "specify ssh command to use\n\n--remotecmd <CMD>\nspecify hg command to run on the remote side\n"
                },
                {
                    "name": "--insecure",
                    "content": "do not verify server certificate (ignoring web.cacerts config)\n",
                    "long": "--insecure"
                },
                {
                    "name": "Remote repository management",
                    "content": ""
                },
                {
                    "name": "incoming",
                    "content": "show new changesets found in source:\n\nhg incoming [-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]\n\nShow  new  changesets found in the specified path/URL or the default pull location. These are\nthe changesets that would have been pulled by hg pull at the time you issued this command.\n\nSee pull for valid source format details.\n\nWith -B/--bookmarks, the result of bookmark comparison between local and remote  repositories\nis displayed. With -v/--verbose, status is also displayed for each bookmark like below:\n\nBM1               01234567890a added\nBM2               1234567890ab advanced\nBM3               234567890abc diverged\nBM4               34567890abcd changed\n\nThe action taken locally when pulling depends on the status of each bookmark:\n"
                },
                {
                    "name": "added",
                    "content": "pull will create it\n"
                },
                {
                    "name": "advanced",
                    "content": "pull will update it\n"
                },
                {
                    "name": "diverged",
                    "content": "pull will create a divergent bookmark\n"
                },
                {
                    "name": "changed",
                    "content": "result depends on remote changesets\n\nFrom  the  point of view of pulling behavior, bookmark existing only in the remote repository\nare treated as added, even if it is in fact locally deleted.\n\nFor remote repository, using --bundle avoids downloading the changesets twice if the incoming\nis followed by a pull.\n\nExamples:\n\n• show incoming changes with patches and full description:\n\nhg incoming -vp\n\n• show incoming changes excluding merges, store a bundle:\n\nhg in -vpM --bundle incoming.hg\nhg pull incoming.hg\n\n• briefly list changes inside a bundle:\n\nhg in changes.hg -T \"{desc|firstline}\\n\"\n\nReturns 0 if there are incoming changes, 1 otherwise.\n\nOptions:\n"
                },
                {
                    "name": "-f, --force",
                    "content": "run even if remote repository is unrelated\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-n, --newest-first",
                    "content": "show newest record first\n\n--bundle <FILE>\nfile to store the bundles into\n",
                    "flag": "-n",
                    "long": "--newest-first"
                },
                {
                    "name": "-r,_",
                    "content": "a remote changeset intended to be added\n"
                },
                {
                    "name": "-B, --bookmarks",
                    "content": "compare bookmarks\n",
                    "flag": "-B",
                    "long": "--bookmarks"
                },
                {
                    "name": "-b,_",
                    "content": "a specific branch you would like to pull\n"
                },
                {
                    "name": "-p, --patch",
                    "content": "show patch\n",
                    "flag": "-p",
                    "long": "--patch"
                },
                {
                    "name": "-g, --git",
                    "content": "use git extended diff format\n",
                    "flag": "-g",
                    "long": "--git"
                },
                {
                    "name": "-l,_",
                    "content": "limit number of changes displayed\n"
                },
                {
                    "name": "-M, --no-merges",
                    "content": "do not show merges\n\n--stat output diffstat-style summary of changes\n",
                    "flag": "-M",
                    "long": "--no-merges"
                },
                {
                    "name": "-G, --graph",
                    "content": "show the revision DAG\n\n--style <STYLE>\ndisplay using template map file (DEPRECATED)\n",
                    "flag": "-G",
                    "long": "--graph"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "-e,_",
                    "content": "specify ssh command to use\n\n--remotecmd <CMD>\nspecify hg command to run on the remote side\n"
                },
                {
                    "name": "--insecure",
                    "content": "do not verify server certificate (ignoring web.cacerts config)\n",
                    "long": "--insecure"
                },
                {
                    "name": "-S, --subrepos",
                    "content": "recurse into subrepositories\n\n[+] marked option can be specified multiple times\n\naliases: in\n",
                    "flag": "-S",
                    "long": "--subrepos"
                },
                {
                    "name": "outgoing",
                    "content": "show changesets not found in the destination:\n\nhg outgoing [-M] [-p] [-n] [-f] [-r REV]... [DEST]...\n\nShow changesets not found in the specified destination repository or the default  push  loca‐\ntion. These are the changesets that would be pushed if a push was requested.\n\nSee pull for details of valid destination formats.\n\nWith  -B/--bookmarks, the result of bookmark comparison between local and remote repositories\nis displayed. With -v/--verbose, status is also displayed for each bookmark like below:\n\nBM1               01234567890a added\nBM2                            deleted\nBM3               234567890abc advanced\nBM4               34567890abcd diverged\nBM5               4567890abcde changed\n\nThe action taken when pushing depends on the status of each bookmark:\n"
                },
                {
                    "name": "added",
                    "content": "push with -B will create it\n"
                },
                {
                    "name": "deleted",
                    "content": "push with -B will delete it\n"
                },
                {
                    "name": "advanced",
                    "content": "push will update it\n"
                },
                {
                    "name": "diverged",
                    "content": "push with -B will update it\n"
                },
                {
                    "name": "changed",
                    "content": "push with -B will update it\n\nFrom the point of view of pushing behavior, bookmarks existing only in the remote  repository\nare treated as deleted, even if it is in fact added remotely.\n\nReturns 0 if there are outgoing changes, 1 otherwise.\n\nOptions:\n"
                },
                {
                    "name": "-f, --force",
                    "content": "run even when the destination is unrelated\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-r,_",
                    "content": "a changeset intended to be included in the destination\n"
                },
                {
                    "name": "-n, --newest-first",
                    "content": "show newest record first\n",
                    "flag": "-n",
                    "long": "--newest-first"
                },
                {
                    "name": "-B, --bookmarks",
                    "content": "compare bookmarks\n",
                    "flag": "-B",
                    "long": "--bookmarks"
                },
                {
                    "name": "-b,_",
                    "content": "a specific branch you would like to push\n"
                },
                {
                    "name": "-p, --patch",
                    "content": "show patch\n",
                    "flag": "-p",
                    "long": "--patch"
                },
                {
                    "name": "-g, --git",
                    "content": "use git extended diff format\n",
                    "flag": "-g",
                    "long": "--git"
                },
                {
                    "name": "-l,_",
                    "content": "limit number of changes displayed\n"
                },
                {
                    "name": "-M, --no-merges",
                    "content": "do not show merges\n\n--stat output diffstat-style summary of changes\n",
                    "flag": "-M",
                    "long": "--no-merges"
                },
                {
                    "name": "-G, --graph",
                    "content": "show the revision DAG\n\n--style <STYLE>\ndisplay using template map file (DEPRECATED)\n",
                    "flag": "-G",
                    "long": "--graph"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "-e,_",
                    "content": "specify ssh command to use\n\n--remotecmd <CMD>\nspecify hg command to run on the remote side\n"
                },
                {
                    "name": "--insecure",
                    "content": "do not verify server certificate (ignoring web.cacerts config)\n",
                    "long": "--insecure"
                },
                {
                    "name": "-S, --subrepos",
                    "content": "recurse into subrepositories\n\n[+] marked option can be specified multiple times\n\naliases: out\n",
                    "flag": "-S",
                    "long": "--subrepos"
                },
                {
                    "name": "paths",
                    "content": "show aliases for remote repositories:\n\nhg paths [NAME]\n\nShow  definition  of  symbolic  path  name  NAME. If no name is given, show definition of all\navailable names.\n\nOption -q/--quiet suppresses all output when searching for NAME and shows only the path names\nwhen listing all definitions.\n\nPath names are defined in the [paths] section of your configuration file and in  /etc/mercur‐\nial/hgrc. If run inside a repository, .hg/hgrc is used, too.\n\nThe  path  names  default and default-push have a special meaning.  When performing a push or\npull operation, they are used as fallbacks if no location is specified on  the  command-line.\nWhen  default-push is set, it will be used for push and default will be used for pull; other‐\nwise default is used as the fallback for both.  When cloning a repository, the  clone  source\nis written as default in .hg/hgrc.\n\nNote   default  and  default-push apply to all inbound (e.g.  hg incoming) and outbound (e.g.\nhg outgoing, hg email and hg bundle) operations.\n\nSee hg help urls for more information.\n\nTemplate:\n\nThe following keywords are supported. See also hg help templates.\n\nname   String. Symbolic name of the path alias.\n"
                },
                {
                    "name": "pushurl",
                    "content": "String. URL for push operations.\n\nurl    String. URL or directory path for the other operations.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "pull",
                    "content": "pull changes from the specified source:\n\nhg pull [-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]...\n\nPull changes from a remote repository to a local one.\n\nThis finds all changes from the repository at the specified path or URL and adds  them  to  a\nlocal  repository  (the current one unless -R is specified). By default, this does not update\nthe copy of the project in the working directory.\n\nWhen cloning from servers that support it, Mercurial may fetch pre-generated data. When  this\nis  done,  hooks  operating  on incoming changesets and changegroups may fire more than once,\nonce for each pre-generated bundle and as well as for any additional remaining data.  See  hg\nhelp -e clonebundles for more.\n\nUse  hg  incoming if you want to see what would have been added by a pull at the time you is‐\nsued this command. If you then decide to add those changes to the repository, you should  use\nhg pull -r X where X is the last changeset listed by hg incoming.\n\nIf  SOURCE  is  omitted, the 'default' path will be used.  See hg help urls for more informa‐\ntion.\n\nIf multiple sources are specified, they will be pulled sequentially as if the command was run\nmultiple time. If --update is specify and the command will stop at the first failed --update.\n\nSpecifying bookmark as . is equivalent to specifying the active bookmark's name.\n\nOne can use the --remote-hidden flag to pull changesets hidden on the remote.  This  flag  is\n\"best effort\", and will only work if the server supports the feature and is configured to al‐\nlow  the user to access hidden changesets. This option is experimental and backwards compati‐\nbility is not garanteed.\n\nReturns 0 on success, 1 if an update had unresolved files.\n\nOptions:\n"
                },
                {
                    "name": "-u, --update",
                    "content": "update to new branch head if new descendants were pulled\n",
                    "flag": "-u",
                    "long": "--update"
                },
                {
                    "name": "-f, --force",
                    "content": "run even when remote repository is unrelated\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "--confirm",
                    "content": "confirm pull before applying changes\n",
                    "long": "--confirm"
                },
                {
                    "name": "-r,_",
                    "content": "a remote changeset intended to be added\n"
                },
                {
                    "name": "-B,_",
                    "content": "bookmark to pull\n"
                },
                {
                    "name": "-b,_",
                    "content": "a specific branch you would like to pull\n"
                },
                {
                    "name": "--remote-hidden",
                    "content": "include changesets hidden on the remote (EXPERIMENTAL)\n",
                    "long": "--remote-hidden"
                },
                {
                    "name": "-e,_",
                    "content": "specify ssh command to use\n\n--remotecmd <CMD>\nspecify hg command to run on the remote side\n"
                },
                {
                    "name": "--insecure",
                    "content": "do not verify server certificate (ignoring web.cacerts config)\n\n[+] marked option can be specified multiple times\n",
                    "long": "--insecure"
                },
                {
                    "name": "push",
                    "content": "push changes to the specified destination:\n\nhg push [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]...\n\nPush changesets from the local repository to the specified destination.\n\nThis operation is symmetrical to pull: it is identical to a pull in the  destination  reposi‐\ntory from the current one.\n\nBy  default,  push  will  not  allow creation of new heads at the destination, since multiple\nheads would make it unclear which head to use. In this situation, it is recommended  to  pull\nand merge before pushing.\n\nUse  --new-branch  if you want to allow push to create a new named branch that is not present\nat the destination. This allows you to  only  create  a  new  branch  without  forcing  other\nchanges.\n\nNote   Extra  care  should be taken with the -f/--force option, which will push all new heads\non all branches, an action which will almost always cause confusion for collaborators.\n\nIf -r/--rev is used, the specified revision and all its ancestors will be pushed to  the  re‐\nmote repository.\n\nIf  -B/--bookmark is used, the specified bookmarked revision, its ancestors, and the bookmark\nwill be pushed to the remote repository. Specifying . is equivalent to specifying the  active\nbookmark's name. Use the --all-bookmarks option for pushing all current bookmarks.\n\nPlease see hg help urls for important details about ssh:// URLs. If DESTINATION is omitted, a\ndefault path will be used.\n\nWhen  passed  multiple  destinations,  push  will  process them one after the other, but stop\nshould an error occur.\n\nThe --pushvars option sends strings to the server that become environment variables prepended\nwith HGUSERVAR. For example, --pushvars ENABLEFEATURE=true, provides the server side hooks\nwith HGUSERVARENABLEFEATURE=true as part of their environment.\n\npushvars can provide for user-overridable hooks as well as set debug levels. One  example  is\nhaving  a hook that blocks commits containing conflict markers, but enables the user to over‐\nride the hook if the file is using conflict markers for testing purposes or the  file  format\nhas strings that look like conflict markers.\n\nBy default, servers will ignore --pushvars. To enable it add the following to your configura‐\ntion file:\n\n[push]\npushvars.server = true\n\nReturns 0 if push was successful, 1 if nothing to push.\n\nOptions:\n"
                },
                {
                    "name": "-f, --force",
                    "content": "force push\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-r,_",
                    "content": "a changeset intended to be included in the destination\n"
                },
                {
                    "name": "-B,_",
                    "content": "bookmark to push\n"
                },
                {
                    "name": "--all-bookmarks",
                    "content": "push all bookmarks (EXPERIMENTAL)\n",
                    "long": "--all-bookmarks"
                },
                {
                    "name": "-b,_",
                    "content": "a specific branch you would like to push\n"
                },
                {
                    "name": "--new-branch",
                    "content": "allow pushing a new branch\n\n--pushvars <VALUE[+]>\nvariables that can be sent to server (ADVANCED)\n",
                    "long": "--new-branch"
                },
                {
                    "name": "--publish",
                    "content": "push the changeset as public (EXPERIMENTAL)\n",
                    "long": "--publish"
                },
                {
                    "name": "-e,_",
                    "content": "specify ssh command to use\n\n--remotecmd <CMD>\nspecify hg command to run on the remote side\n"
                },
                {
                    "name": "--insecure",
                    "content": "do not verify server certificate (ignoring web.cacerts config)\n\n[+] marked option can be specified multiple times\n",
                    "long": "--insecure"
                },
                {
                    "name": "serve",
                    "content": "start stand-alone webserver:\n\nhg serve [OPTION]...\n\nStart  a  local  HTTP repository browser and pull server. You can use this for ad-hoc sharing\nand browsing of repositories. It is recommended to use a real web server to serve  a  reposi‐\ntory for longer periods of time.\n\nPlease  note that the server does not implement access control.  This means that, by default,\nanybody can read from the server and nobody can write to  it  by  default.  Set  the  web.al‐\nlow-push  option  to  *  to  allow everybody to push to the server. You should use a real web\nserver if you need to authenticate users.\n\nBy default, the server logs accesses to stdout and errors to stderr. Use  the  -A/--accesslog\nand -E/--errorlog options to log to files.\n\nTo  have  the  server  choose a free port number to listen on, specify a port number of 0; in\nthis case, the server will print the port number it uses.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-A,_",
                    "content": "name of access log file to write to\n"
                },
                {
                    "name": "-d, --daemon",
                    "content": "run server in background\n\n--daemon-postexec <VALUE[+]>\nused internally by daemon mode\n",
                    "flag": "-d",
                    "long": "--daemon"
                },
                {
                    "name": "-E,_",
                    "content": "name of error log file to write to\n"
                },
                {
                    "name": "-p,_",
                    "content": "port to listen on (default: 8000)\n"
                },
                {
                    "name": "-a,_",
                    "content": "address to listen on (default: all interfaces)\n\n--prefix <PREFIX>\nprefix path to serve from (default: server root)\n"
                },
                {
                    "name": "-n,_",
                    "content": "name to show in web pages (default: working directory)\n\n--web-conf <FILE>\nname of the hgweb config file (see 'hg help hgweb')\n\n--webdir-conf <FILE>\nname of the hgweb config file (DEPRECATED)\n\n--pid-file <FILE>\nname of file to write process ID to\n"
                },
                {
                    "name": "--stdio",
                    "content": "for remote clients (ADVANCED)\n\n--cmdserver <MODE>\nfor remote clients (ADVANCED)\n",
                    "long": "--stdio"
                },
                {
                    "name": "-t,_",
                    "content": "web templates to use\n\n--style <STYLE>\ntemplate style to use\n"
                },
                {
                    "name": "-6, --ipv6",
                    "content": "use IPv6 instead of IPv4\n\n--certificate <FILE>\nSSL certificate file\n",
                    "flag": "-6",
                    "long": "--ipv6"
                },
                {
                    "name": "--print-url",
                    "content": "start and print only the URL\n",
                    "long": "--print-url"
                },
                {
                    "name": "-S, --subrepos",
                    "content": "recurse into subrepositories\n\n[+] marked option can be specified multiple times\n",
                    "flag": "-S",
                    "long": "--subrepos"
                },
                {
                    "name": "Change creation",
                    "content": ""
                },
                {
                    "name": "commit",
                    "content": "commit the specified files or all outstanding changes:\n\nhg commit [OPTION]... [FILE]...\n\nCommit changes to the given files into the repository. Unlike a centralized SCM, this  opera‐\ntion is a local operation. See hg push for a way to actively distribute your changes.\n\nIf a list of files is omitted, all changes reported by hg status will be committed.\n\nIf you are committing the result of a merge, do not provide any filenames or -I/-X filters.\n\nIf  no commit message is specified, Mercurial starts your configured editor where you can en‐\nter a message. In case your commit  fails,  you  will  find  a  backup  of  your  message  in\n.hg/last-message.txt.\n\nThe --close-branch flag can be used to mark the current branch head closed. When all heads of\na branch are closed, the branch will be considered closed and no longer listed.\n\nThe  --amend  flag can be used to amend the parent of the working directory with a new commit\nthat contains the changes in the parent in addition to those currently reported by hg status,\nif there are any. The old commit is stored in a backup bundle  in  .hg/strip-backup  (see  hg\nhelp bundle and hg help unbundle on how to restore it).\n\nMessage,  user  and  date  are taken from the amended commit unless specified. When a message\nisn't specified on the command line, the editor will open with the  message  of  the  amended\ncommit.\n\nIt  is  not  possible to amend public changesets (see hg help phases) or changesets that have\nchildren.\n\nSee hg help dates for a list of formats valid for -d/--date.\n\nReturns 0 on success, 1 if nothing changed.\n\nExamples:\n\n• commit all files ending in .py:\n\nhg commit --include \"set:.py\"\n\n• commit all non-binary files:\n\nhg commit --exclude \"set:binary()\"\n\n• amend the current commit and set the date to now:\n\nhg commit --amend --date now\n\nOptions:\n"
                },
                {
                    "name": "-A, --addremove",
                    "content": "mark new/missing files as added/removed before committing\n",
                    "flag": "-A",
                    "long": "--addremove"
                },
                {
                    "name": "--close-branch",
                    "content": "mark a branch head as closed\n",
                    "long": "--close-branch"
                },
                {
                    "name": "--amend",
                    "content": "amend the parent of the working directory\n",
                    "long": "--amend"
                },
                {
                    "name": "-s, --secret",
                    "content": "use the secret phase for committing\n",
                    "flag": "-s",
                    "long": "--secret"
                },
                {
                    "name": "--draft",
                    "content": "use the draft phase for committing\n",
                    "long": "--draft"
                },
                {
                    "name": "-e, --edit",
                    "content": "invoke editor on commit messages\n",
                    "flag": "-e",
                    "long": "--edit"
                },
                {
                    "name": "--force-close-branch",
                    "content": "forcibly close branch from a non-head changeset (ADVANCED)\n",
                    "long": "--force-close-branch"
                },
                {
                    "name": "-i, --interactive",
                    "content": "use interactive mode\n",
                    "flag": "-i",
                    "long": "--interactive"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-m,_",
                    "content": "use text as commit message\n"
                },
                {
                    "name": "-l,_",
                    "content": "read commit message from file\n"
                },
                {
                    "name": "-d,_",
                    "content": "record the specified date as commit date\n"
                },
                {
                    "name": "-u,_",
                    "content": "record the specified user as committer\n"
                },
                {
                    "name": "-S, --subrepos",
                    "content": "recurse into subrepositories\n\n[+] marked option can be specified multiple times\n\naliases: ci\n",
                    "flag": "-S",
                    "long": "--subrepos"
                },
                {
                    "name": "Change manipulation",
                    "content": ""
                },
                {
                    "name": "abort",
                    "content": "abort an unfinished operation (EXPERIMENTAL):\n\nhg abort\n\nAborts a multistep operation like graft, histedit, rebase, merge, and unshelve if they are in\nan unfinished state.\n\nuse --dry-run/-n to dry run the command.\n\nOptions:\n"
                },
                {
                    "name": "-n, --dry-run",
                    "content": "do not perform actions, just print output\n",
                    "flag": "-n",
                    "long": "--dry-run"
                },
                {
                    "name": "backout",
                    "content": "reverse effect of earlier changeset:\n\nhg backout [OPTION]... [-r] REV\n\nPrepare a new changeset with the effect of REV undone in the current working directory. If no\nconflicts were encountered, it will be committed immediately.\n\nIf REV is the parent of the working directory, then this new changeset is committed automati‐\ncally (unless --no-commit is specified).\n\nNote   hg backout cannot be used to fix either an unwanted or incorrect merge.\n\nExamples:\n\n• Reverse the effect of the parent of the working directory.  This backout will be  committed\nimmediately:\n\nhg backout -r .\n\n• Reverse the effect of previous bad revision 23:\n\nhg backout -r 23\n\n• Reverse the effect of previous bad revision 23 and leave changes uncommitted:\n\nhg backout -r 23 --no-commit\nhg commit -m \"Backout revision 23\"\n\nBy  default,  the  pending changeset will have one parent, maintaining a linear history. With\n--merge, the pending changeset will instead have two parents: the old parent of  the  working\ndirectory and a new child of REV that simply undoes REV.\n\nBefore  version  1.7,  the behavior without --merge was equivalent to specifying --merge fol‐\nlowed by hg update --clean . to cancel the merge and leave the child of REV as a head  to  be\nmerged separately.\n\nSee hg help dates for a list of formats valid for -d/--date.\n\nSee hg help revert for a way to restore files to the state of another revision.\n\nReturns 0 on success, 1 if nothing to backout or there are unresolved files.\n\nOptions:\n"
                },
                {
                    "name": "--merge",
                    "content": "merge with old dirstate parent after backout\n",
                    "long": "--merge"
                },
                {
                    "name": "--commit",
                    "content": "commit if no conflicts were encountered (DEPRECATED)\n",
                    "long": "--commit"
                },
                {
                    "name": "--no-commit",
                    "content": "do not commit\n\n--parent <REV>\nparent to choose when backing out merge (DEPRECATED)\n",
                    "long": "--no-commit"
                },
                {
                    "name": "-r,_",
                    "content": "revision to backout\n"
                },
                {
                    "name": "-e, --edit",
                    "content": "invoke editor on commit messages\n",
                    "flag": "-e",
                    "long": "--edit"
                },
                {
                    "name": "-t,_",
                    "content": "specify merge tool\n"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-m,_",
                    "content": "use text as commit message\n"
                },
                {
                    "name": "-l,_",
                    "content": "read commit message from file\n"
                },
                {
                    "name": "-d,_",
                    "content": "record the specified date as commit date\n"
                },
                {
                    "name": "-u,_",
                    "content": "record the specified user as committer\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "continue",
                    "content": "resumes an interrupted operation (EXPERIMENTAL):\n\nhg continue\n\nFinishes  a multistep operation like graft, histedit, rebase, merge, and unshelve if they are\nin an interrupted state.\n\nuse --dry-run/-n to dry run the command.\n\nOptions:\n"
                },
                {
                    "name": "-n, --dry-run",
                    "content": "do not perform actions, just print output\n",
                    "flag": "-n",
                    "long": "--dry-run"
                },
                {
                    "name": "graft",
                    "content": "copy changes from other branches onto the current branch:\n\nhg graft [OPTION]... [-r REV]... REV...\n\nThis command uses Mercurial's merge logic to copy  individual  changes  from  other  branches\nwithout  merging  branches  in the history graph. This is sometimes known as 'backporting' or\n'cherry-picking'. By default, graft will copy user, date, and  description  from  the  source\nchangesets.\n\nChangesets  that  are  ancestors  of the current revision, that have already been grafted, or\nthat are merges will be skipped.\n\nIf --log is specified, log messages will have a comment appended of the form:\n\n(grafted from CHANGESETHASH)\n\nIf --force is specified, revisions will be grafted even if they are already ancestors of,  or\nhave  been  grafted  to,  the destination.  This is useful when the revisions have since been\nbacked out.\n\nIf a graft merge results in conflicts, the graft process is interrupted so that  the  current\nmerge  can  be manually resolved.  Once all conflicts are addressed, the graft process can be\ncontinued with the -c/--continue option.\n\nThe -c/--continue option reapplies all the earlier options.\n\nThe --base option exposes more of how graft internally uses merge with a  custom  base  revi‐\nsion. --base can be used to specify another ancestor than the first and only parent.\n\nThe command:\n\nhg graft -r 345 --base 234\n\nis thus pretty much the same as:\n\nhg diff --from 234 --to 345 | hg import\n\nbut using merge to resolve conflicts and track moved files.\n\nThe  result  of  a  merge  can thus be backported as a single commit by specifying one of the\nmerge parents as base, and thus effectively grafting the changes from the other side.\n\nIt is also possible to collapse multiple changesets and clean up history  by  specifying  an‐\nother ancestor as base, much like rebase --collapse --keep.\n\nThe commit message can be tweaked after the fact using commit --amend .\n\nFor  using non-ancestors as the base to backout changes, see the backout command and the hid‐\nden --parent option.\n\nExamples:\n\n• copy a single change to the stable branch and edit its description:\n\nhg update stable\nhg graft --edit 9393\n\n• graft a range of changesets with one exception, updating dates:\n\nhg graft -D \"2085::2093 and not 2091\"\n\n• continue a graft after resolving conflicts:\n\nhg graft -c\n\n• show the source of a grafted changeset:\n\nhg log --debug -r .\n\n• show revisions sorted by date:\n\nhg log -r \"sort(all(), date)\"\n\n• backport the result of a merge as a single commit:\n\nhg graft -r 123 --base 123^\n\n• land a feature branch as one changeset:\n\nhg up -cr default\nhg graft -r featureX --base \"ancestor('featureX', 'default')\"\n\nSee hg help revisions for more about specifying revisions.\n\nReturns 0 on successful completion, 1 if there are unresolved files.\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "revisions to graft\n\n--base <REV>\nbase revision when doing the graft merge (ADVANCED)\n"
                },
                {
                    "name": "-c, --continue",
                    "content": "resume interrupted graft\n\n--stop stop interrupted graft\n",
                    "flag": "-c",
                    "long": "--continue"
                },
                {
                    "name": "--abort",
                    "content": "abort interrupted graft\n",
                    "long": "--abort"
                },
                {
                    "name": "-e, --edit",
                    "content": "invoke editor on commit messages\n\n--log  append graft info to log message\n",
                    "flag": "-e",
                    "long": "--edit"
                },
                {
                    "name": "--no-commit",
                    "content": "don't commit, just apply the changes in working directory\n",
                    "long": "--no-commit"
                },
                {
                    "name": "-f, --force",
                    "content": "force graft\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-D, --currentdate",
                    "content": "record the current date as commit date\n",
                    "flag": "-D",
                    "long": "--currentdate"
                },
                {
                    "name": "-U, --currentuser",
                    "content": "record the current user as committer\n",
                    "flag": "-U",
                    "long": "--currentuser"
                },
                {
                    "name": "-d,_",
                    "content": "record the specified date as commit date\n"
                },
                {
                    "name": "-u,_",
                    "content": "record the specified user as committer\n"
                },
                {
                    "name": "-t,_",
                    "content": "specify merge tool\n"
                },
                {
                    "name": "-n, --dry-run",
                    "content": "do not perform actions, just print output\n\n[+] marked option can be specified multiple times\n",
                    "flag": "-n",
                    "long": "--dry-run"
                },
                {
                    "name": "merge",
                    "content": "merge another revision into working directory:\n\nhg merge [-P] [[-r] REV]\n\nThe current working directory is updated with all changes  made  in  the  requested  revision\nsince the last common predecessor revision.\n\nFiles that changed between either parent are marked as changed for the next commit and a com‐\nmit must be performed before any further updates to the repository are allowed. The next com‐\nmit will have two parents.\n\n--tool  can  be used to specify the merge tool used for file merges. It overrides the HGMERGE\nenvironment variable and your configuration files. See hg help merge-tools for options.\n\nIf no revision is specified, the working directory's parent is a head revision, and the  cur‐\nrent branch contains exactly one other head, the other head is merged with by default. Other‐\nwise, an explicit revision with which to merge must be provided.\n\nSee hg help resolve for information on handling file conflicts.\n\nTo  undo  an uncommitted merge, use hg merge --abort which will check out a clean copy of the\noriginal merge parent, losing all changes.\n\nReturns 0 on success, 1 if there are unresolved files.\n\nOptions:\n"
                },
                {
                    "name": "-f, --force",
                    "content": "force a merge including outstanding changes (DEPRECATED)\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-r,_",
                    "content": "revision to merge\n"
                },
                {
                    "name": "-P, --preview",
                    "content": "review revisions to merge (no merge is performed)\n",
                    "flag": "-P",
                    "long": "--preview"
                },
                {
                    "name": "--abort",
                    "content": "abort the ongoing merge\n",
                    "long": "--abort"
                },
                {
                    "name": "-t,_",
                    "content": "specify merge tool\n"
                },
                {
                    "name": "Change organization",
                    "content": ""
                },
                {
                    "name": "bookmarks",
                    "content": "create a new bookmark or list existing bookmarks:\n\nhg bookmarks [OPTIONS]... [NAME]...\n\nBookmarks are labels on changesets to help track lines of development.  Bookmarks are  unver‐\nsioned and can be moved, renamed and deleted.  Deleting or moving a bookmark has no effect on\nthe associated changesets.\n\nCreating  or  updating to a bookmark causes it to be marked as 'active'.  The active bookmark\nis indicated with a '*'.  When a commit is made, the active bookmark will advance to the  new\ncommit.   A plain hg update will also advance an active bookmark, if possible.  Updating away\nfrom a bookmark will cause it to be deactivated.\n\nBookmarks can be pushed and pulled between repositories (see hg help push and hg help  pull).\nIf a shared bookmark has diverged, a new 'divergent bookmark' of the form 'name@path' will be\ncreated. Using hg merge will resolve the divergence.\n\nSpecifying  bookmark  as '.' to -m/-d/-l options is equivalent to specifying the active book‐\nmark's name.\n\nA bookmark named '@' has the special property that hg clone will check it out by  default  if\nit exists.\n\nTemplate:\n\nThe  following  keywords  are supported in addition to the common template keywords and func‐\ntions such as {bookmark}. See also hg help templates.\n\nactive Boolean. True if the bookmark is active.\n\nExamples:\n\n• create an active bookmark for a new line of development:\n\nhg book new-feature\n\n• create an inactive bookmark as a place marker:\n\nhg book -i reviewed\n\n• create an inactive bookmark on another changeset:\n\nhg book -r .^ tested\n\n• rename bookmark turkey to dinner:\n\nhg book -m turkey dinner\n\n• move the '@' bookmark from another branch:\n\nhg book -f @\n\n• print only the active bookmark name:\n\nhg book -ql .\n\nOptions:\n"
                },
                {
                    "name": "-f, --force",
                    "content": "force\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-r,_",
                    "content": "revision for bookmark action\n"
                },
                {
                    "name": "-d, --delete",
                    "content": "delete a given bookmark\n",
                    "flag": "-d",
                    "long": "--delete"
                },
                {
                    "name": "-m,_",
                    "content": "rename a given bookmark\n"
                },
                {
                    "name": "-i, --inactive",
                    "content": "mark a bookmark inactive\n",
                    "flag": "-i",
                    "long": "--inactive"
                },
                {
                    "name": "-l, --list",
                    "content": "list existing bookmarks\n",
                    "flag": "-l",
                    "long": "--list"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n\naliases: bookmark\n"
                },
                {
                    "name": "branch",
                    "content": "set or show the current branch name:\n\nhg branch [-fC] [NAME]\n\nNote   Branch names are permanent and global. Use hg bookmark to create a light-weight  book‐\nmark instead. See hg help glossary for more information about named branches and book‐\nmarks.\n\nWith  no argument, show the current branch name. With one argument, set the working directory\nbranch name (the branch will not exist in the repository until  the  next  commit).  Standard\npractice recommends that primary development take place on the 'default' branch.\n\nUnless  -f/--force  is  specified, branch will not let you set a branch name that already ex‐\nists.\n\nUse -C/--clean to reset the working directory branch to that of the parent of the working di‐\nrectory, negating a previous branch change.\n\nUse the command hg update to switch to an existing branch. Use  hg  commit  --close-branch to\nmark  this  branch head as closed.  When all heads of a branch are closed, the branch will be\nconsidered closed.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-f, --force",
                    "content": "set branch name even if it shadows an existing branch\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-C, --clean",
                    "content": "reset branch name to parent branch name\n",
                    "flag": "-C",
                    "long": "--clean"
                },
                {
                    "name": "-r,_",
                    "content": "change branches of the given revs (EXPERIMENTAL)\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "branches",
                    "content": "list repository named branches:\n\nhg branches [-c]\n\nList the repository's named branches, indicating which ones are inactive. If  -c/--closed  is\nspecified, also list branches which have been marked closed (see hg commit --close-branch).\n\nUse the command hg update to switch to an existing branch.\n\nTemplate:\n\nThe  following  keywords  are supported in addition to the common template keywords and func‐\ntions such as {branch}. See also hg help templates.\n\nactive Boolean. True if the branch is active.\n\nclosed Boolean. True if the branch is closed.\n"
                },
                {
                    "name": "current",
                    "content": "Boolean. True if it is the current branch.\n\nReturns 0.\n\nOptions:\n"
                },
                {
                    "name": "-a, --active",
                    "content": "show only branches that have unmerged heads (DEPRECATED)\n",
                    "flag": "-a",
                    "long": "--active"
                },
                {
                    "name": "-c, --closed",
                    "content": "show normal and closed branches\n",
                    "flag": "-c",
                    "long": "--closed"
                },
                {
                    "name": "-r,_",
                    "content": "show branch name(s) of the given rev\n"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "phase",
                    "content": "set or show the current phase name:\n\nhg phase [-p|-d|-s] [-f] [-r] [REV...]\n\nWith no argument, show the phase name of the current revision(s).\n\nWith one of -p/--public, -d/--draft or -s/--secret, change the phase value of  the  specified\nrevisions.\n\nUnless -f/--force is specified, hg phase won't move changesets from a lower phase to a higher\nphase. Phases are ordered as follows:\n\npublic < draft < secret\n\nReturns 0 on success, 1 if some phases could not be changed.\n\n(For more information about the phases concept, see hg help phases.)\n\nOptions:\n"
                },
                {
                    "name": "-p, --public",
                    "content": "set changeset phase to public\n",
                    "flag": "-p",
                    "long": "--public"
                },
                {
                    "name": "-d, --draft",
                    "content": "set changeset phase to draft\n",
                    "flag": "-d",
                    "long": "--draft"
                },
                {
                    "name": "-s, --secret",
                    "content": "set changeset phase to secret\n",
                    "flag": "-s",
                    "long": "--secret"
                },
                {
                    "name": "-f, --force",
                    "content": "allow to move boundary backward\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-r,_",
                    "content": "target revision\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "tag",
                    "content": "add one or more tags for the current or given revision:\n\nhg tag [-f] [-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME...\n\nName a particular revision using <name>.\n\nTags  are  used to name particular revisions of the repository and are very useful to compare\ndifferent revisions, to go back to significant earlier versions or to mark branch  points  as\nreleases, etc. Changing an existing tag is normally disallowed; use -f/--force to override.\n\nIf no revision is given, the parent of the working directory is used.\n\nTo  facilitate  version control, distribution, and merging of tags, they are stored as a file\nnamed \".hgtags\" which is managed similarly to other project files and can be  hand-edited  if\nnecessary.  This  also  means  that tagging creates a new commit. The file \".hg/localtags\" is\nused for local tags (not shared among repositories).\n\nTag commits are usually made at the head of a branch. If the parent of the working  directory\nis  not a branch head, hg tag aborts; use -f/--force to force the tag commit to be based on a\nnon-head changeset.\n\nSee hg help dates for a list of formats valid for -d/--date.\n\nSince tag names have priority over branch names during revision  lookup,  using  an  existing\nbranch name as a tag name is discouraged.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-f, --force",
                    "content": "force tag\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-l, --local",
                    "content": "make the tag local\n",
                    "flag": "-l",
                    "long": "--local"
                },
                {
                    "name": "-r,_",
                    "content": "revision to tag\n"
                },
                {
                    "name": "--remove",
                    "content": "remove a tag\n",
                    "long": "--remove"
                },
                {
                    "name": "-e, --edit",
                    "content": "invoke editor on commit messages\n",
                    "flag": "-e",
                    "long": "--edit"
                },
                {
                    "name": "-m,_",
                    "content": "use text as commit message\n"
                },
                {
                    "name": "-d,_",
                    "content": "record the specified date as commit date\n"
                },
                {
                    "name": "-u,_",
                    "content": "record the specified user as committer\n"
                },
                {
                    "name": "tags",
                    "content": "list repository tags:\n\nhg tags\n\nThis  lists both regular and local tags. When the -v/--verbose switch is used, a third column\n\"local\" is printed for local tags.  When the -q/--quiet switch is used, only the tag name  is\nprinted.\n\nTemplate:\n\nThe  following  keywords  are supported in addition to the common template keywords and func‐\ntions such as {tag}. See also hg help templates.\n\ntype   String. local for local tags.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "File content management",
                    "content": ""
                },
                {
                    "name": "annotate",
                    "content": "show changeset information by line for each file:\n\nhg annotate [-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...\n\nList changes in files, showing the revision id responsible for each line.\n\nThis command is useful for discovering when a change was made and by whom.\n\nIf you include --file, --user, or --date, the revision number is suppressed unless  you  also\ninclude --number.\n\nWithout the -a/--text option, annotate will avoid processing files it detects as binary. With\n-a,  annotate  will  annotate  the file anyway, although the results will probably be neither\nuseful nor desirable.\n\nUse -L/--line-range FILE,M:N options to filter the output to the lines from M to N  in  FILE.\nThis  option  is incompatible with --no-follow and cannot be combined with file pattern argu‐\nments. When combined with --rev the line ranges refer to the state of the  file  at  the  re‐\nquested revision.\n\nTemplate:\n\nThe  following  keywords  are supported in addition to the common template keywords and func‐\ntions. See also hg help templates.\n\nlines  List of lines with annotation data.\n\npath   String. Repository-absolute path of the specified file.\n\nAnd each entry of {lines} provides the following sub-keywords in addition to {date},  {node},\n{rev}, {user}, etc.\n\nline   String. Line content.\n\nlineno Integer. Line number at that revision.\n\npath   String. Repository-absolute path of the file at that revision.\n\nSee hg help templates.operators for the list expansion syntax.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "annotate the specified revision\n"
                },
                {
                    "name": "--follow",
                    "content": "follow copies/renames and list the filename (DEPRECATED)\n",
                    "long": "--follow"
                },
                {
                    "name": "--no-follow",
                    "content": "don't follow copies and renames\n",
                    "long": "--no-follow"
                },
                {
                    "name": "-a, --text",
                    "content": "treat all files as text\n",
                    "flag": "-a",
                    "long": "--text"
                },
                {
                    "name": "-u, --user",
                    "content": "list the author (long with -v)\n",
                    "flag": "-u",
                    "long": "--user"
                },
                {
                    "name": "-f, --file",
                    "content": "list the filename\n",
                    "flag": "-f",
                    "long": "--file"
                },
                {
                    "name": "-d, --date",
                    "content": "list the date (short with -q)\n",
                    "flag": "-d",
                    "long": "--date"
                },
                {
                    "name": "-n, --number",
                    "content": "list the revision number (default)\n",
                    "flag": "-n",
                    "long": "--number"
                },
                {
                    "name": "-c, --changeset",
                    "content": "list the changeset\n",
                    "flag": "-c",
                    "long": "--changeset"
                },
                {
                    "name": "-l, --line-number",
                    "content": "show line number at the first appearance\n\n--skip <REV[+]>\nrevset to not display (EXPERIMENTAL)\n",
                    "flag": "-l",
                    "long": "--line-number"
                },
                {
                    "name": "-L,_",
                    "content": "follow line range of specified file (EXPERIMENTAL)\n"
                },
                {
                    "name": "-w, --ignore-all-space",
                    "content": "ignore white space when comparing lines\n",
                    "flag": "-w",
                    "long": "--ignore-all-space"
                },
                {
                    "name": "-b, --ignore-space-change",
                    "content": "ignore changes in the amount of white space\n",
                    "flag": "-b",
                    "long": "--ignore-space-change"
                },
                {
                    "name": "-B, --ignore-blank-lines",
                    "content": "ignore changes whose lines are all blank\n",
                    "flag": "-B",
                    "long": "--ignore-blank-lines"
                },
                {
                    "name": "-Z, --ignore-space-at-eol",
                    "content": "ignore changes in whitespace at EOL\n",
                    "flag": "-Z",
                    "long": "--ignore-space-at-eol"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n\n[+] marked option can be specified multiple times\n\naliases: blame\n"
                },
                {
                    "name": "cat",
                    "content": "output the current or given revision of files:\n\nhg cat [OPTION]... FILE...\n\nPrint  the  specified  files as they were at the given revision. If no revision is given, the\nparent of the working directory is used.\n\nOutput may be to a file, in which case the name of the file is given using a template string.\nSee hg help templates. In addition to the common template keywords, the following  formatting\nrules are supported:\n\n%%\n\nliteral \"%\" character\n\n%s\n\nbasename of file being printed\n\n%d\n\ndirname of file being printed, or '.' if in repository root\n\n%p\n\nroot-relative path name of file being printed\n\n%H\n\nchangeset hash (40 hexadecimal digits)\n\n%R\n\nchangeset revision number\n\n%h\n\nshort-form changeset hash (12 hexadecimal digits)\n\n%r\n\nzero-padded changeset revision number\n\n%b\n\nbasename of the exporting repository\n\n\\\n\nliteral \"\" character\n\nTemplate:\n\nThe  following  keywords  are supported in addition to the common template keywords and func‐\ntions. See also hg help templates.\n\ndata   String. File content.\n\npath   String. Repository-absolute path of the file.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-o,_",
                    "content": "print output to file with formatted name\n"
                },
                {
                    "name": "-r,_",
                    "content": "print the given revision\n"
                },
                {
                    "name": "--decode",
                    "content": "apply any matching decode filter\n",
                    "long": "--decode"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "copy",
                    "content": "mark files as copied for the next commit:\n\nhg copy [OPTION]... (SOURCE... DEST | --forget DEST...)\n\nMark dest as having copies of source files. If dest is a directory, copies are  put  in  that\ndirectory. If dest is a file, the source must be a single file.\n\nBy default, this command copies the contents of files as they exist in the working directory.\nIf invoked with -A/--after, the operation is recorded, but no copying is performed.\n\nTo  undo marking a destination file as copied, use --forget. With that option, all given (po‐\nsitional) arguments are unmarked as copies. The destination file(s) will  be  left  in  place\n(still tracked). Note that hg copy --forget behaves the same way as hg rename --forget.\n\nThis command takes effect with the next commit by default.\n\nReturns 0 on success, 1 if errors are encountered.\n\nOptions:\n"
                },
                {
                    "name": "--forget",
                    "content": "unmark a destination file as copied\n",
                    "long": "--forget"
                },
                {
                    "name": "-A, --after",
                    "content": "record a copy that has already occurred\n\n--at-rev <REV>\n(un)mark copies in the given revision (EXPERIMENTAL)\n",
                    "flag": "-A",
                    "long": "--after"
                },
                {
                    "name": "-f, --force",
                    "content": "forcibly copy over an existing managed file\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-n, --dry-run",
                    "content": "do not perform actions, just print output\n\n[+] marked option can be specified multiple times\n\naliases: cp\n",
                    "flag": "-n",
                    "long": "--dry-run"
                },
                {
                    "name": "diff",
                    "content": "diff repository (or selected files):\n\nhg diff [OPTION]... ([-c REV] | [--from REV1] [--to REV2]) [FILE]...\n\nShow differences between revisions for the specified files.\n\nDifferences between files are shown using the unified diff format.\n\nNote   hg  diff may  generate  unexpected results for merges, as it will default to comparing\nagainst the working directory's first parent changeset if no revisions are  specified.\nTo diff against the conflict regions, you can use --config diff.merge=yes.\n\nBy  default, the working directory files are compared to its first parent. To see the differ‐\nences from another revision, use --from. To see the difference to another revision, use --to.\nFor example, hg diff --from .^ will show the differences from the working copy's  grandparent\nto  the  working  copy, hg diff --to . will show the diff from the working copy to its parent\n(i.e. the reverse of the default), and hg diff --from 1.0 --to 1.2 will show the diff between\nthose two revisions.\n\nAlternatively you can specify -c/--change with a revision to see the changes in that  change‐\nset relative to its first parent (i.e. hg diff -c 42 is equivalent to hg diff --from 42^ --to\n42)\n\nWithout the -a/--text option, diff will avoid generating diffs of files it detects as binary.\nWith -a, diff will generate a diff anyway, probably with undesirable results.\n\nUse  the -g/--git option to generate diffs in the git extended diff format. For more informa‐\ntion, read hg help diffs.\n\nExamples:\n\n• compare a file in the current working directory to its parent:\n\nhg diff foo.c\n\n• compare two historical versions of a directory, with rename info:\n\nhg diff --git --from 1.0 --to 1.2 lib/\n\n• get change stats relative to the last change on some date:\n\nhg diff --stat --from \"date('may 2')\"\n\n• diff all newly-added files that contain a keyword:\n\nhg diff \"set:added() and grep(GNU)\"\n\n• compare a revision and its parents:\n\nhg diff -c 9353                  # compare against first parent\nhg diff --from 9353^ --to 9353   # same using revset syntax\nhg diff --from 9353^2 --to 9353  # compare against the second parent\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "revision (DEPRECATED)\n\n--from <REV1>\nrevision to diff from\n\n--to <REV2>\nrevision to diff to\n"
                },
                {
                    "name": "-c,_",
                    "content": "change made by revision\n"
                },
                {
                    "name": "-a, --text",
                    "content": "treat all files as text\n",
                    "flag": "-a",
                    "long": "--text"
                },
                {
                    "name": "-g, --git",
                    "content": "use git extended diff format (DEFAULT: diff.git)\n",
                    "flag": "-g",
                    "long": "--git"
                },
                {
                    "name": "--binary",
                    "content": "generate binary diffs in git mode (default)\n",
                    "long": "--binary"
                },
                {
                    "name": "--nodates",
                    "content": "omit dates from diff headers\n",
                    "long": "--nodates"
                },
                {
                    "name": "--noprefix",
                    "content": "omit a/ and b/ prefixes from filenames\n",
                    "long": "--noprefix"
                },
                {
                    "name": "-p, --show-function",
                    "content": "show which function each change is in (DEFAULT: diff.showfunc)\n",
                    "flag": "-p",
                    "long": "--show-function"
                },
                {
                    "name": "--reverse",
                    "content": "produce a diff that undoes the changes\n",
                    "long": "--reverse"
                },
                {
                    "name": "-w, --ignore-all-space",
                    "content": "ignore white space when comparing lines\n",
                    "flag": "-w",
                    "long": "--ignore-all-space"
                },
                {
                    "name": "-b, --ignore-space-change",
                    "content": "ignore changes in the amount of white space\n",
                    "flag": "-b",
                    "long": "--ignore-space-change"
                },
                {
                    "name": "-B, --ignore-blank-lines",
                    "content": "ignore changes whose lines are all blank\n",
                    "flag": "-B",
                    "long": "--ignore-blank-lines"
                },
                {
                    "name": "-Z, --ignore-space-at-eol",
                    "content": "ignore changes in whitespace at EOL\n",
                    "flag": "-Z",
                    "long": "--ignore-space-at-eol"
                },
                {
                    "name": "-U,_",
                    "content": "number of lines of context to show\n\n--stat output diffstat-style summary of changes\n\n--root <DIR>\nproduce diffs relative to subdirectory\n"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-S, --subrepos",
                    "content": "recurse into subrepositories\n\n[+] marked option can be specified multiple times\n",
                    "flag": "-S",
                    "long": "--subrepos"
                },
                {
                    "name": "grep",
                    "content": "search for a pattern in specified files:\n\nhg grep [--diff] [OPTION]... PATTERN [FILE]...\n\nSearch the working directory or revision history for a regular expression  in  the  specified\nfiles for the entire repository.\n\nBy  default, grep searches the repository files in the working directory and prints the files\nwhere it finds a match. To specify historical revisions instead of the working directory, use\nthe --rev flag.\n\nTo search instead historical revision differences that contains a change in match status (\"-\"\nfor a match that becomes a non-match, or \"+\" for a non-match that becomes a match),  use  the\n--diff flag.\n\nPATTERN can be any Python (roughly Perl-compatible) regular expression.\n\nIf  no FILEs are specified and the --rev flag isn't supplied, all files in the working direc‐\ntory are searched. When using the --rev flag and specifying FILEs, use the --follow  argument\nto also follow the specified FILEs across renames and copies.\n\nTemplate:\n\nThe  following  keywords  are supported in addition to the common template keywords and func‐\ntions. See also hg help templates.\n\nchange String. Character denoting insertion + or removal -.  Available if  --diff  is  speci‐\nfied.\n\nlineno Integer. Line number of the match.\n\npath   String. Repository-absolute path of the file.\n\ntexts  List of text chunks.\n\nAnd each entry of {texts} provides the following sub-keywords.\n"
                },
                {
                    "name": "matched",
                    "content": "Boolean. True if the chunk matches the specified pattern.\n\ntext   String. Chunk content.\n\nSee hg help templates.operators for the list expansion syntax.\n\nReturns 0 if a match is found, 1 otherwise.\n\nOptions:\n"
                },
                {
                    "name": "-0, --print0",
                    "content": "end fields with NUL\n\n--all  an alias to --diff (DEPRECATED)\n\n--diff search revision differences for when the pattern was added or removed\n",
                    "flag": "-0",
                    "long": "--print0"
                },
                {
                    "name": "-a, --text",
                    "content": "treat all files as text\n",
                    "flag": "-a",
                    "long": "--text"
                },
                {
                    "name": "-f, --follow",
                    "content": "follow changeset history, or file history across copies and renames\n",
                    "flag": "-f",
                    "long": "--follow"
                },
                {
                    "name": "-i, --ignore-case",
                    "content": "ignore case when matching\n",
                    "flag": "-i",
                    "long": "--ignore-case"
                },
                {
                    "name": "-l, --files-with-matches",
                    "content": "print only filenames and revisions that match\n",
                    "flag": "-l",
                    "long": "--files-with-matches"
                },
                {
                    "name": "-n, --line-number",
                    "content": "print matching line numbers\n",
                    "flag": "-n",
                    "long": "--line-number"
                },
                {
                    "name": "-r,_",
                    "content": "search files changed within revision range\n"
                },
                {
                    "name": "--all-files",
                    "content": "include all files in the changeset while grepping (DEPRECATED)\n",
                    "long": "--all-files"
                },
                {
                    "name": "-u, --user",
                    "content": "list the author (long with -v)\n",
                    "flag": "-u",
                    "long": "--user"
                },
                {
                    "name": "-d, --date",
                    "content": "list the date (short with -q)\n",
                    "flag": "-d",
                    "long": "--date"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "Change navigation",
                    "content": ""
                },
                {
                    "name": "bisect",
                    "content": "subdivision search of changesets:\n\nhg bisect [-gbsr] [-U] [-c CMD] [REV]\n\nThis  command  helps  to  find changesets which introduce problems. To use, mark the earliest\nchangeset you know exhibits the problem as bad, then mark the latest changeset which is  free\nfrom the problem as good. Bisect will update your working directory to a revision for testing\n(unless the -U/--noupdate option is specified). Once you have performed tests, mark the work‐\ning directory as good or bad, and bisect will either update to another candidate changeset or\nannounce that it has found the bad revision.\n\nAs a shortcut, you can also use the revision argument to mark a revision as good or bad with‐\nout checking it out first.\n\nIf  you  supply a command, it will be used for automatic bisection.  The environment variable\nHGNODE will contain the ID of the changeset being tested. The exit  status  of  the  command\nwill be used to mark revisions as good or bad: status 0 means good, 125 means to skip the re‐\nvision,  127 (command not found) will abort the bisection, and any other non-zero exit status\nmeans the revision is bad.\n\nSome examples:\n\n• start a bisection with known bad revision 34, and good revision 12:\n\nhg bisect --bad 34\nhg bisect --good 12\n\n• advance the current bisection by marking current revision as good or bad:\n\nhg bisect --good\nhg bisect --bad\n\n• mark the current revision, or a known revision, to be skipped (e.g. if that revision is not\nusable because of another issue):\n\nhg bisect --skip\nhg bisect --skip 23\n\n• skip all revisions that do not touch directories foo or bar:\n\nhg bisect --skip \"!( file('path:foo') & file('path:bar') )\"\n\n• forget the current bisection:\n\nhg bisect --reset\n\n• use 'make && make tests' to automatically find the first broken revision:\n\nhg bisect --reset\nhg bisect --bad 34\nhg bisect --good 12\nhg bisect --command \"make && make tests\"\n\n• see all changesets whose states are already known in the current bisection:\n\nhg log -r \"bisect(pruned)\"\n\n• see the changeset currently being bisected (especially useful if  running  with  -U/--noup‐\ndate):\n\nhg log -r \"bisect(current)\"\n\n• see all changesets that took part in the current bisection:\n\nhg log -r \"bisect(range)\"\n\n• you can even get a nice graph:\n\nhg log --graph -r \"bisect(range)\"\n\nSee hg help revisions.bisect for more about the bisect() predicate.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-r, --reset",
                    "content": "reset bisect state\n",
                    "flag": "-r",
                    "long": "--reset"
                },
                {
                    "name": "-g, --good",
                    "content": "mark changeset good\n",
                    "flag": "-g",
                    "long": "--good"
                },
                {
                    "name": "-b, --bad",
                    "content": "mark changeset bad\n",
                    "flag": "-b",
                    "long": "--bad"
                },
                {
                    "name": "-s, --skip",
                    "content": "skip testing changeset\n",
                    "flag": "-s",
                    "long": "--skip"
                },
                {
                    "name": "-e, --extend",
                    "content": "extend the bisect range\n",
                    "flag": "-e",
                    "long": "--extend"
                },
                {
                    "name": "-c,_",
                    "content": "use command to check changeset state\n"
                },
                {
                    "name": "-U, --noupdate",
                    "content": "do not update to target\n",
                    "flag": "-U",
                    "long": "--noupdate"
                },
                {
                    "name": "heads",
                    "content": "show branch heads:\n\nhg heads [-ct] [-r STARTREV] [REV]...\n\nWith no arguments, show all open branch heads in the repository.  Branch heads are changesets\nthat have no descendants on the same branch. They are where development generally takes place\nand are the usual targets for update and merge operations.\n\nIf  one  or  more  REVs are given, only open branch heads on the branches associated with the\nspecified changesets are shown. This means that you can use hg heads . to see  the  heads  on\nthe currently checked-out branch.\n\nIf   -c/--closed  is  specified,  also  show  branch  heads  marked  closed  (see  hg  commit\n--close-branch).\n\nIf STARTREV is specified, only those heads that are descendants  of  STARTREV  will  be  dis‐\nplayed.\n\nIf  -t/--topo is specified, named branch mechanics will be ignored and only topological heads\n(changesets with no children) will be shown.\n\nReturns 0 if matching heads are found, 1 if not.\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "show only heads which are descendants of STARTREV\n"
                },
                {
                    "name": "-t, --topo",
                    "content": "show topological heads only\n",
                    "flag": "-t",
                    "long": "--topo"
                },
                {
                    "name": "-a, --active",
                    "content": "show active branchheads only (DEPRECATED)\n",
                    "flag": "-a",
                    "long": "--active"
                },
                {
                    "name": "-c, --closed",
                    "content": "show normal and closed branch heads\n\n--style <STYLE>\ndisplay using template map file (DEPRECATED)\n",
                    "flag": "-c",
                    "long": "--closed"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "identify",
                    "content": "identify the working directory or specified revision:\n\nhg identify [-nibtB] [-r REV] [SOURCE]\n\nPrint a summary identifying the repository state at REV using one or two parent hash  identi‐\nfiers,  followed  by  a \"+\" if the working directory has uncommitted changes, the branch name\n(if not default), a list of tags, and a list of bookmarks.\n\nWhen REV is not given, print a summary of the current state of the repository  including  the\nworking  directory.  Specify  -r.  to get information of the working directory parent without\nscanning uncommitted changes.\n\nSpecifying a path to a repository root or Mercurial bundle will cause lookup  to  operate  on\nthat repository/bundle.\n\nTemplate:\n\nThe  following  keywords  are supported in addition to the common template keywords and func‐\ntions. See also hg help templates.\n\ndirty  String. Character + denoting if the working directory has uncommitted changes.\n\nid     String. One or two nodes, optionally followed by +.\n"
                },
                {
                    "name": "parents",
                    "content": "List of strings. Parent nodes of the changeset.\n\nExamples:\n\n• generate a build identifier for the working directory:\n\nhg id --id > build-id.dat\n\n• find the revision corresponding to a tag:\n\nhg id -n -r 1.3\n\n• check the most recent revision of a remote repository:\n\nhg id -r tip https://www.mercurial-scm.org/repo/hg/\n\nSee hg log for generating more information about  specific  revisions,  including  full  hash\nidentifiers.\n\nReturns 0 if successful.\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "identify the specified revision\n"
                },
                {
                    "name": "-n, --num",
                    "content": "show local revision number\n",
                    "flag": "-n",
                    "long": "--num"
                },
                {
                    "name": "-i, --id",
                    "content": "show global revision id\n",
                    "flag": "-i",
                    "long": "--id"
                },
                {
                    "name": "-b, --branch",
                    "content": "show branch\n",
                    "flag": "-b",
                    "long": "--branch"
                },
                {
                    "name": "-t, --tags",
                    "content": "show tags\n",
                    "flag": "-t",
                    "long": "--tags"
                },
                {
                    "name": "-B, --bookmarks",
                    "content": "show bookmarks\n",
                    "flag": "-B",
                    "long": "--bookmarks"
                },
                {
                    "name": "-e,_",
                    "content": "specify ssh command to use\n\n--remotecmd <CMD>\nspecify hg command to run on the remote side\n"
                },
                {
                    "name": "--insecure",
                    "content": "do not verify server certificate (ignoring web.cacerts config)\n",
                    "long": "--insecure"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n\naliases: id\n"
                },
                {
                    "name": "log",
                    "content": "show revision history of entire repository or files:\n\nhg log [OPTION]... [FILE]\n\nPrint the revision history of the specified files or the entire project.\n\nIf no revision range is specified, the default is tip:0 unless --follow is set.\n\nFile history is shown without following rename or copy history of files. Use -f/--follow with\na filename to follow history across renames and copies. --follow without a filename will only\nshow  ancestors  of  the  starting  revisions.  The  starting  revisions  can be specified by\n-r/--rev, which default to the working directory parent.\n\nBy default this command prints revision number and changeset id, tags,  non-trivial  parents,\nuser, date and time, and a summary for each commit. When the -v/--verbose switch is used, the\nlist of changed files and full commit message are shown.\n\nWith  --graph  the  revisions are shown as an ASCII art DAG with the most recent changeset at\nthe top.  'o' is a changeset, '@' is a working directory parent, '%' is a changeset  involved\nin  an  unresolved merge conflict, '' closes a branch, 'x' is obsolete, '*' is unstable, and\n'+' represents a fork where the changeset from the lines below is a parent of the  'o'  merge\non  the same line.  Paths in the DAG are represented with '|', '/' and so forth. ':' in place\nof a '|' indicates one or more revisions in a path are omitted.\n\nUse -L/--line-range FILE,M:N options to follow the history of lines from M to N in FILE. With\n-p/--patch only diff hunks affecting specified line range will be shown. This option requires\n--follow; it can be specified multiple times. Currently, this option is not  compatible  with\n--graph. This option is experimental.\n\nNote   hg  log  --patch may  generate unexpected diff output for merge changesets, as it will\nonly compare the merge changeset against its first parent. Also, only files  different\nfrom BOTH parents will appear in files:.\n\nNote   For  performance  reasons, hg log FILE may omit duplicate changes made on branches and\nwill not show removals or mode changes. To see all such  changes,  use  the  --removed\nswitch.\n\nNote   The  history  resulting  from -L/--line-range options depends on diff options; for in‐\nstance if white-spaces are ignored, respective changes with only white-spaces in spec‐\nified line range will not be listed.\n\nSome examples:\n\n• changesets with full descriptions and file lists:\n\nhg log -v\n\n• changesets ancestral to the working directory:\n\nhg log -f\n\n• last 10 commits on the current branch:\n\nhg log -l 10 -b .\n\n• changesets showing all modifications of a file, including removals:\n\nhg log --removed file.c\n\n• all changesets that touch a directory, with diffs, excluding merges:\n\nhg log -Mp lib/\n\n• all revision numbers that match a keyword:\n\nhg log -k bug --template \"{rev}\\n\"\n\n• the full hash identifier of the working directory parent:\n\nhg log -r . --template \"{node}\\n\"\n\n• list available log templates:\n\nhg log -T list\n\n• check if a given changeset is included in a tagged release:\n\nhg log -r \"a21ccf and ancestor(1.9)\"\n\n• find all changesets by some user in a date range:\n\nhg log -k alice -d \"may 2008 to jul 2008\"\n\n• summary of all changesets after the last tag:\n\nhg log -r \"last(tagged())::\" --template \"{desc|firstline}\\n\"\n\n• changesets touching lines 13 to 23 for file.c:\n\nhg log -L file.c,13:23\n\n• changesets touching lines 13 to 23 for file.c and lines 2 to 6 of main.c with patch:\n\nhg log -L file.c,13:23 -L main.c,2:6 -p\n\nSee hg help dates for a list of formats valid for -d/--date.\n\nSee hg help revisions for more about specifying and ordering revisions.\n\nSee hg help templates for more about pre-packaged styles and specifying custom templates. The\ndefault template used by the log command can be customized via the command-templates.log con‐\nfiguration setting.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-f, --follow",
                    "content": "follow changeset history, or file history across copies and renames\n",
                    "flag": "-f",
                    "long": "--follow"
                },
                {
                    "name": "--follow-first",
                    "content": "only follow the first parent of merge changesets (DEPRECATED)\n",
                    "long": "--follow-first"
                },
                {
                    "name": "-d,_",
                    "content": "show revisions matching date spec\n"
                },
                {
                    "name": "-C, --copies",
                    "content": "show copied files\n",
                    "flag": "-C",
                    "long": "--copies"
                },
                {
                    "name": "-k,_",
                    "content": "do case-insensitive search for a given text\n"
                },
                {
                    "name": "-r,_",
                    "content": "revisions to select or follow from\n"
                },
                {
                    "name": "-L,_",
                    "content": "follow line range of specified file (EXPERIMENTAL)\n"
                },
                {
                    "name": "--removed",
                    "content": "include revisions where files were removed\n",
                    "long": "--removed"
                },
                {
                    "name": "-m, --only-merges",
                    "content": "show only merges (DEPRECATED) (use -r \"merge()\" instead)\n",
                    "flag": "-m",
                    "long": "--only-merges"
                },
                {
                    "name": "-u,_",
                    "content": "revisions committed by user\n\n--only-branch <BRANCH[+]>\nshow only changesets within the given named branch (DEPRECATED)\n"
                },
                {
                    "name": "-b,_",
                    "content": "show changesets within the given named branch\n"
                },
                {
                    "name": "-B,_",
                    "content": "show changesets within the given bookmark\n"
                },
                {
                    "name": "-P,_",
                    "content": "do not display revision or any of its ancestors\n"
                },
                {
                    "name": "-p, --patch",
                    "content": "show patch\n",
                    "flag": "-p",
                    "long": "--patch"
                },
                {
                    "name": "-g, --git",
                    "content": "use git extended diff format\n",
                    "flag": "-g",
                    "long": "--git"
                },
                {
                    "name": "-l,_",
                    "content": "limit number of changes displayed\n"
                },
                {
                    "name": "-M, --no-merges",
                    "content": "do not show merges\n\n--stat output diffstat-style summary of changes\n",
                    "flag": "-M",
                    "long": "--no-merges"
                },
                {
                    "name": "-G, --graph",
                    "content": "show the revision DAG\n\n--style <STYLE>\ndisplay using template map file (DEPRECATED)\n",
                    "flag": "-G",
                    "long": "--graph"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n\n[+] marked option can be specified multiple times\n\naliases: history\n"
                },
                {
                    "name": "parents",
                    "content": "show the parents of the working directory or revision (DEPRECATED):\n\nhg parents [-r REV] [FILE]\n\nPrint the working directory's parent revisions. If a revision is given via -r/--rev, the par‐\nent of that revision will be printed.  If a file argument is given, the revision in which the\nfile was last changed (before the working directory revision or  the  argument  to  --rev  if\ngiven) is printed.\n\nThis command is equivalent to:\n\nhg log -r \"p1()+p2()\" or\nhg log -r \"p1(REV)+p2(REV)\" or\nhg log -r \"max(::p1() and file(FILE))+max(::p2() and file(FILE))\" or\nhg log -r \"max(::p1(REV) and file(FILE))+max(::p2(REV) and file(FILE))\"\n\nSee hg summary and hg help revsets for related information.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "show parents of the specified revision\n\n--style <STYLE>\ndisplay using template map file (DEPRECATED)\n"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "tip",
                    "content": "show the tip revision (DEPRECATED):\n\nhg tip [-p] [-g]\n\nThe  tip  revision  (usually just called the tip) is the changeset most recently added to the\nrepository (and therefore the most recently changed head).\n\nIf you have just made a commit, that commit will be the tip. If you have just pulled  changes\nfrom another repository, the tip of that repository becomes the current tip. The \"tip\" tag is\nspecial and cannot be renamed or assigned to a different changeset.\n\nThis command is deprecated, please use hg heads instead.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-p, --patch",
                    "content": "show patch\n",
                    "flag": "-p",
                    "long": "--patch"
                },
                {
                    "name": "-g, --git",
                    "content": "use git extended diff format\n\n--style <STYLE>\ndisplay using template map file (DEPRECATED)\n",
                    "flag": "-g",
                    "long": "--git"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "Working directory management",
                    "content": ""
                },
                {
                    "name": "add",
                    "content": "add the specified files on the next commit:\n\nhg add [OPTION]... [FILE]...\n\nSchedule files to be version controlled and added to the repository.\n\nThe files will be added to the repository at the next commit. To undo an add before that, see\nhg forget.\n\nIf no names are given, add all files to the repository (except files matching .hgignore).\n\nExamples:\n\n• New (unknown) files are added automatically by hg add:\n\n$ ls\nfoo.c\n$ hg status\n? foo.c\n$ hg add\nadding foo.c\n$ hg status\nA foo.c\n\n• Specific files to be added can be specified:\n\n$ ls\nbar.c  foo.c\n$ hg status\n? bar.c\n? foo.c\n$ hg add bar.c\n$ hg status\nA bar.c\n? foo.c\n\nReturns 0 if all files are successfully added.\n\nOptions:\n"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-S, --subrepos",
                    "content": "recurse into subrepositories\n",
                    "flag": "-S",
                    "long": "--subrepos"
                },
                {
                    "name": "-n, --dry-run",
                    "content": "do not perform actions, just print output\n\n[+] marked option can be specified multiple times\n",
                    "flag": "-n",
                    "long": "--dry-run"
                },
                {
                    "name": "addremove",
                    "content": "add all new files, delete all missing files:\n\nhg addremove [OPTION]... [FILE]...\n\nAdd all new files and remove all missing files from the repository.\n\nUnless names are given, new files are ignored if they match any of the patterns in .hgignore.\nAs with add, these changes take effect at the next commit.\n\nUse  the  -s/--similarity  option to detect renamed files. This option takes a percentage be‐\ntween 0 (disabled) and 100 (files must be identical)  as  its  parameter.  With  a  parameter\ngreater than 0, this compares every removed file with every added file and records those sim‐\nilar  enough  as renames. Detecting renamed files this way can be expensive. After using this\noption, hg status -C can be used to check which files were identified as moved or renamed. If\nnot specified, -s/--similarity defaults to 100 and only renames of identical  files  are  de‐\ntected.\n\nExamples:\n\n• A  number  of  files (bar.c and foo.c) are new, while foobar.c has been removed (without\nusing hg remove) from the repository:\n\n$ ls\nbar.c foo.c\n$ hg status\n! foobar.c\n? bar.c\n? foo.c\n$ hg addremove\nadding bar.c\nadding foo.c\nremoving foobar.c\n$ hg status\nA bar.c\nA foo.c\nR foobar.c\n\n• A file foobar.c was moved to foo.c without using hg rename.  Afterwards, it  was  edited\nslightly:\n\n$ ls\nfoo.c\n$ hg status\n! foobar.c\n? foo.c\n$ hg addremove --similarity 90\nremoving foobar.c\nadding foo.c\nrecording removal of foobar.c as rename to foo.c (94% similar)\n$ hg status -C\nA foo.c\nfoobar.c\nR foobar.c\n\nReturns 0 if all files are successfully added.\n\nOptions:\n"
                },
                {
                    "name": "-s,_",
                    "content": "guess renamed files by similarity (0<=s<=100)\n"
                },
                {
                    "name": "-S, --subrepos",
                    "content": "recurse into subrepositories\n",
                    "flag": "-S",
                    "long": "--subrepos"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-n, --dry-run",
                    "content": "do not perform actions, just print output\n\n[+] marked option can be specified multiple times\n",
                    "flag": "-n",
                    "long": "--dry-run"
                },
                {
                    "name": "files",
                    "content": "list tracked files:\n\nhg files [OPTION]... [FILE]...\n\nPrint  files under Mercurial control in the working directory or specified revision for given\nfiles (excluding removed files).  Files can be specified as filenames or filesets.\n\nIf no files are given to match, this command prints the names of all  files  under  Mercurial\ncontrol.\n\nTemplate:\n\nThe  following  keywords  are supported in addition to the common template keywords and func‐\ntions. See also hg help templates.\n\nflags  String. Character denoting file's symlink and executable bits.\n\npath   String. Repository-absolute path of the file.\n\nsize   Integer. Size of the file in bytes.\n\nExamples:\n\n• list all files under the current directory:\n\nhg files .\n\n• shows sizes and flags for current revision:\n\nhg files -vr .\n\n• list all files named README:\n\nhg files -I \"/README\"\n\n• list all binary files:\n\nhg files \"set:binary()\"\n\n• find files containing a regular expression:\n\nhg files \"set:grep('bob')\"\n\n• search tracked file contents with xargs and grep:\n\nhg files -0 | xargs -0 grep foo\n\nSee hg help patterns and hg help filesets for more information on specifying file patterns.\n\nReturns 0 if a match is found, 1 otherwise.\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "search the repository as it is in REV\n"
                },
                {
                    "name": "-0, --print0",
                    "content": "end filenames with NUL, for use with xargs\n",
                    "flag": "-0",
                    "long": "--print0"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "-S, --subrepos",
                    "content": "recurse into subrepositories\n\n[+] marked option can be specified multiple times\n",
                    "flag": "-S",
                    "long": "--subrepos"
                },
                {
                    "name": "forget",
                    "content": "forget the specified files on the next commit:\n\nhg forget [OPTION]... FILE...\n\nMark the specified files so they will no longer be tracked after the next commit.\n\nThis only removes files from the current branch, not from the entire project history, and  it\ndoes not delete them from the working directory.\n\nTo delete the file from the working directory, see hg remove.\n\nTo undo a forget before the next commit, see hg add.\n\nExamples:\n\n• forget newly-added binary files:\n\nhg forget \"set:added() and binary()\"\n\n• forget files that would be excluded by .hgignore:\n\nhg forget \"set:hgignore()\"\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-i, --interactive",
                    "content": "use interactive mode\n",
                    "flag": "-i",
                    "long": "--interactive"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-n, --dry-run",
                    "content": "do not perform actions, just print output\n\n[+] marked option can be specified multiple times\n",
                    "flag": "-n",
                    "long": "--dry-run"
                },
                {
                    "name": "locate",
                    "content": "locate files matching specific patterns (DEPRECATED):\n\nhg locate [OPTION]... [PATTERN]...\n\nPrint files under Mercurial control in the working directory whose names match the given pat‐\nterns.\n\nBy  default,  this  command searches all directories in the working directory. To search just\nthe current directory and its subdirectories, use \"--include .\".\n\nIf no patterns are given to match, this command prints the names of all files under Mercurial\ncontrol in the working directory.\n\nIf you want to feed the output of this command into the \"xargs\" command, use the -0 option to\nboth this command and \"xargs\". This will avoid the problem of \"xargs\" treating  single  file‐\nnames that contain whitespace as multiple filenames.\n\nSee hg help files for a more versatile command.\n\nReturns 0 if a match is found, 1 otherwise.\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "search the repository as it is in REV\n"
                },
                {
                    "name": "-0, --print0",
                    "content": "end filenames with NUL, for use with xargs\n",
                    "flag": "-0",
                    "long": "--print0"
                },
                {
                    "name": "-f, --fullpath",
                    "content": "print complete paths from the filesystem root\n",
                    "flag": "-f",
                    "long": "--fullpath"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "purge",
                    "content": "removes files not tracked by Mercurial:\n\nhg purge [OPTION]... [DIR]...\n\nDelete  files not known to Mercurial. This is useful to test local and uncommitted changes in\nan otherwise-clean source tree.\n\nThis means that purge will delete the following by default:\n\n• Unknown files: files marked with \"?\" by hg status\n\n• Empty directories: in fact Mercurial ignores directories unless they  contain  files  under\nsource control management\n\nBut it will leave untouched:\n\n• Modified and unmodified tracked files\n\n• Ignored files (unless -i or --all is specified)\n\n• New files added to the repository (with hg add)\n\nThe  --files and --dirs options can be used to direct purge to delete only files, only direc‐\ntories, or both. If neither option is given, both will be deleted.\n\nIf directories are given on the command line, only files in these directories are considered.\n\nBe careful with purge, as you could irreversibly delete some files you forgot to add  to  the\nrepository.  If  you only want to print the list of files that this program would delete, use\nthe --print option.\n\nOptions:\n"
                },
                {
                    "name": "-a, --abort-on-err",
                    "content": "abort if an error occurs\n\n--all  purge ignored files too\n",
                    "flag": "-a",
                    "long": "--abort-on-err"
                },
                {
                    "name": "-i, --ignored",
                    "content": "purge only ignored files\n\n--dirs purge empty directories\n",
                    "flag": "-i",
                    "long": "--ignored"
                },
                {
                    "name": "--files",
                    "content": "purge files\n",
                    "long": "--files"
                },
                {
                    "name": "-p, --print",
                    "content": "print filenames instead of deleting them\n",
                    "flag": "-p",
                    "long": "--print"
                },
                {
                    "name": "-0, --print0",
                    "content": "end filenames with NUL, for use with xargs (implies -p/--print)\n",
                    "flag": "-0",
                    "long": "--print0"
                },
                {
                    "name": "--confirm",
                    "content": "ask before permanently deleting files\n",
                    "long": "--confirm"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n\n[+] marked option can be specified multiple times\n\naliases: clean\n"
                },
                {
                    "name": "remove",
                    "content": "remove the specified files on the next commit:\n\nhg remove [OPTION]... FILE...\n\nSchedule the indicated files for removal from the current branch.\n\nThis command schedules the files to be removed at the next commit.  To undo a  remove  before\nthat, see hg revert. To undo added files, see hg forget.\n\n-A/--after can be used to remove only files that have already been deleted, -f/--force can be\nused  to  force  deletion, and -Af can be used to remove files from the next revision without\ndeleting them from the working directory.\n\nThe following table details the behavior of remove for different file  states  (columns)  and\noption  combinations (rows). The file states are Added [A], Clean [C], Modified [M] and Miss‐\ning [!]  (as reported by hg status). The actions are Warn, Remove (from  branch)  and  Delete\n(from disk):\n┌───────────┬───┬────┬────┬───┐\n│ opt/state │ A │ C  │ M  │ ! │\n├───────────┼───┼────┼────┼───┤\n│ none      │ W │ RD │ W  │ R │\n├───────────┼───┼────┼────┼───┤\n│ -f        │ R │ RD │ RD │ R │\n├───────────┼───┼────┼────┼───┤\n│ -A        │ W │ W  │ W  │ R │\n├───────────┼───┼────┼────┼───┤\n│ -Af       │ R │ R  │ R  │ R │\n└───────────┴───┴────┴────┴───┘\n\nNote   hg  remove never deletes files in Added [A] state from the working directory, not even\nif --force is specified.\n\nReturns 0 on success, 1 if any warnings encountered.\n\nOptions:\n"
                },
                {
                    "name": "-A, --after",
                    "content": "record delete for missing files\n",
                    "flag": "-A",
                    "long": "--after"
                },
                {
                    "name": "-f, --force",
                    "content": "forget added files, delete modified files\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-S, --subrepos",
                    "content": "recurse into subrepositories\n",
                    "flag": "-S",
                    "long": "--subrepos"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-n, --dry-run",
                    "content": "do not perform actions, just print output\n\n[+] marked option can be specified multiple times\n\naliases: rm\n",
                    "flag": "-n",
                    "long": "--dry-run"
                },
                {
                    "name": "rename",
                    "content": "rename files; equivalent of copy + remove:\n\nhg rename [OPTION]... SOURCE... DEST\n\nMark dest as copies of sources; mark sources for deletion. If dest is a directory, copies are\nput in that directory. If dest is a file, there can only be one source.\n\nBy default, this command copies the contents of files as they exist in the working directory.\nIf invoked with -A/--after, the operation is recorded, but no copying is performed.\n\nTo undo marking a destination file as renamed, use --forget. With that option, all given (po‐\nsitional) arguments are unmarked as renames. The destination file(s) will be  left  in  place\n(still  tracked).  The  source file(s) will not be restored. Note that hg rename --forget be‐\nhaves the same way as hg copy --forget.\n\nThis command takes effect with the next commit by default.\n\nReturns 0 on success, 1 if errors are encountered.\n\nOptions:\n"
                },
                {
                    "name": "--forget",
                    "content": "unmark a destination file as renamed\n",
                    "long": "--forget"
                },
                {
                    "name": "-A, --after",
                    "content": "record a rename that has already occurred\n\n--at-rev <REV>\n(un)mark renames in the given revision (EXPERIMENTAL)\n",
                    "flag": "-A",
                    "long": "--after"
                },
                {
                    "name": "-f, --force",
                    "content": "forcibly move over an existing managed file\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-n, --dry-run",
                    "content": "do not perform actions, just print output\n\n[+] marked option can be specified multiple times\n\naliases: move mv\n",
                    "flag": "-n",
                    "long": "--dry-run"
                },
                {
                    "name": "resolve",
                    "content": "redo merges or set/view the merge status of files:\n\nhg resolve [OPTION]... [FILE]...\n\nMerges with unresolved conflicts are often the result of non-interactive  merging  using  the\ninternal:merge  configuration  setting,  or a command-line merge tool like diff3. The resolve\ncommand is used to manage the files involved in a merge, after hg merge has been run, and be‐\nfore hg commit is run (i.e. the working  directory  must  have  two  parents).  See  hg  help\nmerge-tools for information on configuring merge tools.\n\nThe resolve command can be used in the following ways:\n\n• hg  resolve  [--re-merge]  [--tool  TOOL] FILE...: attempt to re-merge the specified files,\ndiscarding any previous merge attempts. Re-merging  is  not  performed  for  files  already\nmarked  as  resolved.  Use  --all/-a  to select all unresolved files. --tool can be used to\nspecify the merge tool used for the given files. It overrides the HGMERGE environment vari‐\nable and your configuration files.  Previous file contents are saved with a .orig suffix.\n\n• hg resolve -m [FILE]: mark a file as having  been  resolved  (e.g.  after  having  manually\nfixed-up the files). The default is to mark all unresolved files.\n\n• hg  resolve  -u  [FILE]...:  mark a file as unresolved. The default is to mark all resolved\nfiles.\n\n• hg resolve -l: list files which had or still have conflicts.  In the printed list, U =  un‐\nresolved  and  R  = resolved.  You can use set:unresolved() or set:resolved() to filter the\nlist. See hg help filesets for details.\n\nNote   Mercurial will not let you commit files with unresolved merge conflicts. You must  use\nhg resolve -m ... before you can commit after a conflicting merge.\n\nTemplate:\n\nThe  following  keywords  are supported in addition to the common template keywords and func‐\ntions. See also hg help templates.\n"
                },
                {
                    "name": "mergestatus",
                    "content": "String. Character denoting merge conflicts, U or R.\n\npath   String. Repository-absolute path of the file.\n\nReturns 0 on success, 1 if any files fail a resolve attempt.\n\nOptions:\n"
                },
                {
                    "name": "-a, --all",
                    "content": "select all unresolved files\n",
                    "flag": "-a",
                    "long": "--all"
                },
                {
                    "name": "-l, --list",
                    "content": "list state of files needing merge\n",
                    "flag": "-l",
                    "long": "--list"
                },
                {
                    "name": "-m, --mark",
                    "content": "mark files as resolved\n",
                    "flag": "-m",
                    "long": "--mark"
                },
                {
                    "name": "-u, --unmark",
                    "content": "mark files as unresolved\n",
                    "flag": "-u",
                    "long": "--unmark"
                },
                {
                    "name": "-n, --no-status",
                    "content": "hide status prefix\n",
                    "flag": "-n",
                    "long": "--no-status"
                },
                {
                    "name": "--re-merge",
                    "content": "re-merge files\n",
                    "long": "--re-merge"
                },
                {
                    "name": "-t,_",
                    "content": "specify merge tool\n"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "revert",
                    "content": "restore files to their checkout state:\n\nhg revert [OPTION]... [-r REV] [NAME]...\n\nNote   To check out earlier revisions, you should use hg update REV.  To cancel an  uncommit‐\nted merge (and lose your changes), use hg merge --abort.\n\nWith  no  revision  specified, revert the specified files or directories to the contents they\nhad in the parent of the working directory.  This restores the contents of files to an unmod‐\nified state and unschedules adds, removes, copies, and renames. If the working directory  has\ntwo parents, you must explicitly specify a revision.\n\nUsing  the  -r/--rev  or  -d/--date  options,  revert the given files or directories to their\nstates as of a specific revision. Because revert does not change the working  directory  par‐\nents,  this will cause these files to appear modified. This can be helpful to \"back out\" some\nor all of an earlier change. See hg backout for a related method.\n\nModified files are saved with a .orig suffix before reverting.  To disable these backups, use\n--no-backup. It is possible to store the backup files in a custom directory relative  to  the\nroot of the repository by setting the ui.origbackuppath configuration option.\n\nSee hg help dates for a list of formats valid for -d/--date.\n\nSee hg help backout for a way to reverse the effect of an earlier changeset.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-a, --all",
                    "content": "revert all changes when no arguments given\n",
                    "flag": "-a",
                    "long": "--all"
                },
                {
                    "name": "-d,_",
                    "content": "tipmost revision matching date\n"
                },
                {
                    "name": "-r,_",
                    "content": "revert to the specified revision\n"
                },
                {
                    "name": "-C, --no-backup",
                    "content": "do not save backup copies of files\n",
                    "flag": "-C",
                    "long": "--no-backup"
                },
                {
                    "name": "-i, --interactive",
                    "content": "interactively select the changes\n",
                    "flag": "-i",
                    "long": "--interactive"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-n, --dry-run",
                    "content": "do not perform actions, just print output\n\n[+] marked option can be specified multiple times\n",
                    "flag": "-n",
                    "long": "--dry-run"
                },
                {
                    "name": "root",
                    "content": "print the root (top) of the current working directory:\n\nhg root\n\nPrint the root directory of the current repository.\n\nTemplate:\n\nThe  following  keywords  are supported in addition to the common template keywords and func‐\ntions. See also hg help templates.\n\nhgpath String. Path to the .hg directory.\n"
                },
                {
                    "name": "storepath",
                    "content": "String. Path to the directory holding versioned data.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "shelve",
                    "content": "save and set aside changes from the working directory:\n\nhg shelve [OPTION]... [FILE]...\n\nShelving takes files that \"hg status\" reports as not clean, saves the modifications to a bun‐\ndle (a shelved change), and reverts the files so that their state in  the  working  directory\nbecomes clean.\n\nTo  restore  these changes to the working directory, using \"hg unshelve\"; this will work even\nif you switch to a different commit.\n\nWhen no files are specified, \"hg shelve\" saves all not-clean files. If specific files or  di‐\nrectories are named, only changes to those files are shelved.\n\nIn  bare  shelve  (when  no files are specified, without interactive, include and exclude op‐\ntion), shelving remembers information if the working directory was on newly  created  branch,\nin other words working directory was on different branch than its first parent. In this situ‐\nation unshelving restores branch information to the working directory.\n\nEach  shelved  change  has  a name that makes it easier to find later.  The name of a shelved\nchange defaults to being based on the active bookmark, or if there is no active bookmark, the\ncurrent named branch.  To specify a different name, use --name.\n\nTo see a list of existing shelved changes, use the --list option. For  each  shelved  change,\nthis will print its name, age, and description; use --patch or --stat for more details.\n\nTo  delete  specific  shelved  changes,  use  --delete.  To  delete  all shelved changes, use\n--cleanup.\n\nOptions:\n"
                },
                {
                    "name": "-A, --addremove",
                    "content": "mark new/missing files as added/removed before shelving\n",
                    "flag": "-A",
                    "long": "--addremove"
                },
                {
                    "name": "-u, --unknown",
                    "content": "store unknown files in the shelve\n",
                    "flag": "-u",
                    "long": "--unknown"
                },
                {
                    "name": "--cleanup",
                    "content": "delete all shelved changes\n\n--date <DATE>\nshelve with the specified commit date\n",
                    "long": "--cleanup"
                },
                {
                    "name": "-d, --delete",
                    "content": "delete the named shelved change(s)\n",
                    "flag": "-d",
                    "long": "--delete"
                },
                {
                    "name": "-e, --edit",
                    "content": "invoke editor on commit messages\n",
                    "flag": "-e",
                    "long": "--edit"
                },
                {
                    "name": "-k, --keep",
                    "content": "shelve, but keep changes in the working directory\n",
                    "flag": "-k",
                    "long": "--keep"
                },
                {
                    "name": "-l, --list",
                    "content": "list current shelves\n",
                    "flag": "-l",
                    "long": "--list"
                },
                {
                    "name": "-m,_",
                    "content": "use text as shelve message\n"
                },
                {
                    "name": "-n,_",
                    "content": "use the given name for the shelved commit\n"
                },
                {
                    "name": "-p, --patch",
                    "content": "output patches for changes (provide the names of the shelved changes as positional ar‐\nguments)\n",
                    "flag": "-p",
                    "long": "--patch"
                },
                {
                    "name": "-i, --interactive",
                    "content": "interactive mode\n\n--stat output diffstat-style summary of changes (provide the names of the shelved changes  as\npositional arguments)\n",
                    "flag": "-i",
                    "long": "--interactive"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "status",
                    "content": "show changed files in the working directory:\n\nhg status [OPTION]... [FILE]...\n\nShow  status of files in the repository. If names are given, only files that match are shown.\nFiles that are clean or ignored or the source of a copy/move operation, are not listed unless\n-c/--clean, -i/--ignored, -C/--copies or -A/--all are given.  Unless options  described  with\n\"show only ...\" are given, the options -mardu are used.\n\nOption  -q/--quiet  hides  untracked  (unknown and ignored) files unless explicitly requested\nwith -u/--unknown or -i/--ignored.\n\nNote   hg status may appear to disagree with diff if permissions have changed or a merge  has\noccurred.  The  standard  diff format does not report permission changes and diff only\nreports changes relative to one merge parent.\n\nIf one revision is given, it is used as the base revision.  If two revisions are  given,  the\ndifferences  between  them  are  shown. The --change option can also be used as a shortcut to\nlist the changed files of a revision from its first parent.\n\nThe codes used to show the status of files are:\n\nM = modified\nA = added\nR = removed\nC = clean\n! = missing (deleted by non-hg command, but still tracked)\n? = not tracked\nI = ignored\n= origin of the previous file (with --copies)\n\nThe -t/--terse option abbreviates the output by showing only the directory name  if  all  the\nfiles  in  it  share the same status. The option takes an argument indicating the statuses to\nabbreviate: 'm' for 'modified', 'a' for 'added', 'r' for 'removed', 'd'  for  'deleted',  'u'\nfor 'unknown', 'i' for 'ignored' and 'c' for clean.\n\nIt  abbreviates  only  those statuses which are passed. Note that clean and ignored files are\nnot displayed with '--terse ic' unless the -c/--clean and -i/--ignored options are also used.\n\nThe -v/--verbose option shows information when the repository  is  in  an  unfinished  merge,\nshelve,  rebase  state  etc.  You can have this behavior turned on by default by enabling the\ncommands.status.verbose option.\n\nYou can skip displaying some of these states by setting commands.status.skipstates to one  or\nmore of: 'bisect', 'graft', 'histedit', 'merge', 'rebase', or 'unshelve'.\n\nTemplate:\n\nThe  following  keywords  are supported in addition to the common template keywords and func‐\ntions. See also hg help templates.\n\npath   String. Repository-absolute path of the file.\n\nsource String. Repository-absolute path of the file originated from.  Available  if  --copies\nis specified.\n\nstatus String. Character denoting file's status.\n\nExamples:\n\n• show changes in the working directory relative to a changeset:\n\nhg status --rev 9353\n\n• show  changes  in the working directory relative to the current directory (see hg help pat‐\nterns for more information):\n\nhg status re:\n\n• show all changes including copies in an existing changeset:\n\nhg status --copies --change 9353\n\n• get a NUL separated list of added files, suitable for xargs:\n\nhg status -an0\n\n• show more information about the repository status, abbreviating added,  removed,  modified,\ndeleted, and untracked paths:\n\nhg status -v -t mardu\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-A, --all",
                    "content": "show status of all files\n",
                    "flag": "-A",
                    "long": "--all"
                },
                {
                    "name": "-m, --modified",
                    "content": "show only modified files\n",
                    "flag": "-m",
                    "long": "--modified"
                },
                {
                    "name": "-a, --added",
                    "content": "show only added files\n",
                    "flag": "-a",
                    "long": "--added"
                },
                {
                    "name": "-r, --removed",
                    "content": "show only removed files\n",
                    "flag": "-r",
                    "long": "--removed"
                },
                {
                    "name": "-d, --deleted",
                    "content": "show only missing files\n",
                    "flag": "-d",
                    "long": "--deleted"
                },
                {
                    "name": "-c, --clean",
                    "content": "show only files without changes\n",
                    "flag": "-c",
                    "long": "--clean"
                },
                {
                    "name": "-u, --unknown",
                    "content": "show only unknown (not tracked) files\n",
                    "flag": "-u",
                    "long": "--unknown"
                },
                {
                    "name": "-i, --ignored",
                    "content": "show only ignored files\n",
                    "flag": "-i",
                    "long": "--ignored"
                },
                {
                    "name": "-n, --no-status",
                    "content": "hide status prefix\n",
                    "flag": "-n",
                    "long": "--no-status"
                },
                {
                    "name": "-t,_",
                    "content": "show the terse output (EXPERIMENTAL) (default: nothing)\n"
                },
                {
                    "name": "-C, --copies",
                    "content": "show source of copied files (DEFAULT: ui.statuscopies)\n",
                    "flag": "-C",
                    "long": "--copies"
                },
                {
                    "name": "-0, --print0",
                    "content": "end filenames with NUL, for use with xargs\n\n--rev <REV[+]>\nshow difference from revision\n\n--change <REV>\nlist the changed files of a revision\n",
                    "flag": "-0",
                    "long": "--print0"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-S, --subrepos",
                    "content": "recurse into subrepositories\n",
                    "flag": "-S",
                    "long": "--subrepos"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n\n[+] marked option can be specified multiple times\n\naliases: st\n"
                },
                {
                    "name": "summary",
                    "content": "summarize working directory state:\n\nhg summary [--remote]\n\nThis  generates  a  brief  summary of the working directory state, including parents, branch,\ncommit status, phase and available updates.\n\nWith the --remote option, this will  check  the  default  paths  for  incoming  and  outgoing\nchanges. This can be time-consuming.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "--remote",
                    "content": "check for push and pull\n\naliases: sum\n",
                    "long": "--remote"
                },
                {
                    "name": "unshelve",
                    "content": "restore a shelved change to the working directory:\n\nhg unshelve [OPTION]... [[-n] SHELVED]\n\nThis  command  accepts an optional name of a shelved change to restore. If none is given, the\nmost recent shelved change is used.\n\nIf a shelved change is applied successfully, the bundle that contains the shelved changes  is\nmoved to a backup location (.hg/shelve-backup).\n\nSince you can restore a shelved change on top of an arbitrary commit, it is possible that un‐\nshelving  will  result  in a conflict between your changes and the commits you are unshelving\nonto. If this occurs, you must resolve the conflict, then use --continue to complete the  un‐\nshelve  operation.  (The  bundle  will  not  be moved until you successfully complete the un‐\nshelve.)\n\n(Alternatively, you can use --abort to abandon an unshelve that causes a conflict.  This  re‐\nverts the unshelved changes, and leaves the bundle in place.)\n\nIf  bare  shelved  change (without interactive, include and exclude option) was done on newly\ncreated branch it would restore branch information to the working directory.\n\nAfter a successful unshelve, the shelved changes are stored in a backup directory. Only the N\nmost  recent  backups  are  kept.  N  defaults  to  10  but  can  be  overridden  using   the\nshelve.maxbackups configuration option.\n\nTimestamp  in  seconds  is  used to decide order of backups. More than maxbackups backups are\nkept, if same timestamp prevents from deciding exact order of them, for safety.\n\nSelected changes can be unshelved with --interactive flag.  The working directory is  updated\nwith  the  selected changes, and only the unselected changes remain shelved.  Note: The whole\nshelve is applied to working directory first before  running  interactively.  So,  this  will\nbring  up  all  the conflicts between working directory and the shelve, irrespective of which\nchanges will be unshelved.\n\nOptions:\n"
                },
                {
                    "name": "-a, --abort",
                    "content": "abort an incomplete unshelve operation\n",
                    "flag": "-a",
                    "long": "--abort"
                },
                {
                    "name": "-c, --continue",
                    "content": "continue an incomplete unshelve operation\n",
                    "flag": "-c",
                    "long": "--continue"
                },
                {
                    "name": "-i, --interactive",
                    "content": "use interactive mode (EXPERIMENTAL)\n",
                    "flag": "-i",
                    "long": "--interactive"
                },
                {
                    "name": "-k, --keep",
                    "content": "keep shelve after unshelving\n",
                    "flag": "-k",
                    "long": "--keep"
                },
                {
                    "name": "-n,_",
                    "content": "restore shelved change with given name\n"
                },
                {
                    "name": "-t,_",
                    "content": "specify merge tool\n\n--date <DATE>\nset date for temporary commits (DEPRECATED)\n"
                },
                {
                    "name": "update",
                    "content": "update working directory (or switch revisions):\n\nhg update [-C|-c|-m] [-d DATE] [[-r] REV]\n\nUpdate the repository's working directory to the specified  changeset.  If  no  changeset  is\nspecified, update to the tip of the current named branch and move the active bookmark (see hg\nhelp bookmarks).\n\nUpdate  sets  the working directory's parent revision to the specified changeset (see hg help\nparents).\n\nIf the changeset is not a descendant or ancestor of the working directory's parent and  there\nare  uncommitted  changes, the update is aborted. With the -c/--check option, the working di‐\nrectory is checked for uncommitted changes; if none are found, the working directory  is  up‐\ndated to the specified changeset.\n\nThe -C/--clean, -c/--check, and -m/--merge options control what happens if the working direc‐\ntory contains uncommitted changes.  At most of one of them can be specified.\n\n1. If  no option is specified, and if the requested changeset is an ancestor or descendant of\nthe working directory's parent, the uncommitted changes  are  merged  into  the  requested\nchangeset  and the merged result is left uncommitted. If the requested changeset is not an\nancestor or descendant (that is, it is on another branch), the update is aborted  and  the\nuncommitted changes are preserved.\n\n2. With  the  -m/--merge option, the update is allowed even if the requested changeset is not\nan ancestor or descendant of the working directory's parent.\n\n3. With the -c/--check option, the update is aborted and the  uncommitted  changes  are  pre‐\nserved.\n\n4. With the -C/--clean option, uncommitted changes are discarded and the working directory is\nupdated to the requested changeset.\n\nTo cancel an uncommitted merge (and lose your changes), use hg merge --abort.\n\nUse null as the changeset to remove the working directory (like hg clone -U).\n\nIf you want to revert just one file to an older revision, use hg revert [-r REV] NAME.\n\nSee hg help dates for a list of formats valid for -d/--date.\n\nReturns 0 on success, 1 if there are unresolved files.\n\nOptions:\n"
                },
                {
                    "name": "-C, --clean",
                    "content": "discard uncommitted changes (no backup)\n",
                    "flag": "-C",
                    "long": "--clean"
                },
                {
                    "name": "-c, --check",
                    "content": "require clean working directory\n",
                    "flag": "-c",
                    "long": "--check"
                },
                {
                    "name": "-m, --merge",
                    "content": "merge uncommitted changes\n",
                    "flag": "-m",
                    "long": "--merge"
                },
                {
                    "name": "-d,_",
                    "content": "tipmost revision matching date\n"
                },
                {
                    "name": "-r,_",
                    "content": "revision\n"
                },
                {
                    "name": "-t,_",
                    "content": "specify merge tool\n\naliases: up checkout co\n"
                },
                {
                    "name": "Change import/export",
                    "content": ""
                },
                {
                    "name": "archive",
                    "content": "create an unversioned archive of a repository revision:\n\nhg archive [OPTION]... DEST\n\nBy default, the revision used is the parent of the working directory; use -r/--rev to specify\na different revision.\n\nThe  archive  type  is  automatically  detected  based  on  file  extension (to override, use\n-t/--type).\n\nExamples:\n\n• create a zip file containing the 1.0 release:\n\nhg archive -r 1.0 project-1.0.zip\n\n• create a tarball excluding .hg files:\n\nhg archive project.tar.gz -X \".hg*\"\n\nValid types are:\n"
                },
                {
                    "name": "files",
                    "content": "a directory full of files (default)\n"
                },
                {
                    "name": "tar",
                    "content": "tar archive, uncompressed\n"
                },
                {
                    "name": "tbz2",
                    "content": "tar archive, compressed using bzip2\n"
                },
                {
                    "name": "tgz",
                    "content": "tar archive, compressed using gzip\n"
                },
                {
                    "name": "txz",
                    "content": "tar archive, compressed using lzma (only in Python 3)\n"
                },
                {
                    "name": "uzip",
                    "content": "zip archive, uncompressed\n"
                },
                {
                    "name": "zip",
                    "content": "zip archive, compressed using deflate\n\nThe exact name of the destination archive or directory is given using a format string; see hg\nhelp export for details.\n\nEach member added to an archive file has a directory prefix  prepended.  Use  -p/--prefix  to\nspecify a format string for the prefix. The default is the basename of the archive, with suf‐\nfixes removed.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "--no-decode",
                    "content": "do not pass files through decoders\n",
                    "long": "--no-decode"
                },
                {
                    "name": "-p,_",
                    "content": "directory prefix for files in archive\n"
                },
                {
                    "name": "-r,_",
                    "content": "revision to distribute\n"
                },
                {
                    "name": "-t,_",
                    "content": "type of distribution to create\n"
                },
                {
                    "name": "-S, --subrepos",
                    "content": "recurse into subrepositories\n",
                    "flag": "-S",
                    "long": "--subrepos"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "bundle",
                    "content": "create a bundle file:\n\nhg bundle [-f] [-t BUNDLESPEC] [-a] [-r REV]... [--base REV]... FILE [DEST]...\n\nGenerate a bundle file containing data to be transferred to another repository.\n\nTo  create  a  bundle containing all changesets, use -a/--all (or --base null). Otherwise, hg\nassumes the destination will have all the nodes you specify with  --base  parameters.  Other‐\nwise, hg will assume the repository has all the nodes in destination, or default-push/default\nif  no  destination  is  specified, where destination is the repositories you provide through\nDEST option.\n\nYou can change bundle format with the -t/--type option. See hg help bundlespec for documenta‐\ntion on this format. By default, the most appropriate format is used and compression defaults\nto bzip2.\n\nThe bundle file can then be transferred using  conventional  means  and  applied  to  another\nrepository  with  the  unbundle or pull command. This is useful when direct push and pull are\nnot available or when exporting an entire repository is undesirable.\n\nApplying bundles preserves all changeset contents including permissions, copy/rename informa‐\ntion, and revision history.\n\nReturns 0 on success, 1 if no changes found.\n\nOptions:\n"
                },
                {
                    "name": "--exact",
                    "content": "compute the base from the revision specified\n",
                    "long": "--exact"
                },
                {
                    "name": "-f, --force",
                    "content": "run even when the destination is unrelated\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-r,_",
                    "content": "a changeset intended to be added to the destination\n"
                },
                {
                    "name": "-b,_",
                    "content": "a specific branch you would like to bundle\n\n--base <REV[+]>\na base changeset assumed to be available at the destination\n"
                },
                {
                    "name": "-a, --all",
                    "content": "bundle all changesets in the repository\n",
                    "flag": "-a",
                    "long": "--all"
                },
                {
                    "name": "-t,_",
                    "content": "bundle compression type to use (default: bzip2)\n"
                },
                {
                    "name": "-e,_",
                    "content": "specify ssh command to use\n\n--remotecmd <CMD>\nspecify hg command to run on the remote side\n"
                },
                {
                    "name": "--insecure",
                    "content": "do not verify server certificate (ignoring web.cacerts config)\n\n[+] marked option can be specified multiple times\n",
                    "long": "--insecure"
                },
                {
                    "name": "export",
                    "content": "dump the header and diffs for one or more changesets:\n\nhg export [OPTION]... [-o OUTFILESPEC] [-r] [REV]...\n\nPrint the changeset header and diffs for one or more revisions.  If no revision is given, the\nparent of the working directory is used.\n\nThe information shown in the changeset header is: author, date, branch name (if non-default),\nchangeset hash, parent(s) and commit comment.\n\nNote   hg export may generate unexpected diff output for merge changesets, as it will compare\nthe merge changeset against its first parent only.\n\nOutput may be to a file, in which case the name of the file is given using a template string.\nSee hg help templates. In addition to the common template keywords, the following  formatting\nrules are supported:\n\n%%\n\nliteral \"%\" character\n\n%H\n\nchangeset hash (40 hexadecimal digits)\n\n%N\n\nnumber of patches being generated\n\n%R\n\nchangeset revision number\n\n%b\n\nbasename of the exporting repository\n\n%h\n\nshort-form changeset hash (12 hexadecimal digits)\n\n%m\n\nfirst line of the commit message (only alphanumeric characters)\n\n%n\n\nzero-padded sequence number, starting at 1\n\n%r\n\nzero-padded changeset revision number\n\n\\\n\nliteral \"\" character\n\nWithout  the  -a/--text option, export will avoid generating diffs of files it detects as bi‐\nnary. With -a, export will generate a diff anyway, probably with undesirable results.\n\nWith -B/--bookmark changesets reachable by the given bookmark are selected.\n\nUse the -g/--git option to generate diffs in the git extended diff format. See hg help  diffs\nfor more information.\n\nWith the --switch-parent option, the diff will be against the second parent. It can be useful\nto review a merge.\n\nTemplate:\n\nThe  following  keywords  are supported in addition to the common template keywords and func‐\ntions. See also hg help templates.\n\ndiff   String. Diff content.\n"
                },
                {
                    "name": "parents",
                    "content": "List of strings. Parent nodes of the changeset.\n\nExamples:\n\n• use export and import to transplant a bugfix to the current branch:\n\nhg export -r 9353 | hg import -\n\n• export all the changesets between two revisions to a file with rename information:\n\nhg export --git -r 123:150 > changes.txt\n\n• split outgoing changes into a series of patches with descriptive names:\n\nhg export -r \"outgoing()\" -o \"%n-%m.patch\"\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-B,_",
                    "content": "export changes only reachable by given bookmark\n"
                },
                {
                    "name": "-o,_",
                    "content": "print output to file with formatted name\n"
                },
                {
                    "name": "--switch-parent",
                    "content": "diff against the second parent\n",
                    "long": "--switch-parent"
                },
                {
                    "name": "-r,_",
                    "content": "revisions to export\n"
                },
                {
                    "name": "-a, --text",
                    "content": "treat all files as text\n",
                    "flag": "-a",
                    "long": "--text"
                },
                {
                    "name": "-g, --git",
                    "content": "use git extended diff format (DEFAULT: diff.git)\n",
                    "flag": "-g",
                    "long": "--git"
                },
                {
                    "name": "--binary",
                    "content": "generate binary diffs in git mode (default)\n",
                    "long": "--binary"
                },
                {
                    "name": "--nodates",
                    "content": "omit dates from diff headers\n",
                    "long": "--nodates"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "import",
                    "content": "import an ordered set of patches:\n\nhg import [OPTION]... PATCH...\n\nImport a list of patches and commit them individually (unless --no-commit is specified).\n\nTo read a patch from standard input (stdin), use \"-\" as the patch name. If a  URL  is  speci‐\nfied, the patch will be downloaded from there.\n\nImport  first applies changes to the working directory (unless --bypass is specified), import\nwill abort if there are outstanding changes.\n\nUse --bypass to apply and commit patches directly to the repository,  without  affecting  the\nworking  directory.  Without --exact, patches will be applied on top of the working directory\nparent revision.\n\nYou can import a patch straight from a mail message. Even patches as attachments work (to use\nthe body part, it must have type text/plain or text/x-patch). From  and  Subject  headers  of\nemail message are used as default committer and commit message. All text/plain body parts be‐\nfore first diff are added to the commit message.\n\nIf  the  imported  patch was generated by hg export, user and description from patch override\nvalues from message headers and body. Values given on  command  line  with  -m/--message  and\n-u/--user override these.\n\nIf  --exact  is  specified, import will set the working directory to the parent of each patch\nbefore applying it, and will abort if the resulting changeset has a different ID than the one\nrecorded in the patch. This will guard against various ways that portable patch  formats  and\nmail  systems  might  fail to transfer Mercurial data or metadata. See hg bundle for lossless\ntransmission.\n\nUse --partial to ensure a changeset will be created from the patch even if some hunks fail to\napply. Hunks that fail to apply will be written to a <target-file>.rej  file.  Conflicts  can\nthen  be  resolved  by  hand before hg commit --amend is run to update the created changeset.\nThis flag exists to let people import patches that partially apply without losing the associ‐\nated metadata (author, date, description, ...).\n\nNote   When no hunks apply cleanly, hg import --partial will create an empty  changeset,  im‐\nporting only the patch metadata.\n\nWith -s/--similarity, hg will attempt to discover renames and copies in the patch in the same\nway as hg addremove.\n\nIt  is  possible  to use external patch programs to perform the patch by setting the ui.patch\nconfiguration option. For the default internal tool, the fuzz  can  also  be  configured  via\npatch.fuzz.  See hg help config for more information about configuration files and how to use\nthese options.\n\nSee hg help dates for a list of formats valid for -d/--date.\n\nExamples:\n\n• import a traditional patch from a website and detect renames:\n\nhg import -s 80 http://example.com/bugfix.patch\n\n• import a changeset from an hgweb server:\n\nhg import https://www.mercurial-scm.org/repo/hg/rev/5ca8c111e9aa\n\n• import all the patches in an Unix-style mbox:\n\nhg import incoming-patches.mbox\n\n• import patches from stdin:\n\nhg import -\n\n• attempt to exactly restore an exported changeset (not always possible):\n\nhg import --exact proposed-fix.patch\n\n• use an external tool to apply a patch which is too fuzzy for the default internal tool.\n\nhg import --config ui.patch=\"patch --merge\" fuzzy.patch\n\n• change the default fuzzing from 2 to a less strict 7\n\nhg import --config ui.fuzz=7 fuzz.patch\n\nReturns 0 on success, 1 on partial success (see --partial).\n\nOptions:\n"
                },
                {
                    "name": "-p,_",
                    "content": "directory strip option for patch. This has the same meaning as the corresponding patch\noption (default: 1)\n"
                },
                {
                    "name": "-b,_",
                    "content": "base path (DEPRECATED)\n"
                },
                {
                    "name": "--secret",
                    "content": "use the secret phase for committing\n",
                    "long": "--secret"
                },
                {
                    "name": "-e, --edit",
                    "content": "invoke editor on commit messages\n",
                    "flag": "-e",
                    "long": "--edit"
                },
                {
                    "name": "-f, --force",
                    "content": "skip check for outstanding uncommitted changes (DEPRECATED)\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "--no-commit",
                    "content": "don't commit, just update the working directory\n",
                    "long": "--no-commit"
                },
                {
                    "name": "--bypass",
                    "content": "apply patch without touching the working directory\n",
                    "long": "--bypass"
                },
                {
                    "name": "--partial",
                    "content": "commit even if some hunks fail\n",
                    "long": "--partial"
                },
                {
                    "name": "--exact",
                    "content": "abort if patch would apply lossily\n\n--prefix <DIR>\napply patch to subdirectory\n",
                    "long": "--exact"
                },
                {
                    "name": "--import-branch",
                    "content": "use any branch information in patch (implied by --exact)\n",
                    "long": "--import-branch"
                },
                {
                    "name": "-m,_",
                    "content": "use text as commit message\n"
                },
                {
                    "name": "-l,_",
                    "content": "read commit message from file\n"
                },
                {
                    "name": "-d,_",
                    "content": "record the specified date as commit date\n"
                },
                {
                    "name": "-u,_",
                    "content": "record the specified user as committer\n"
                },
                {
                    "name": "-s,_",
                    "content": "guess renamed files by similarity (0<=s<=100)\n\naliases: patch\n"
                },
                {
                    "name": "unbundle",
                    "content": "apply one or more bundle files:\n\nhg unbundle [-u] FILE...\n\nApply one or more bundle files generated by hg bundle.\n\nReturns 0 on success, 1 if an update has unresolved files.\n\nOptions:\n"
                },
                {
                    "name": "-u, --update",
                    "content": "update to new branch head if changesets were unbundled\n",
                    "flag": "-u",
                    "long": "--update"
                },
                {
                    "name": "Repository maintenance",
                    "content": ""
                },
                {
                    "name": "admin::verify",
                    "content": "verify the integrity of the repository:\n\nhg admin::verify\n\nAlternative  UI to hg verify with a lot more control over the verification process and better\nerror reporting.\n\nOptions:\n"
                },
                {
                    "name": "-c,_",
                    "content": "add a check\n"
                },
                {
                    "name": "-o,_",
                    "content": "pass an option to a check\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "manifest",
                    "content": "output the current or given revision of the project manifest:\n\nhg manifest [-r REV]\n\nPrint a list of version controlled files for the given revision.  If no  revision  is  given,\nthe  first  parent  of  the working directory is used, or the null revision if no revision is\nchecked out.\n\nWith -v, print file permissions, symlink and executable bits.  With --debug, print file revi‐\nsion hashes.\n\nIf option --all is specified, the list of all files from all revisions is printed.  This  in‐\ncludes deleted and renamed files.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "revision to display\n\n--all  list files from all revisions\n"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "recover",
                    "content": "roll back an interrupted transaction:\n\nhg recover\n\nRecover from an interrupted commit or pull.\n\nThis  command  tries  to  fix the repository status after an interrupted operation. It should\nonly be necessary when Mercurial suggests it.\n\nReturns 0 if successful, 1 if nothing to recover or verify fails.\n\nOptions:\n"
                },
                {
                    "name": "--verify",
                    "content": "run hg verify after successful recover\n",
                    "long": "--verify"
                },
                {
                    "name": "rollback",
                    "content": "roll back the last transaction (DANGEROUS) (DEPRECATED):\n\nhg rollback\n\nPlease use hg commit --amend instead of rollback to correct mistakes in the last commit.\n\nThis command should be used with care. There is only one level of rollback, and there  is  no\nway  to  undo  a rollback. It will also restore the dirstate at the time of the last transac‐\ntion, losing any dirstate changes since that time. This command does not  alter  the  working\ndirectory.\n\nTransactions  are  used to encapsulate the effects of all commands that create new changesets\nor propagate existing changesets into a repository.\n\nFor example, the following commands are transactional, and their effects can be rolled back:\n\n• commit\n\n• import\n\n• pull\n\n• push (with this repository as the destination)\n\n• unbundle\n\nTo avoid permanent data loss, rollback will refuse to rollback a  commit  transaction  if  it\nisn't checked out. Use --force to override this protection.\n\nThe  rollback  command can be entirely disabled by setting the ui.rollback configuration set‐\nting to false. If you're here because you want to use rollback and  it's  disabled,  you  can\nre-enable the command by setting ui.rollback to true.\n\nThis  command  is  not  intended for use on public repositories. Once changes are visible for\npull by other users, rolling a transaction back locally is ineffective (someone else may  al‐\nready  have  pulled the changes). Furthermore, a race is possible with readers of the reposi‐\ntory; for example an in-progress pull from the repository may fail  if  a  rollback  is  per‐\nformed.\n\nReturns 0 on success, 1 if no rollback data is available.\n\nOptions:\n"
                },
                {
                    "name": "-n, --dry-run",
                    "content": "do not perform actions, just print output\n",
                    "flag": "-n",
                    "long": "--dry-run"
                },
                {
                    "name": "-f, --force",
                    "content": "ignore safety measures\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "verify",
                    "content": "verify the integrity of the repository:\n\nhg verify\n\nVerify the integrity of the current repository.\n\nThis will perform an extensive check of the repository's integrity, validating the hashes and\nchecksums  of  each  entry  in the changelog, manifest, and tracked files, as well as the in‐\ntegrity of their crosslinks and indices.\n\nPlease see https://mercurial-scm.org/wiki/RepositoryCorruption for more information about re‐\ncovery from corruption of the repository.\n\nFor an alternative UI with a lot more control over the verification process and better  error\nreporting, try hg help admin::verify.\n\nReturns 0 on success, 1 if errors are encountered.\n\nOptions:\n\n--full perform more checks (EXPERIMENTAL)\n"
                },
                {
                    "name": "Help",
                    "content": ""
                },
                {
                    "name": "config",
                    "content": "show combined config settings from all hgrc files:\n\nhg config [-u] [NAME]...\n\nWith no arguments, print names and values of all config items.\n\nWith one argument of the form section.name, print just the value of that config item.\n\nWith  multiple  arguments,  print  names and values of all config items with matching section\nnames or section.names.\n\nWith --edit, start an editor on the user-level config file.  With  --global,  edit  the  sys‐\ntem-wide config file. With --local, edit the repository-level config file.\n\nWith --source, the source (filename and line number) is printed for each config item.\n\nSee hg help config for more information about config files.\n\n--non-shared  flag  is used to edit .hg/hgrc-not-shared config file.  This file is not shared\nacross shares when in share-safe mode.\n\nTemplate:\n\nThe following keywords are supported. See also hg help templates.\n\nname   String. Config name.\n\nsource String. Filename and line number where the item is defined.\n\nvalue  String. Config value.\n\nThe --shared flag can be used to edit the config file of shared source  repository.  It  only\nworks when you have shared using the experimental share safe feature.\n\nReturns 0 on success, 1 if NAME does not exist.\n\nOptions:\n"
                },
                {
                    "name": "-u, --untrusted",
                    "content": "show untrusted configuration options\n",
                    "flag": "-u",
                    "long": "--untrusted"
                },
                {
                    "name": "--exp-all-known",
                    "content": "show all known config option (EXPERIMENTAL)\n",
                    "long": "--exp-all-known"
                },
                {
                    "name": "-e, --edit",
                    "content": "edit user config\n",
                    "flag": "-e",
                    "long": "--edit"
                },
                {
                    "name": "-l, --local",
                    "content": "edit repository config\n",
                    "flag": "-l",
                    "long": "--local"
                },
                {
                    "name": "--source",
                    "content": "show source of configuration value\n",
                    "long": "--source"
                },
                {
                    "name": "--shared",
                    "content": "edit shared source repository config (EXPERIMENTAL)\n",
                    "long": "--shared"
                },
                {
                    "name": "--non-shared",
                    "content": "edit non shared config (EXPERIMENTAL)\n",
                    "long": "--non-shared"
                },
                {
                    "name": "-g, --global",
                    "content": "edit global config\n",
                    "flag": "-g",
                    "long": "--global"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n\naliases: showconfig debugconfig\n"
                },
                {
                    "name": "help",
                    "content": "show help for a given topic or a help overview:\n\nhg help [-eck] [-s PLATFORM] [TOPIC]\n\nWith no arguments, print a list of commands with short help messages.\n\nGiven a topic, extension, or command name, print help for that topic.\n\nReturns 0 if successful.\n\nOptions:\n"
                },
                {
                    "name": "-e, --extension",
                    "content": "show only help for extensions\n",
                    "flag": "-e",
                    "long": "--extension"
                },
                {
                    "name": "-c, --command",
                    "content": "show only help for commands\n",
                    "flag": "-c",
                    "long": "--command"
                },
                {
                    "name": "-k, --keyword",
                    "content": "show topics matching keyword\n",
                    "flag": "-k",
                    "long": "--keyword"
                },
                {
                    "name": "-s,_",
                    "content": "show help for specific platform(s)\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "version",
                    "content": "output version and copyright information:\n\nhg version\n\nTemplate:\n\nThe following keywords are supported. See also hg help templates.\n"
                },
                {
                    "name": "extensions",
                    "content": "List of extensions.\n\nver    String. Version number.\n\nAnd each entry of {extensions} provides the following sub-keywords in addition to {ver}.\n"
                },
                {
                    "name": "bundled",
                    "content": "Boolean. True if included in the release.\n\nname   String. Extension name.\n\nOptions:\n"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "Uncategorized commands",
                    "content": ""
                },
                {
                    "name": "admin::chainsaw-update",
                    "content": "pull and update to a given revision, no matter what, (EXPERIMENTAL):\n\nhg admin::chainsaw-update [OPTION] --rev REV --source SOURCE --dest DEST\n\nContext  of  application:  some  Continuous Integration (CI) systems, packaging or deployment\ntools.\n\nWanted end result: local repository at the given REPOPATH, having the latest changes to  the\ngiven revision and with a clean working directory updated at the given revision.\n\nchainsaw-update  pulls from one source, then updates the working directory to the given revi‐\nsion, overcoming anything that would stand in the way.\n\nBy default, it will:\n\n• clone if the local repo does not exist yet, removing any directory at the given  path  that\nwould not be a Mercurial repository.  The initial clone is full by default, so that cloneb‐\nundles can be applied. Use the --initial-clone-minimal flag to avoid this.\n\n• break  locks  if  needed, leading to possible corruption if there is a concurrent write ac‐\ncess.\n\n• perform recovery actions if needed\n\n• revert any local modification.\n\n• purge unknown and ignored files.\n\n• go as far as to reclone if everything else failed (not implemented yet).\n\nDO NOT use it for anything else than performing a series of unattended updates, with full ex‐\nclusive repository access each time and without any  other  local  work  than  running  build\nscripts.  In case the local repository is a share (see hg help share), exclusive write access\nto the share source is also mandatory.\n\nIt is recommended to run these commands with the HGPLAIN environment variable (see hg script‐\ning).\n\nMotivation: in Continuous Integration and Delivery systems (CI/CD), the occasional remnant or\nbogus  lock  are common sources of waste of time (both working time and calendar time). CI/CD\nscripts tend to grow with counter- measures, often done in urgency. Also, whilst it  is  neat\nto keep repositories from one job to the next (especially with large repositories), an excep‐\ntional recloning is better than missing a release deadline.\n\nOptions:\n"
                },
                {
                    "name": "--purge-unknown",
                    "content": "Remove  unversioned  files  before  update. Disabling this can in some cases interfere\nwith the update.See also hg purge. (default: True)\n",
                    "long": "--purge-unknown"
                },
                {
                    "name": "--purge-ignored",
                    "content": "Remove ignored files before update. Disable this for instance to reuse  previous  com‐\npiler object files. See also hg purge. (default: True)\n\n--rev <VALUE>\nrevision to update to\n\n--source <VALUE>\nrepository to clone from\n\n--dest <VALUE>\nrepository to update to REV (possibly cloning)\n",
                    "long": "--purge-ignored"
                },
                {
                    "name": "--initial-clone-minimal",
                    "content": "Pull  only  the  prescribed revision upon initial cloning. This has the side effect of\nignoring clone-bundles, which if often slower on the client side and stressful to  the\nserver than applying available clone bundles.\n",
                    "long": "--initial-clone-minimal"
                }
            ]
        },
        "BUNDLE FILE FORMATS": {
            "content": "Mercurial  supports  generating  standalone  \"bundle\"  files that hold repository data. These\n\"bundles\" are typically saved locally and used later or exchanged between different reposito‐\nries, possibly on different machines. Example commands using bundles are hg bundle and hg un‐\nbundle.\n\nGeneration of bundle files is controlled by a \"bundle specification\"  (\"bundlespec\")  string.\nThis string tells the bundle generation process how to create the bundle.\n\nA \"bundlespec\" string is composed of the following elements:\n\ntype   A string denoting the bundle format to use.\n",
            "subsections": [
                {
                    "name": "compression",
                    "content": "Denotes the compression engine to use compressing the raw bundle data.\n"
                },
                {
                    "name": "parameters",
                    "content": "Arbitrary key-value parameters to further control bundle generation.\n\nA \"bundlespec\" string has the following formats:\n\n<type> The literal bundle format string is used.\n"
                },
                {
                    "name": "<compression>-<type>",
                    "content": "The compression engine and format are delimited by a hyphen (-).\n\nOptional  parameters follow the <type>. Parameters are URI escaped key=value pairs. Each pair\nis delimited by a semicolon (;). The first parameter begins after a ;  immediately  following\nthe <type> value.\n"
                },
                {
                    "name": "Available Types",
                    "content": "The following bundle <type> strings are available:\n\nv1     Produces a legacy \"changegroup\" version 1 bundle.\n\nThis  format is compatible with nearly all Mercurial clients because it is the oldest.\nHowever, it has some limitations, which is why it is no longer  the  default  for  new\nrepositories.\n\nv1  bundles can be used with modern repositories using the \"generaldelta\" storage for‐\nmat. However, it may take longer to produce the bundle and the resulting bundle may be\nsignificantly larger than a v2 bundle.\n\nv1 bundles can only use the gzip, bzip2, and none compression formats.\n\nv2     Produces a version 2 bundle.\n\nVersion 2 bundles are an extensible format that can store additional  repository  data\n(such  as  bookmarks and phases information) and they can store data more efficiently,\nresulting in smaller bundles.\n\nVersion 2 bundles can also use modern compression engines, such as zstd,  making  them\nfaster to compress and often smaller.\n"
                },
                {
                    "name": "Available Compression Engines",
                    "content": "The following bundle <compression> engines can be used:\n"
                },
                {
                    "name": "bzip2",
                    "content": "An algorithm that produces smaller bundles than gzip.\n\nAll Mercurial clients should support this format.\n\nThis  engine  will  likely produce smaller bundles than gzip but will be significantly\nslower, both during compression and decompression.\n\nIf available, the zstd engine can yield similar or better compression at  much  higher\nspeeds.\n"
                },
                {
                    "name": "gzip",
                    "content": "zlib compression using the DEFLATE algorithm.\n\nAll  Mercurial clients should support this format. The compression algorithm strikes a\nreasonable balance between compression ratio and size.\n"
                },
                {
                    "name": "none",
                    "content": "No compression is performed.\n\nUse this compression engine to explicitly disable compression.\n\nThe compression engines can be prepended with stream to create a streaming bundle.  These are\nbundles that are extremely efficient to produce and consume, but do not have guaranteed  com‐\npatibility with older clients.\n"
                },
                {
                    "name": "Available Options",
                    "content": "The following options exist:\n"
                },
                {
                    "name": "changegroup",
                    "content": "Include the changegroup data in the bundle (default to True).\n"
                },
                {
                    "name": "cg.version",
                    "content": "Select the version of the changegroup to use. Available options are : 01, 02 or 03. By\ndefault it will be automatically selected according to the current repository format.\n"
                },
                {
                    "name": "obsolescence",
                    "content": "Include obsolescence-markers relevant to the bundled changesets.\n\nphases Include phase information relevant to the bundled changesets.\n"
                },
                {
                    "name": "revbranchcache",
                    "content": "Include the \"tags-fnodes\" cache inside the bundle.\n"
                },
                {
                    "name": "tagsfnodescache",
                    "content": "Include the \"tags-fnodes\" cache inside the bundle.\n"
                },
                {
                    "name": "Examples",
                    "content": "v2\n\nProduce a v2 bundle using default options, including compression.\n"
                },
                {
                    "name": "none-v1",
                    "content": "Produce a v1 bundle with no compression.\n"
                },
                {
                    "name": "zstd-v2",
                    "content": "Produce a v2 bundle with zstandard compression using default settings.\n"
                },
                {
                    "name": "zstd-v1",
                    "content": "This errors because zstd is not supported for v1 types.\n"
                },
                {
                    "name": "none-streamv2",
                    "content": "Produce a v2 streaming bundle with no compression.\n"
                },
                {
                    "name": "zstd-v2;obsolescence=true;phases=true",
                    "content": "Produce a v2 bundle with zstandard compression which includes obsolescence markers and\nphases.\n"
                }
            ]
        },
        "COLORIZING OUTPUTS": {
            "content": "Mercurial colorizes output from several commands.\n\nFor example, the diff command shows additions in green and deletions in red, while the status\ncommand  shows  modified  files  in magenta. Many other commands have analogous colors. It is\npossible to customize these colors.\n\nTo enable color (default) whenever possible use:\n\n[ui]\ncolor = yes\n\nTo disable color use:\n\n[ui]\ncolor = no\n\nSee hg help config.ui.color for details.\n\nThe default pager on Windows does not support color, so enabling the pager  will  effectively\ndisable  color.   See hg help config.ui.paginate to disable the pager.  Alternately, MSYS and\nCygwin shells provide less as a pager, which can be configured to support  ANSI  color  mode.\nWindows 10 natively supports ANSI color mode.\n",
            "subsections": [
                {
                    "name": "Mode",
                    "content": "Mercurial  can use various systems to display color. The supported modes are ansi, win32, and\nterminfo.  See hg help config.color for details about how to control the mode.\n"
                },
                {
                    "name": "Effects",
                    "content": "Other effects in addition to color, like bold and underlined text, are also available. By de‐\nfault, the terminfo database is used to find the terminal codes used to change color and  ef‐\nfect.   If  terminfo is not available, then effects are rendered with the ECMA-48 SGR control\nfunction (aka ANSI escape codes).\n\nThe available effects in terminfo mode are 'blink', 'bold',  'dim',  'inverse',  'invisible',\n'italic',  'standout',  and  'underline'; in ECMA-48 mode, the options are 'bold', 'inverse',\n'italic', and 'underline'.  How each is rendered depends on the terminal emulator.  Some  may\nnot be available for a given terminal type, and will be silently ignored.\n\nIf  the  terminfo  entry  for  your  terminal is missing codes for an effect or has the wrong\ncodes, you can add or override those codes in your configuration:\n\n[color]\nterminfo.dim = \\E[2m\n\nwhere 'E' is substituted with an escape character.\n"
                },
                {
                    "name": "Labels",
                    "content": "Text receives color effects depending on the labels that it has. Many default Mercurial  com‐\nmands  emit  labelled  text. You can also define your own labels in templates using the label\nfunction, see hg help templates. In order to receive effects, labels must have a dot, such as\nlog.secret or branch.active. A single portion of text may have more than one label.  In  that\ncase, effects given to the last label will override any other effects. This includes the spe‐\ncial \"none\" effect, which nullifies other effects.\n\nLabels  are  normally invisible. In order to see these labels and their position in the text,\nuse the global --color=debug option. The same anchor text may be associated to  multiple  la‐\nbels, e.g.\n\n[log.changeset changeset.secret|changeset:   22611:6f0a53c8f587]\n\nThe  following  are the default effects for some default labels. Default effects may be over‐\nridden from your configuration file:\n\n[color]\nstatus.modified = blue bold underline redbackground\nstatus.added = green bold\nstatus.removed = red bold bluebackground\nstatus.deleted = cyan bold underline\nstatus.unknown = magenta bold underline\nstatus.ignored = black bold\n\n# 'none' turns off all effects\nstatus.clean = none\nstatus.copied = none\n\nqseries.applied = blue bold underline\nqseries.unapplied = black bold\nqseries.missing = red bold\n\ndiff.diffline = bold\ndiff.extended = cyan bold\ndiff.filea = red bold\ndiff.fileb = green bold\ndiff.hunk = magenta\ndiff.deleted = red\ndiff.inserted = green\ndiff.changed = white\ndiff.tab =\ndiff.trailingwhitespace = bold redbackground\n\n# Blank so it inherits the style of the surrounding label\nchangeset.public =\nchangeset.draft =\nchangeset.secret =\n\nresolve.unresolved = red bold\nresolve.resolved = green bold\n\nbookmarks.active = green\n\nbranches.active = none\nbranches.closed = black bold\nbranches.current = green\nbranches.inactive = none\n\ntags.normal = green\ntags.local = black bold\n\nrebase.rebased = blue\nrebase.remaining = red bold\n\nshelve.age = cyan\nshelve.newest = green bold\nshelve.name = blue bold\n\nhistedit.remaining = red bold\n"
                },
                {
                    "name": "Custom colors",
                    "content": "Because there are only eight standard colors, Mercurial allows you to define color names  for\nother  color  slots  which might be available for your terminal type, assuming terminfo mode.\nFor instance:\n\ncolor.brightblue = 12\ncolor.pink = 207\ncolor.orange = 202\n\nto set 'brightblue' to color slot 12 (useful for 16 color terminals that have brighter colors\ndefined in the upper eight) and, 'pink' and 'orange' to colors in 256-color  xterm's  default\ncolor cube.  These defined colors may then be used as any of the pre-defined eight, including\nappending 'background' to set the background to that color.\n"
                }
            ]
        },
        "DATE FORMATS": {
            "content": "Some commands allow the user to specify a date, e.g.:\n\n• backout, commit, import, tag: Specify the commit date.\n\n• log, revert, update: Select revision(s) by date.\n\nMany date formats are valid. Here are some examples:\n\n• Wed Dec 6 13:18:29 2006 (local timezone assumed)\n\n• Dec 6 13:18 -0600 (year assumed, time offset provided)\n\n• Dec 6 13:18 UTC (UTC and GMT are aliases for +0000)\n\n• Dec 6 (midnight)\n\n• 13:18 (today assumed)\n\n• 3:39 (3:39AM assumed)\n\n• 3:39pm (15:39)\n\n• 2006-12-06 13:18:29 (ISO 8601 format)\n\n• 2006-12-6 13:18\n\n• 2006-12-6\n\n• 12-6\n\n• 12/6\n\n• 12/6/6 (Dec 6 2006)\n\n• today (midnight)\n\n• yesterday (midnight)\n\n• now - right now\n\nLastly, there is Mercurial's internal format:\n\n• 1165411109 0 (Wed Dec 6 13:18:29 2006 UTC)\n\nThis  is the internal representation format for dates. The first number is the number of sec‐\nonds since the epoch (1970-01-01 00:00 UTC). The second is the offset of the local  timezone,\nin seconds west of UTC (negative if the timezone is east of UTC).\n\nThe log command also accepts date ranges:\n\n• <DATE - at or before a given date/time\n\n• >DATE - on or after a given date/time\n\n• DATE to DATE - a date range, inclusive\n\n• -DAYS - within a given number of days from today\n",
            "subsections": []
        },
        "DEPRECATED FEATURES": {
            "content": "Mercurial  evolves  over time, some features, options, commands may be replaced by better and\nmore secure alternatives. This topic will help you migrating your existing usage and/or  con‐\nfiguration to newer features.\n",
            "subsections": [
                {
                    "name": "Commands",
                    "content": "The following commands are still available but their use are not recommended:\n"
                },
                {
                    "name": "locate",
                    "content": "This command has been replaced by hg files.\n"
                },
                {
                    "name": "parents",
                    "content": "This  command  can  be replaced by hg summary or hg log with appropriate revsets. See hg help\nrevsets for more information.\n"
                },
                {
                    "name": "tip",
                    "content": "The recommended alternative is hg heads.\n"
                },
                {
                    "name": "Options",
                    "content": ""
                },
                {
                    "name": "web.allowpull",
                    "content": "Renamed to allow-pull.\n"
                },
                {
                    "name": "web.allow_push",
                    "content": "Renamed to allow-push.\n"
                }
            ]
        },
        "DIFF FORMATS": {
            "content": "Mercurial's default format for showing changes between two versions of a file  is  compatible\nwith  the  unified format of GNU diff, which can be used by GNU patch and many other standard\ntools.\n\nWhile this standard format is often enough, it does not encode the following information:\n\n• executable status and other permission bits\n\n• copy or rename information\n\n• changes in binary files\n\n• creation or deletion of empty files\n\nMercurial also supports the extended diff format from the git VCS which addresses these limi‐\ntations. The git diff format is not produced by default because a few widespread tools  still\ndo not understand this format.\n\nThis  means that when generating diffs from a Mercurial repository (e.g. with hg export), you\nshould be careful about things like file copies and renames or other things mentioned  above,\nbecause  when  applying  a standard diff to a different repository, this extra information is\nlost. Mercurial's internal operations (like push and pull) are not affected by this,  because\nthey use an internal binary format for communicating changes.\n\nTo  make  Mercurial  produce the git extended diff format, use the --git option available for\nmany commands, or set 'git = True' in the [diff] section of your configuration file.  You  do\nnot  need  to set this option when importing diffs in this format or using them in the mq ex‐\ntension.\n",
            "subsections": []
        },
        "ENVIRONMENT VARIABLES": {
            "content": "HG     Path to the 'hg' executable, automatically passed when running  hooks,  extensions  or\nexternal tools. If unset or empty, this is the hg executable's name if it's frozen, or\nan executable named 'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on\nWindows) is searched.\n\nHGEDITOR\nThis is the name of the editor to run when committing. See EDITOR.\n\n(deprecated, see hg help config.ui.editor)\n\nHGENCODING\nThis overrides the default locale setting detected by Mercurial.  This setting is used\nto  convert data including usernames, changeset descriptions, tag names, and branches.\nThis setting can be overridden with the --encoding command-line option.\n\nHGENCODINGMODE\nThis sets Mercurial's behavior for handling unknown characters while transcoding  user\ninput.  The  default  is  \"strict\",  which causes Mercurial to abort if it can't map a\ncharacter. Other settings include \"replace\", which replaces  unknown  characters,  and\n\"ignore\",  which  drops  them.  This setting can be overridden with the --encodingmode\ncommand-line option.\n\nHGENCODINGAMBIGUOUS\nThis sets Mercurial's behavior for handling characters with  \"ambiguous\"  widths  like\naccented Latin characters with East Asian fonts. By default, Mercurial assumes ambigu‐\nous  characters  are narrow, set this variable to \"wide\" if such characters cause for‐\nmatting problems.\n\nHGMERGE\nAn executable to use for resolving merge conflicts. The program will be executed  with\nthree arguments: local file, remote file, ancestor file.\n\n(deprecated, see hg help config.ui.merge)\n\nHGRCPATH\nA  list  of  files or directories to search for configuration files. Item separator is\n\":\" on Unix, \";\" on Windows. If HGRCPATH is not set, platform default search  path  is\nused. If empty, only the .hg/hgrc from the current repository is read.\n\nFor each element in HGRCPATH:\n\n• if it's a directory, all files ending with .rc are added\n\n• otherwise, the file itself will be added\n\nHGRCSKIPREPO\nWhen set, the .hg/hgrc from repositories are not read.\n\nHGPLAIN\nWhen  set,  this disables any configuration settings that might change Mercurial's de‐\nfault output. This includes encoding, defaults, verbose mode, debug mode, quiet  mode,\ntracebacks,  and  localization. This can be useful when scripting against Mercurial in\nthe face of existing user configuration.\n\nIn addition to the features disabled by HGPLAIN=, the following values can  be  speci‐\nfied to adjust behavior:\n\n+strictflags\n\nRestrict parsing of command line flags.\n\nEquivalent  options  set via command line flags or environment variables are not over‐\nridden.\n\nSee hg help scripting for details.\n\nHGPLAINEXCEPT\nThis is a comma-separated list of features to preserve when HGPLAIN is  enabled.  Cur‐\nrently the following values are supported:\n\nalias\n\nDon't remove aliases.\n\ncolor\n\nDon't disable colored output.\n\ni18n\n\nPreserve internationalization.\n\nrevsetalias\n\nDon't remove revset aliases.\n\ntemplatealias\n\nDon't remove template aliases.\n\nprogress\n\nDon't hide progress output.\n\nSetting HGPLAINEXCEPT to anything (even an empty string) will enable plain mode.\n\nHGUSER This  is  the string used as the author of a commit. If not set, available values will\nbe considered in this order:\n\n• HGUSER (deprecated)\n\n• configuration files from the HGRCPATH\n\n• EMAIL\n\n• interactive prompt\n\n• LOGNAME (with @hostname appended)\n\n(deprecated, see hg help config.ui.username)\n\nEMAIL  May be used as the author of a commit; see HGUSER.\n\nLOGNAME\nMay be used as the author of a commit; see HGUSER.\n\nVISUAL This is the name of the editor to use when committing. See EDITOR.\n\nEDITOR Sometimes Mercurial needs to open a text file in an editor for a user to  modify,  for\nexample  when  writing commit messages. The editor it uses is determined by looking at\nthe environment variables HGEDITOR, VISUAL  and  EDITOR,  in  that  order.  The  first\nnon-empty one is chosen. If all of them are empty, the editor defaults to 'vi'.\n\nPYTHONPATH\nThis  is  used by Python to find imported modules and may need to be set appropriately\nif this Mercurial is not installed system-wide.\n\nSAFELY REWRITING HISTORY (EXPERIMENTAL)\nObsolescence markers make it possible to mark changesets that have been deleted or superseded\nin a new version of the changeset.\n\nUnlike the previous way of handling such changes, by stripping the old  changesets  from  the\nrepository,  obsolescence  markers  can be propagated between repositories. This allows for a\nsafe and simple way of exchanging mutable history and altering it after the  fact.  Changeset\nphases  are respected, such that only draft and secret changesets can be altered (see hg help\nphases for details).\n\nObsolescence is tracked using \"obsolescence markers\", a  piece  of  metadata  tracking  which\nchangesets  have  been  made obsolete, potential successors for a given changeset, the moment\nthe changeset was marked as obsolete, and the user who performed the rewriting operation. The\nmarkers are stored separately from standard changeset data can be exchanged  without  any  of\nthe precursor changesets, preventing unnecessary exchange of obsolescence data.\n\nThe  complete set of obsolescence markers describes a history of changeset modifications that\nis orthogonal to the repository history of file modifications. This changeset history  allows\nfor  detection  and  automatic resolution of edge cases arising from multiple users rewriting\nthe same part of history concurrently.\n",
            "subsections": [
                {
                    "name": "Current feature status",
                    "content": "This feature is still in development.\n"
                },
                {
                    "name": "Instability",
                    "content": "Rewriting changesets might introduce instability.\n\nThere are two main kinds of instability: orphaning and diverging.\n\nOrphans are changesets left behind when their ancestors are rewritten.   Divergence  has  two\nvariants:\n\n• Content-divergence  occurs when independent rewrites of the same changesets lead to differ‐\nent results.\n\n• Phase-divergence occurs when the old (obsolete) version of a changeset becomes public.\n\nIt is possible to prevent local creation of orphans by using the following config:\n\n[experimental]\nevolution.createmarkers = true\nevolution.exchange = true\n\nYou can also enable that option explicitly:\n\n[experimental]\nevolution.createmarkers = true\nevolution.exchange = true\nevolution.allowunstable = true\n"
                }
            ]
        },
        "USING ADDITIONAL FEATURES": {
            "content": "Mercurial has the ability to add new features through the use of extensions.  Extensions  may\nadd  new commands, add options to existing commands, change the default behavior of commands,\nor implement hooks.\n\nTo enable the \"foo\" extension, either shipped with Mercurial or in the  Python  search  path,\ncreate an entry for it in your configuration file, like this:\n\n[extensions]\nfoo =\n\nYou may also specify the full path to an extension:\n\n[extensions]\nmyfeature = ~/.hgext/myfeature.py\n\nSee hg help config for more information on configuration files.\n\nExtensions  are  not  loaded  by  default for a variety of reasons: they can increase startup\noverhead; they may be meant for advanced usage only; they may provide  potentially  dangerous\nabilities  (such as letting you destroy or modify history); they might not be ready for prime\ntime; or they may alter some usual behaviors of stock Mercurial. It is thus up to the user to\nactivate extensions as needed.\n\nTo explicitly disable an extension enabled in a configuration file of broader scope,  prepend\nits path with !:\n\n[extensions]\n# disabling extension bar residing in /path/to/extension/bar.py\nbar = !/path/to/extension/bar.py\n# ditto, but no path was supplied for extension baz\nbaz = !\n\ndisabled extensions:\n\nacl    hooks for controlling repository access\n\nblackbox\nlog repository events to a blackbox for debugging\n\nbugzilla\nhooks for integrating with the Bugzilla bug tracker\n\ncensor erase file content at a given revision\n\nchurn  command to display statistics about repository history\n\nclonebundles\nadvertise pre-generated bundles to seed clones\n\nclosehead\nclose arbitrary heads without checking them out first\n\nconvert\nimport revisions from foreign VCS repositories into Mercurial\n\neol    automatically manage newlines in repository files\n\nextdiff\ncommand to allow external programs to compare revisions\n\nfactotum\nhttp authentication with factotum\n\nfastexport\nexport repositories as git fast-import stream\n\ngithelp\ntry mapping git commands to Mercurial commands\n\ngpg    commands to sign and verify changesets\n\nhgk    browse the repository in a graphical way\n\nhighlight\nsyntax highlighting for hgweb (requires Pygments)\n\nhistedit\ninteractive history editing\n\nkeyword\nexpand keywords in tracked files\n\nlargefiles\ntrack large binary files\n\nmq     manage a stack of patches\n\nnotify hooks for sending email push notifications\n\npatchbomb\ncommand to send changesets as (a series of) patch emails\n\nrebase command to move sets of revisions to a different ancestor\n\nrelink recreates hardlinks between repository clones\n\nschemes\nextend schemes with shortcuts to repository swarms\n\nshare  share a common history between several working directories\n\ntransplant\ncommand to transplant changesets from another branch\n\nwin32mbcs\nallow the use of MBCS paths with problematic encodings\n\nzeroconf\ndiscover and advertise repositories on the local network\n",
            "subsections": []
        },
        "SPECIFYING FILE SETS": {
            "content": "Mercurial supports a functional language for selecting a set of files.\n\nLike  other  file  patterns, this pattern type is indicated by a prefix, 'set:'. The language\nsupports a number of predicates which are joined by infix operators. Parenthesis can be  used\nfor grouping.\n\nIdentifiers such as filenames or patterns must be quoted with single or double quotes if they\ncontain characters outside of [.*{}[]?/\\a-zA-Z0-9\\x80-\\xff] or if they match one of the pre‐\ndefined  predicates.  This  generally applies to file patterns other than globs and arguments\nfor predicates. Pattern prefixes such as path: may be specified without quoting.\n\nSpecial characters can be used in quoted identifiers by escaping them,  e.g.,  \\n  is  inter‐\npreted  as a newline. To prevent them from being interpreted, strings can be prefixed with r,\ne.g. r'...'.\n\nSee also hg help patterns.\n",
            "subsections": [
                {
                    "name": "Operators",
                    "content": "There is a single prefix operator:\n"
                },
                {
                    "name": "not x",
                    "content": "Files not in x. Short form is ! x.\n\nThese are the supported infix operators:\n"
                },
                {
                    "name": "x and y",
                    "content": "The intersection of files in x and y. Short form is x & y.\n"
                },
                {
                    "name": "x or y",
                    "content": "The union of files in x and y. There are two alternative short forms: x | y and x + y.\n"
                },
                {
                    "name": "x - y",
                    "content": "Files in x but not in y.\n"
                },
                {
                    "name": "Predicates",
                    "content": "The following predicates are supported:\n"
                },
                {
                    "name": "added()",
                    "content": "File that is added according to hg status.\n"
                },
                {
                    "name": "binary()",
                    "content": "File that appears to be binary (contains NUL bytes).\n"
                },
                {
                    "name": "clean()",
                    "content": "File that is clean according to hg status.\n"
                },
                {
                    "name": "copied()",
                    "content": "File that is recorded as being copied.\n"
                },
                {
                    "name": "deleted()",
                    "content": "Alias for missing().\n"
                },
                {
                    "name": "encoding(name)",
                    "content": "File can be successfully decoded with the given character encoding. May not be  useful\nfor encodings other than ASCII and UTF-8.\n"
                },
                {
                    "name": "eol(style)",
                    "content": "File contains newlines of the given style (dos, unix, mac). Binary files are excluded,\nfiles with mixed line endings match multiple styles.\n"
                },
                {
                    "name": "exec()",
                    "content": "File that is marked as executable.\n"
                },
                {
                    "name": "grep(regex)",
                    "content": "File contains the given regular expression.\n"
                },
                {
                    "name": "hgignore()",
                    "content": "File that matches the active .hgignore pattern.\n"
                },
                {
                    "name": "ignored()",
                    "content": "File that is ignored according to hg status.\n"
                },
                {
                    "name": "missing()",
                    "content": "File that is missing according to hg status.\n"
                },
                {
                    "name": "modified()",
                    "content": "File that is modified according to hg status.\n"
                },
                {
                    "name": "portable()",
                    "content": "File that has a portable name. (This doesn't include filenames with case collisions.)\n"
                },
                {
                    "name": "removed()",
                    "content": "File that is removed according to hg status.\n"
                },
                {
                    "name": "resolved()",
                    "content": "File that is marked resolved according to hg resolve -l.\n"
                },
                {
                    "name": "revs(revs, pattern)",
                    "content": "Evaluate  set in the specified revisions. If the revset match multiple revs, this will\nreturn file matching pattern in any of the revision.\n"
                },
                {
                    "name": "size(expression)",
                    "content": "File size matches the given expression. Examples:\n\n• size('1k') - files from 1024 to 2047 bytes\n\n• size('< 20k') - files less than 20480 bytes\n\n• size('>= .5MB') - files at least 524288 bytes\n\n• size('4k - 1MB') - files from 4096 bytes to 1048576 bytes\n"
                },
                {
                    "name": "status(base, rev, pattern)",
                    "content": "Evaluate predicate using status change between base and rev. Examples:\n\n• status(3, 7, added()) - matches files added from \"3\" to \"7\"\n"
                },
                {
                    "name": "subrepo([pattern])",
                    "content": "Subrepositories whose paths match the given pattern.\n"
                },
                {
                    "name": "symlink()",
                    "content": "File that is marked as a symlink.\n"
                },
                {
                    "name": "tracked()",
                    "content": "File that is under Mercurial control.\n"
                },
                {
                    "name": "unknown()",
                    "content": "File that is unknown according to hg status.\n"
                },
                {
                    "name": "unresolved()",
                    "content": "File that is marked unresolved according to hg resolve -l.\n"
                },
                {
                    "name": "Examples",
                    "content": "Some sample queries:\n\n• Show status of files that appear to be binary in the working directory:\n\nhg status -A \"set:binary()\"\n\n• Forget files that are in .hgignore but are already tracked:\n\nhg forget \"set:hgignore() and not ignored()\"\n\n• Find text files that contain a string:\n\nhg files \"set:grep(magic) and not binary()\"\n\n• Find C files in a non-standard encoding:\n\nhg files \"set:.c and not encoding('UTF-8')\"\n\n• Revert copies of large binary files:\n\nhg revert \"set:copied() and binary() and size('>1M')\"\n\n• Revert files that were added to the working directory:\n\nhg revert \"set:revs('wdir()', added())\"\n\n• Remove files listed in foo.lst that contain the letter a or b:\n\nhg remove \"set: listfile:foo.lst and (a* or b*)\"\n"
                }
            ]
        },
        "COMMAND-LINE FLAGS": {
            "content": "Most Mercurial commands accept various flags.\n",
            "subsections": [
                {
                    "name": "Flag names",
                    "content": "Flags for each command are listed in hg help for that  command.   Additionally,  some  flags,\nsuch as --repository, are global and can be used with any command - those are seen in hg help"
                },
                {
                    "name": "-v",
                    "content": "Every  flag  has at least a long name, such as --repository. Some flags may also have a short\none-letter name, such as the equivalent -R. Using the short or long name  is  equivalent  and\nhas the same effect. The long name may be abbreviated to any unambiguous prefix. For example,\nhg commit --amend can be abbreviated to hg commit --am.\n\nFlags  that  have  a  short name can also be bundled together - for instance, to specify both\n--edit (short -e) and --interactive (short -i), one could use:\n\nhg commit -ei\n\nIf any of the bundled flags takes a value (i.e. is not a boolean), it must be last,  followed\nby the value:\n\nhg commit -im 'Message'\n",
                    "flag": "-v"
                },
                {
                    "name": "Flag types",
                    "content": "Mercurial command-line flags can be strings, numbers, booleans, or lists of strings.\n"
                },
                {
                    "name": "Specifying flag values",
                    "content": "The following syntaxes are allowed, assuming a flag 'flagname' with short name 'f':\n\n--flagname=foo\n--flagname foo\n-f foo"
                },
                {
                    "name": "-ffoo",
                    "content": "This syntax applies to all non-boolean flags (strings, numbers or lists).\n"
                },
                {
                    "name": "Specifying boolean flags",
                    "content": "Boolean  flags  do not take a value parameter. To specify a boolean, use the flag name to set\nit to true, or the same name prefixed with 'no-' to set it to false:\n\nhg commit --interactive\nhg commit --no-interactive\n"
                },
                {
                    "name": "Specifying list flags",
                    "content": "List flags take multiple values. To specify them, pass the flag multiple times:\n\nhg files --include mercurial --include tests\n"
                },
                {
                    "name": "Setting flag defaults",
                    "content": "In order to set a default value for a flag in an hgrc file, it is recommended to use aliases:\n\n[alias]\ncommit = commit --interactive\n\nFor more information on hgrc files, see hg help config.\n"
                },
                {
                    "name": "Overriding flags on the command line",
                    "content": "If the same non-list flag is specified multiple times on the command line, the latest  speci‐\nfication is used:\n\nhg commit -m \"Ignored value\" -m \"Used value\"\n\nThis includes the use of aliases - e.g., if one has:\n\n[alias]\ncommittemp = commit -m \"Ignored value\"\n\nthen the following command will override that -m:\n\nhg committemp -m \"Used value\"\n"
                },
                {
                    "name": "Overriding flag defaults",
                    "content": "Every  flag  has a default value, and you may also set your own defaults in hgrc as described\nabove.  Except for list flags, defaults can be overridden on the command line simply by spec‐\nifying the flag in that location.\n"
                },
                {
                    "name": "Hidden flags",
                    "content": "Some flags are not shown in a command's help by default - specifically, those that are deemed\nto be experimental, deprecated or advanced. To show all flags, add the --verbose flag for the\nhelp command:\n\nhg help --verbose commit\n"
                }
            ]
        },
        "GLOSSARY": {
            "content": "",
            "subsections": [
                {
                    "name": "Ancestor",
                    "content": "Any changeset that can be reached by an unbroken chain of  parent  changesets  from  a\ngiven  changeset.  More  precisely, the ancestors of a changeset can be defined by two\nproperties: a parent of a changeset is an ancestor, and a parent of an ancestor is  an\nancestor. See also: 'Descendant'.\n"
                },
                {
                    "name": "Bookmark",
                    "content": "Bookmarks  are pointers to certain commits that move when committing. They are similar\nto tags in that it is possible to use bookmark names in all places where Mercurial ex‐\npects a changeset ID, e.g., with hg update. Unlike tags, bookmarks move along when you\nmake a commit.\n\nBookmarks can be renamed, copied and deleted. Bookmarks are local, unless they are ex‐\nplicitly pushed or pulled between repositories.  Pushing and pulling  bookmarks  allow\nyou to collaborate with others on a branch without creating a named branch.\n\nBranch (Noun) A child changeset that has been created from a parent that is not a head. These\nare  known as topological branches, see 'Branch, topological'. If a topological branch\nis named, it becomes a named branch. If a topological branch is not named, it  becomes\nan anonymous branch. See 'Branch, anonymous' and 'Branch, named'.\n\nBranches may be created when changes are pulled from or pushed to a remote repository,\nsince new heads may be created by these operations. Note that the term branch can also\nbe  used  informally to describe a development process in which certain development is\ndone independently of other development. This is  sometimes  done  explicitly  with  a\nnamed branch, but it can also be done locally, using bookmarks or clones and anonymous\nbranches.\n\nExample: \"The experimental branch.\"\n\n(Verb)  The  action  of  creating a child changeset which results in its parent having\nmore than one child.\n\nExample: \"I'm going to branch at X.\"\n"
                },
                {
                    "name": "Branch, anonymous",
                    "content": "Every time a new child changeset is created from a parent that is not a head  and  the\nname of the branch is not changed, a new anonymous branch is created.\n"
                },
                {
                    "name": "Branch, closed",
                    "content": "A named branch whose branch heads have all been closed.\n"
                },
                {
                    "name": "Branch, default",
                    "content": "The branch assigned to a changeset when no name has previously been assigned.\n"
                },
                {
                    "name": "Branch head",
                    "content": "See 'Head, branch'.\n"
                },
                {
                    "name": "Branch, inactive",
                    "content": "If a named branch has no topological heads, it is considered to be inactive. As an ex‐\nample,  a  feature  branch becomes inactive when it is merged into the default branch.\nThe hg branches command shows inactive branches by default, though they can be  hidden\nwith hg branches --active.\n\nNOTE:  this  concept is deprecated because it is too implicit.  Branches should now be\nexplicitly closed using hg commit --close-branch when they are no longer needed.\n"
                },
                {
                    "name": "Branch, named",
                    "content": "A collection of changesets which have the same branch name. By default, children of  a\nchangeset in a named branch belong to the same named branch. A child can be explicitly\nassigned  to  a  different  branch. See hg help branch, hg help branches and hg commit\n--close-branch for more information on managing branches.\n\nNamed branches can be thought of as a kind of namespace, dividing  the  collection  of\nchangesets that comprise the repository into a collection of disjoint subsets. A named\nbranch  is not necessarily a topological branch. If a new named branch is created from\nthe head of another named branch, or the default branch, but no further changesets are\nadded to that previous branch, then that previous branch will  be  a  branch  in  name\nonly.\n"
                },
                {
                    "name": "Branch tip",
                    "content": "See 'Tip, branch'.\n"
                },
                {
                    "name": "Branch, topological",
                    "content": "Every  time  a  new child changeset is created from a parent that is not a head, a new\ntopological branch is created. If a topological branch is named, it  becomes  a  named\nbranch.  If  a  topological branch is not named, it becomes an anonymous branch of the\ncurrent, possibly default, branch.\n"
                },
                {
                    "name": "Changelog",
                    "content": "A record of the changesets in the order in which they were added  to  the  repository.\nThis  includes details such as changeset id, author, commit message, date, and list of\nchanged files.\n"
                },
                {
                    "name": "Changeset",
                    "content": "A snapshot of the state of the repository used to record a change.\n"
                },
                {
                    "name": "Changeset, child",
                    "content": "The converse of parent changeset: if P is a parent of C, then C is a child of P. There\nis no limit to the number of children that a changeset may have.\n"
                },
                {
                    "name": "Changeset id",
                    "content": "A SHA-1 hash that uniquely identifies a changeset. It may be represented as  either  a\n\"long\" 40 hexadecimal digit string, or a \"short\" 12 hexadecimal digit string.\n"
                },
                {
                    "name": "Changeset, merge",
                    "content": "A changeset with two parents. This occurs when a merge is committed.\n"
                },
                {
                    "name": "Changeset, parent",
                    "content": "A  revision upon which a child changeset is based. Specifically, a parent changeset of\na changeset C is a changeset whose node immediately precedes C in the DAG.  Changesets\nhave at most two parents.\n"
                },
                {
                    "name": "Checkout",
                    "content": "(Noun)  The  working  directory  being updated to a specific revision. This use should\nprobably be avoided where possible, as changeset is much more appropriate than  check‐\nout in this context.\n\nExample: \"I'm using checkout X.\"\n\n(Verb) Updating the working directory to a specific changeset. See hg help update.\n\nExample: \"I'm going to check out changeset X.\"\n"
                },
                {
                    "name": "Child changeset",
                    "content": "See 'Changeset, child'.\n"
                },
                {
                    "name": "Close changeset",
                    "content": "See 'Head, closed branch'.\n"
                },
                {
                    "name": "Closed branch",
                    "content": "See 'Branch, closed'.\n\nClone  (Noun)  An  entire  or  partial copy of a repository. The partial clone must be in the\nform of a revision and its ancestors.\n\nExample: \"Is your clone up to date?\"\n\n(Verb) The process of creating a clone, using hg clone.\n\nExample: \"I'm going to clone the repository.\"\n"
                },
                {
                    "name": "Closed branch head",
                    "content": "See 'Head, closed branch'.\n\nCommit (Noun) A synonym for changeset.\n\nExample: \"Is the bug fixed in your recent commit?\"\n\n(Verb) The act of recording changes to a repository. When files  are  committed  in  a\nworking  directory,  Mercurial  finds  the differences between the committed files and\ntheir parent changeset, creating a new changeset in the repository.\n\nExample: \"You should commit those changes now.\"\n\nCset   A common abbreviation of the term changeset.\n\nDAG    The repository of changesets of a distributed version control system (DVCS) can be de‐\nscribed as a directed acyclic graph (DAG), consisting of nodes and edges, where  nodes\ncorrespond to changesets and edges imply a parent -> child relation. This graph can be\nvisualized by graphical tools such as hg log --graph. In Mercurial, the DAG is limited\nby the requirement for children to have at most two parents.\n"
                },
                {
                    "name": "Deprecated",
                    "content": "Feature removed from documentation, but not scheduled for removal.\n"
                },
                {
                    "name": "Default branch",
                    "content": "See 'Branch, default'.\n"
                },
                {
                    "name": "Descendant",
                    "content": "Any  changeset that can be reached by a chain of child changesets from a given change‐\nset. More precisely, the descendants of a changeset can be defined by two  properties:\nthe  child  of a changeset is a descendant, and the child of a descendant is a descen‐\ndant. See also: 'Ancestor'.\n\nDiff   (Noun) The difference between the contents and attributes of files in  two  changesets\nor  a  changeset  and  the current working directory. The difference is usually repre‐\nsented in a standard form called a \"diff\" or \"patch\". The \"git diff\"  format  is  used\nwhen the changes include copies, renames, or changes to file attributes, none of which\ncan be represented/handled by classic \"diff\" and \"patch\".\n\nExample: \"Did you see my correction in the diff?\"\n\n(Verb) Diffing two changesets is the action of creating a diff or patch.\n\nExample: \"If you diff with changeset X, you will see what I mean.\"\n"
                },
                {
                    "name": "Directory, working",
                    "content": "The  working  directory  represents  the state of the files tracked by Mercurial, that\nwill be recorded in the next commit. The working directory  initially  corresponds  to\nthe  snapshot  at an existing changeset, known as the parent of the working directory.\nSee 'Parent, working directory'. The state may be modified by changes to the files in‐\ntroduced manually or by a merge. The repository metadata exists in the  .hg  directory\ninside the working directory.\n\nDraft  Changesets  in  the  draft phase have not been shared with publishing repositories and\nmay thus be safely changed by history-modifying extensions. See hg help phases.\n"
                },
                {
                    "name": "Experimental",
                    "content": "Feature that may change or be removed at a later date.\n\nGraph  See DAG and hg log --graph.\n\nHead   The term 'head' may be used to refer to both a branch head or a repository  head,  de‐\npending on the context. See 'Head, branch' and 'Head, repository' for specific defini‐\ntions.\n\nHeads are where development generally takes place and are the usual targets for update\nand merge operations.\n"
                },
                {
                    "name": "Head, branch",
                    "content": "A changeset with no descendants on the same named branch.\n"
                },
                {
                    "name": "Head, closed branch",
                    "content": "A  changeset  that marks a head as no longer interesting. The closed head is no longer\nlisted by hg heads. A branch is considered closed when all its heads  are  closed  and\nconsequently is not listed by hg branches.\n\nClosed  heads can be re-opened by committing new changeset as the child of the change‐\nset that marks a head as closed.\n"
                },
                {
                    "name": "Head, repository",
                    "content": "A topological head which has not been closed.\n"
                },
                {
                    "name": "Head, topological",
                    "content": "A changeset with no children in the repository.\n"
                },
                {
                    "name": "History, immutable",
                    "content": "Once committed, changesets cannot be altered.  Extensions which appear to change  his‐\ntory  actually  create new changesets that replace existing ones, and then destroy the\nold changesets. Doing so in public repositories can result  in  old  changesets  being\nreintroduced to the repository.\n"
                },
                {
                    "name": "History, rewriting",
                    "content": "The  changesets in a repository are immutable. However, extensions to Mercurial can be\nused to alter the repository, usually in such a way as to preserve changeset contents.\n"
                },
                {
                    "name": "Immutable history",
                    "content": "See 'History, immutable'.\n"
                },
                {
                    "name": "Merge changeset",
                    "content": "See 'Changeset, merge'.\n"
                },
                {
                    "name": "Manifest",
                    "content": "Each changeset has a manifest, which is the list of files  that  are  tracked  by  the\nchangeset.\n\nMerge  Used  to bring together divergent branches of work. When you update to a changeset and\nthen merge another changeset, you bring the history of the latter changeset into  your\nworking directory. Once conflicts are resolved (and marked), this merge may be commit‐\nted as a merge changeset, bringing two branches together in the DAG.\n"
                },
                {
                    "name": "Named branch",
                    "content": "See 'Branch, named'.\n"
                },
                {
                    "name": "Null changeset",
                    "content": "The  empty  changeset.  It  is  the parent state of newly-initialized repositories and\nrepositories with no checked out revision. It is thus the parent  of  root  changesets\nand  the effective ancestor when merging unrelated changesets. Can be specified by the\nalias 'null' or by the changeset ID '000000000000'.\n\nParent See 'Changeset, parent'.\n"
                },
                {
                    "name": "Parent changeset",
                    "content": "See 'Changeset, parent'.\n"
                },
                {
                    "name": "Parent, working directory",
                    "content": "The working directory parent reflects a virtual revision which is  the  child  of  the\nchangeset  (or  two changesets with an uncommitted merge) shown by hg parents. This is\nchanged with hg update. Other commands to see the working directory parent are hg sum‐\nmary and hg id. Can be specified by the alias \".\".\n\nPatch  (Noun) The product of a diff operation.\n\nExample: \"I've sent you my patch.\"\n\n(Verb) The process of using a patch file to transform one changeset into another.\n\nExample: \"You will need to patch that revision.\"\n\nPhase  A per-changeset state tracking how the changeset has been or should be shared. See  hg\nhelp phases.\n\nPublic Changesets  in  the public phase have been shared with publishing repositories and are\ntherefore considered immutable. See hg help phases.\n\nPull   An operation in which changesets in a remote repository which are  not  in  the  local\nrepository  are  brought  into  the local repository. Note that this operation without\nspecial arguments only updates the repository, it does not update  the  files  in  the\nworking directory. See hg help pull.\n\nPush   An  operation  in  which  changesets  in  a local repository which are not in a remote\nrepository are sent to the remote repository.  Note  that  this  operation  only  adds\nchangesets  which  have  been  committed locally to the remote repository. Uncommitted\nchanges are not sent. See hg help push.\n"
                },
                {
                    "name": "Repository",
                    "content": "The metadata describing all recorded states of a collection of  files.  Each  recorded\nstate is represented by a changeset. A repository is usually (but not always) found in\nthe  .hg  subdirectory  of a working directory. Any recorded state can be recreated by\n\"updating\" a working directory to a specific changeset.\n"
                },
                {
                    "name": "Repository head",
                    "content": "See 'Head, repository'.\n"
                },
                {
                    "name": "Revision",
                    "content": "A state of the repository at some point in time. Earlier revisions can be  updated  to\nby using hg update.  See also 'Revision number'; See also 'Changeset'.\n"
                },
                {
                    "name": "Revision number",
                    "content": "This  integer  uniquely identifies a changeset in a specific repository. It represents\nthe order in which changesets were added to a repository, starting with revision  num‐\nber  0.  Note that the revision number may be different in each clone of a repository.\nTo identify changesets uniquely between different clones, see 'Changeset id'.\n\nRevlog History storage mechanism used by Mercurial. It is a form of delta encoding, with  oc‐\ncasional  full  revision of data followed by delta of each successive revision. It in‐\ncludes data and an index pointing to the data.\n"
                },
                {
                    "name": "Rewriting history",
                    "content": "See 'History, rewriting'.\n\nRoot   A changeset that has only the null changeset as its  parent.  Most  repositories  have\nonly a single root changeset.\n\nSecret Changesets in the secret phase may not be shared via push, pull, or clone. See hg help\nphases.\n\nTag    An alternative name given to a changeset. Tags can be used in all places where Mercur‐\nial  expects  a changeset ID, e.g., with hg update. The creation of a tag is stored in\nthe history and will thus automatically be shared with other using push and pull.\n\nTip    The changeset with the highest revision number. It  is  the  changeset  most  recently\nadded in a repository.\n"
                },
                {
                    "name": "Tip, branch",
                    "content": "The  head  of  a  given branch with the highest revision number. When a branch name is\nused as a revision identifier, it refers to the branch tip. See also  'Branch,  head'.\nNote  that  because  revision numbers may be different in different repository clones,\nthe branch tip may be different in different cloned repositories.\n\nUpdate (Noun) Another synonym of changeset.\n\nExample: \"I've pushed an update.\"\n\n(Verb) This term is usually used to describe updating the state of the working  direc‐\ntory to that of a specific changeset. See hg help update.\n\nExample: \"You should update.\"\n"
                },
                {
                    "name": "Working directory",
                    "content": "See 'Directory, working'.\n"
                },
                {
                    "name": "Working directory parent",
                    "content": "See 'Parent, working directory'.\n"
                }
            ]
        },
        "SYNTAX FOR MERCURIAL IGNORE FILES": {
            "content": "",
            "subsections": [
                {
                    "name": "Synopsis",
                    "content": "The  Mercurial  system  uses a file called .hgignore in the root directory of a repository to\ncontrol its behavior when it searches for files that it is not currently tracking.\n"
                },
                {
                    "name": "Description",
                    "content": "The working directory of a Mercurial repository will often contain files that should  not  be\ntracked  by  Mercurial. These include backup files created by editors and build products cre‐\nated by compilers.  These files can be ignored by listing them in a  .hgignore  file  in  the\nroot  of  the working directory. The .hgignore file must be created manually. It is typically\nput under version control, so that the settings will propagate  to  other  repositories  with\npush and pull.\n\nAn  untracked  file  is ignored if its path relative to the repository root directory, or any\nprefix path of that path, is matched against any pattern in .hgignore.\n\nFor example, say we have an untracked file, file.c, at a/b/file.c inside our repository. Mer‐\ncurial will ignore file.c if any pattern in .hgignore matches a/b/file.c, a/b or a.\n\nIn addition, a Mercurial configuration file can reference a set of per-user or global  ignore\nfiles.  See the ignore configuration key on the [ui] section of hg help config for details of\nhow to configure these files.\n\nTo control Mercurial's handling of files that it manages, many commands support the -I and -X\noptions; see hg help <command> and hg help patterns for details.\n\nFiles that are already tracked are not affected by .hgignore, even if they appear  in  .hgig‐\nnore.  An untracked file X can be explicitly added with hg add X, even if X would be excluded\nby a pattern in .hgignore.\n"
                },
                {
                    "name": "Syntax",
                    "content": "An ignore file is a plain text file consisting of a list of patterns, with  one  pattern  per\nline.  Empty  lines are skipped. The # character is treated as a comment character, and the \\\ncharacter is treated as an escape character.\n\nMercurial supports several pattern syntaxes. The default  syntax  used  is  Python/Perl-style\nregular expressions.\n\nTo change the syntax used, use a line of the following form:\n\nsyntax: NAME\n\nwhere NAME is one of the following:\n"
                },
                {
                    "name": "regexp",
                    "content": "Regular expression, Python/Perl syntax.\n"
                },
                {
                    "name": "glob",
                    "content": "Shell-style glob.\n"
                },
                {
                    "name": "rootglob",
                    "content": "A variant of glob that is rooted (see below).\n\nThe chosen syntax stays in effect when parsing all patterns that follow, until another syntax\nis selected.\n\nNeither glob nor regexp patterns are rooted. A glob-syntax pattern of the form *.c will match\na file ending in .c in any directory, and a regexp pattern of the form \\.c$ will do the same.\nTo  root a regexp pattern, start it with ^. To get the same effect with glob-syntax, you have\nto use rootglob.\n\nSubdirectories can have  their  own  .hgignore  settings  by  adding  subinclude:path/to/sub‐\ndir/.hgignore  to the root .hgignore. See hg help patterns for details on subinclude: and in‐\nclude:.\n\nNote   Patterns specified in other than .hgignore are always rooted.  Please see hg help pat‐\nterns for details.\n"
                },
                {
                    "name": "Example",
                    "content": "Here is an example ignore file.\n\n# use glob syntax.\nsyntax: glob\n\n*.elc\n*.pyc\n*~\n\n# switch to regexp syntax.\nsyntax: regexp\n^\\.pc/\n"
                },
                {
                    "name": "Debugging",
                    "content": "Use the debugignore command to see if and why a file is ignored, or to see the  combined  ig‐\nnore pattern. See hg help debugignore for details.\n"
                }
            ]
        },
        "CONFIGURING HGWEB": {
            "content": "Mercurial's  internal  web  server, hgweb, can serve either a single repository, or a tree of\nrepositories. In the second case, repository paths and global options can be defined using  a\ndedicated configuration file common to hg serve, hgweb.wsgi, hgweb.cgi and hgweb.fcgi.\n\nThis file uses the same syntax as other Mercurial configuration files but recognizes only the\nfollowing sections:\n\n• web\n\n• paths\n\n• collections\n\nThe web options are thoroughly described in hg help config.\n\nThe  paths  section maps URL paths to paths of repositories in the filesystem. hgweb will not\nexpose the filesystem directly - only Mercurial repositories can be published  and  only  ac‐\ncording to the configuration.\n\nThe  left  hand  side  is  the path in the URL. Note that hgweb reserves subpaths like rev or\nfile, try using different names for nested repositories to avoid confusing effects.\n\nThe right hand side is the path in the filesystem. If the specified path ends with  *  or\nthe  filesystem  will  be  searched recursively for repositories below that point.  With * it\nwill not recurse into the repositories it finds (except for .hg/patches).  With    it  will\nalso search inside repository working directories and possibly find subrepositories.\n\nIn this example:\n\n[paths]\n/projects/a = /srv/tmprepos/a\n/projects/b = c:/repos/b\n/ = /srv/repos/*\n/user/bob = /home/bob/repos/\n\n• The  first two entries make two repositories in different directories appear under the same\ndirectory in the web interface\n\n• The third entry will publish every Mercurial repository found in /srv/repos/, for  instance\nthe repository /srv/repos/quux/ will appear as http://server/quux/\n\n• The     fourth     entry     will    publish    both    http://server/user/bob/quux/    and\nhttp://server/user/bob/quux/testsubrepo/\n\nThe collections section is deprecated and has been superseded by paths.\n",
            "subsections": [
                {
                    "name": "URLs and Common Arguments",
                    "content": "URLs under each repository have the form /{command}[/{arguments}] where {command}  represents\nthe  name of a command or handler and {arguments} represents any number of additional URL pa‐\nrameters to that command.\n\nThe web server has a default style associated with it. Styles map to a  collection  of  named\ntemplates.  Each  template is used to render a specific piece of data, such as a changeset or\ndiff.\n\nThe style for the current request can be overridden two ways. First, if {command} contains  a\nhyphen  (-), the text before the hyphen defines the style. For example, /atom-log will render\nthe log command handler with the atom style. The second way to set  the  style  is  with  the\nstyle  query  string  argument. For example, /log?style=atom. The hyphenated URL parameter is\npreferred.\n\nNot all templates are available for all styles. Attempting to use a style that  doesn't  have\nall templates defined may result in an error rendering the page.\n\nMany commands take a {revision} URL parameter. This defines the changeset to operate on. This\nis commonly specified as the short, 12 digit hexadecimal abbreviation for the full 40 charac‐\nter  unique  revision identifier. However, any value described by hg help revisions typically\nworks.\n"
                },
                {
                    "name": "Commands and URLs",
                    "content": "The following web commands and their URLs are available:\n"
                },
                {
                    "name": "/annotate/{revision}/{path}",
                    "content": "Show changeset information for each line in a file.\n\nThe ignorews, ignorewsamount, ignorewseol, and ignoreblanklines query string  arguments  have\nthe  same  meaning  as  their [annotate] config equivalents. It uses the hgrc boolean parsing\nlogic to interpret the value. e.g. 0 and false are false and 1 and true are true. If not  de‐\nfined, the server default settings are used.\n\nThe fileannotate template is rendered.\n"
                },
                {
                    "name": "/archive/{revision}.{format}[/{path}]",
                    "content": "Obtain an archive of repository content.\n\nThe  content  and type of the archive is defined by a URL path parameter.  format is the file\nextension of the archive type to be generated. e.g.  zip or tar.bz2. Not  all  archive  types\nmay be allowed by your server configuration.\n\nThe optional path URL parameter controls content to include in the archive. If omitted, every\nfile  in  the  specified  revision is present in the archive. If included, only the specified\nfile or contents of the specified directory will be included in the archive.\n\nNo template is used for this handler. Raw, binary content is generated.\n"
                },
                {
                    "name": "/bookmarks",
                    "content": "Show information about bookmarks.\n\nNo arguments are accepted.\n\nThe bookmarks template is rendered.\n"
                },
                {
                    "name": "/branches",
                    "content": "Show information about branches.\n\nAll known branches are contained in the output, even closed branches.\n\nNo arguments are accepted.\n\nThe branches template is rendered.\n"
                },
                {
                    "name": "/changelog[/{revision}]",
                    "content": "Show information about multiple changesets.\n\nIf the optional revision URL argument is absent, information about all changesets starting at\ntip will be rendered. If the revision argument is present, changesets will be shown  starting\nfrom the specified revision.\n\nIf  revision  is  absent,  the  rev query string argument may be defined. This will perform a\nsearch for changesets.\n\nThe argument for rev can be a single revision, a revision set, or a literal keyword to search\nfor in changeset data (equivalent to hg log -k).\n\nThe revcount query string argument defines the maximum numbers of changesets to render.\n\nFor non-searches, the changelog template will be rendered.\n"
                },
                {
                    "name": "/changeset[/{revision}]",
                    "content": "Show information about a single changeset.\n\nA URL path argument is the changeset identifier to show. See hg help revisions  for  possible\nvalues. If not defined, the tip changeset will be shown.\n\nThe  changeset  template is rendered. Contents of the changesettag, changesetbookmark, filen‐\nodelink, filenolink, and the many templates related to diffs may all be used to  produce  the\noutput.\n"
                },
                {
                    "name": "/comparison/{revision}/{path}",
                    "content": "Show  a comparison between the old and new versions of a file from changes made on a particu‐\nlar revision.\n\nThis is similar to the diff handler. However, this form features a split or side-by-side diff\nrather than a unified diff.\n\nThe context query string argument can be used to control the lines of context in the diff.\n\nThe filecomparison template is rendered.\n"
                },
                {
                    "name": "/diff/{revision}/{path}",
                    "content": "Show how a file changed in a particular commit.\n\nThe filediff template is rendered.\n\nThis handler is registered under both the /diff and /filediff paths. /diff is used in  modern\ncode.\n"
                },
                {
                    "name": "/file/{revision}[/{path}]",
                    "content": "Show information about a directory or file in the repository.\n\nInfo about the path given as a URL parameter will be rendered.\n\nIf  path  is  a  directory, information about the entries in that directory will be rendered.\nThis form is equivalent to the manifest handler.\n\nIf path is a file, information about that file will be shown via the filerevision template.\n\nIf path is not defined, information about the root directory will be rendered.\n"
                },
                {
                    "name": "/diff/{revision}/{path}",
                    "content": "Show how a file changed in a particular commit.\n\nThe filediff template is rendered.\n\nThis handler is registered under both the /diff and /filediff paths. /diff is used in  modern\ncode.\n"
                },
                {
                    "name": "/filelog/{revision}/{path}",
                    "content": "Show information about the history of a file in the repository.\n\nThe revcount query string argument can be defined to control the maximum number of entries to\nshow.\n\nThe filelog template will be rendered.\n"
                },
                {
                    "name": "/graph[/{revision}]",
                    "content": "Show information about the graphical topology of the repository.\n\nInformation  rendered by this handler can be used to create visual representations of reposi‐\ntory topology.\n\nThe revision URL parameter controls the starting changeset. If it's absent,  the  default  is\ntip.\n\nThe  revcount  query  string argument can define the number of changesets to show information\nfor.\n\nThe graphtop query string argument can specify the starting changeset  for  producing  jsdata\nvariable  that is used for rendering graph in JavaScript. By default it has the same value as\nrevision.\n\nThis handler will render the graph template.\n"
                },
                {
                    "name": "/help[/{topic}]",
                    "content": "Render help documentation.\n\nThis web command is roughly equivalent to hg help. If a topic is  defined,  that  help  topic\nwill be rendered. If not, an index of available help topics will be rendered.\n\nThe help template will be rendered when requesting help for a topic.  helptopics will be ren‐\ndered for the index of help topics.\n"
                },
                {
                    "name": "/log[/{revision}[/{path}]]",
                    "content": "Show repository or file history.\n\nFor  URLs of the form /log/{revision}, a list of changesets starting at the specified change‐\nset identifier is shown. If {revision} is not defined, the  default  is  tip.  This  form  is\nequivalent to the changelog handler.\n\nFor  URLs  of the form /log/{revision}/{file}, the history for a specific file will be shown.\nThis form is equivalent to the filelog handler.\n"
                },
                {
                    "name": "/manifest[/{revision}[/{path}]]",
                    "content": "Show information about a directory.\n\nIf the URL path arguments are omitted, information about  the  root  directory  for  the  tip\nchangeset will be shown.\n\nBecause  this handler can only show information for directories, it is recommended to use the\nfile handler instead, as it can handle both directories and files.\n\nThe manifest template will be rendered for this handler.\n"
                },
                {
                    "name": "/changeset[/{revision}]",
                    "content": "Show information about a single changeset.\n\nA URL path argument is the changeset identifier to show. See hg help revisions  for  possible\nvalues. If not defined, the tip changeset will be shown.\n\nThe  changeset  template is rendered. Contents of the changesettag, changesetbookmark, filen‐\nodelink, filenolink, and the many templates related to diffs may all be used to  produce  the\noutput.\n"
                },
                {
                    "name": "/shortlog",
                    "content": "Show basic information about a set of changesets.\n\nThis  accepts the same parameters as the changelog handler. The only difference is the short‐\nlog template will be rendered instead of the changelog template.\n"
                },
                {
                    "name": "/summary",
                    "content": "Show a summary of repository state.\n\nInformation about the latest changesets, bookmarks, tags, and branches is  captured  by  this\nhandler.\n\nThe summary template is rendered.\n"
                },
                {
                    "name": "/tags",
                    "content": "Show information about tags.\n\nNo arguments are accepted.\n\nThe tags template is rendered.\n"
                }
            ]
        },
        "TECHNICAL IMPLEMENTATION TOPICS": {
            "content": "To access a subtopic, use \"hg help internals.{subtopic-name}\"\n\nbid-merge\nBid Merge Algorithm\n\nbundle2\nBundle2\n\nbundles\nBundles\n\ncbor   CBOR\n\ncensor Censor\n\nchangegroups\nChangegroups\n\nconfig Config Registrar\n\ndirstate-v2\ndirstate-v2 file format\n\nextensions\nExtension API\n\nmergestate\nMergestate\n\nrequirements\nRepository Requirements\n\nrevlogs\nRevision Logs\n\nwireprotocol\nWire Protocol\n\nwireprotocolrpc\nWire Protocol RPC\n\nwireprotocolv2\nWire Protocol Version 2\n",
            "subsections": []
        },
        "MERGE TOOLS": {
            "content": "To merge files Mercurial uses merge tools.\n\nA  merge  tool  combines two different versions of a file into a merged file. Merge tools are\ngiven the two files and the greatest common ancestor of the two file versions,  so  they  can\ndetermine the changes made on both branches.\n\nMerge  tools are used both for hg resolve, hg merge, hg update, hg backout and in several ex‐\ntensions.\n\nUsually, the merge tool tries to automatically reconcile the files by combining all non-over‐\nlapping changes that occurred separately in the two different evolutions of the same  initial\nbase  file.  Furthermore,  some interactive merge programs make it easier to manually resolve\nconflicting merges, either in a graphical way, or by inserting some conflict markers. Mercur‐\nial does not include any interactive merge programs but relies on external tools for that.\n",
            "subsections": [
                {
                    "name": "Available merge tools",
                    "content": "External merge tools and their properties are configured  in  the  merge-tools  configuration\nsection - see hgrc(5) - but they can often just be named by their executable.\n\nA  merge  tool is generally usable if its executable can be found on the system and if it can\nhandle the merge. The executable is found if it is an absolute or relative executable path or\nthe name of an application in the executable search path. The tool is assumed to be  able  to\nhandle  the merge if it can handle symlinks if the file is a symlink, if it can handle binary\nfiles if the file is binary, and if a GUI is available if the tool requires a GUI.\n\nThere are some internal merge tools which can be used. The internal merge tools are:\n"
                },
                {
                    "name": ":dump",
                    "content": "Creates three versions of the files to merge, containing the contents of local,  other\nand  base. These files can then be used to perform a merge manually. If the file to be\nmerged is named a.txt, these files will accordingly be named a.txt.local,  a.txt.other\nand a.txt.base and they will be placed in the same directory as a.txt.\n\nThis  implies premerge. Therefore, files aren't dumped, if premerge runs successfully.\nUse :forcedump to forcibly write files out.\n\n(actual capabilities: binary, symlink)\n"
                },
                {
                    "name": ":fail",
                    "content": "Rather than attempting to merge files that were modified on both  branches,  it  marks\nthem as unresolved. The resolve command must be used to resolve these conflicts.\n\n(actual capabilities: binary, symlink)\n"
                },
                {
                    "name": ":forcedump",
                    "content": "Creates three versions of the files as same as :dump, but omits premerge.\n\n(actual capabilities: binary, symlink)\n"
                },
                {
                    "name": ":local",
                    "content": "Uses the local p1() version of files as the merged version.\n\n(actual capabilities: binary, symlink)\n"
                },
                {
                    "name": ":merge",
                    "content": "Uses  the  internal  non-interactive simple merge algorithm for merging files. It will\nfail if there are any conflicts and leave markers in the partially merged file.  Mark‐\ners will have two sections, one for each side of merge.\n"
                },
                {
                    "name": ":merge-local",
                    "content": "Like  :merge,  but  resolve all conflicts non-interactively in favor of the local p1()\nchanges.\n"
                },
                {
                    "name": ":merge-other",
                    "content": "Like :merge, but resolve all conflicts non-interactively in favor of  the  other  p2()\nchanges.\n"
                },
                {
                    "name": ":merge3",
                    "content": "Uses  the  internal  non-interactive simple merge algorithm for merging files. It will\nfail if there are any conflicts and leave markers in the partially merged file. Marker\nwill have three sections, one from each side of the merge and one for  the  base  con‐\ntent.\n"
                },
                {
                    "name": ":mergediff",
                    "content": "Uses  the  internal  non-interactive simple merge algorithm for merging files. It will\nfail if there are any conflicts and leave markers in the partially  merged  file.  The\nmarker  will  have  two sections, one with the content from one side of the merge, and\none with a diff from the base content to the content on the other side. (experimental)\n"
                },
                {
                    "name": ":other",
                    "content": "Uses the other p2() version of files as the merged version.\n\n(actual capabilities: binary, symlink)\n"
                },
                {
                    "name": ":prompt",
                    "content": "Asks the user which of the local p1() or the other p2() version to keep as the  merged\nversion.\n\n(actual capabilities: binary, symlink)\n"
                },
                {
                    "name": ":tagmerge",
                    "content": "Uses the internal tag merge algorithm (experimental).\n"
                },
                {
                    "name": ":union",
                    "content": "Uses  the  internal  non-interactive simple merge algorithm for merging files. It will\nuse both local and other sides for conflict regions by adding local on top  of  other.\nNo markers are inserted.\n"
                },
                {
                    "name": ":union-other-first",
                    "content": "Like :union, but add other on top of local.\n\nInternal  tools  are always available and do not require a GUI but will by default not handle\nsymlinks or binary files. See next section for detail about \"actual  capabilities\"  described\nabove.\n"
                },
                {
                    "name": "Choosing a merge tool",
                    "content": "Mercurial uses these rules when deciding which merge tool to use:\n\n1. If  a  tool has been specified with the --tool option to merge or resolve, it is used.  If\nit is the name of a tool in the merge-tools configuration, its configuration is used. Oth‐\nerwise the specified tool must be executable by the shell.\n\n2. If the HGMERGE environment variable is present, its value is used and must  be  executable\nby the shell.\n\n3. If the filename of the file to be merged matches any of the patterns in the merge-patterns\nconfiguration  section, the first usable merge tool corresponding to a matching pattern is\nused.\n\n4. If ui.merge is set it will be considered next. If the value is not the name of  a  config‐\nured  tool, the specified value is used and must be executable by the shell. Otherwise the\nnamed tool is used if it is usable.\n\n5. If any usable merge tools are present in the merge-tools configuration  section,  the  one\nwith the highest priority is used.\n\n6. If a program named hgmerge can be found on the system, it is used - but it will by default\nnot be used for symlinks and binary files.\n\n7. If the file to be merged is not binary and is not a symlink, then internal :merge is used.\n\n8. Otherwise, :prompt is used.\n\nFor historical reason, Mercurial treats merge tools as below while examining rules above.\n┌────────────┬────────────────┬────────┬─────────┐\n│ step       │ specified via  │ binary │ symlink │\n├────────────┼────────────────┼────────┼─────────┤\n│            │ --tool         │ o/o    │ o/o     │\n│        1.  │                │        │         │\n├────────────┼────────────────┼────────┼─────────┤\n│            │ HGMERGE        │ o/o    │ o/o     │\n│        2.  │                │        │         │\n├────────────┼────────────────┼────────┼─────────┤\n│            │ merge-patterns │ o/o(*) │ x/?(*)  │\n│        3.  │                │        │         │\n├────────────┼────────────────┼────────┼─────────┤\n│            │ ui.merge       │ x/?(*) │ x/?(*)  │\n│        4.  │                │        │         │\n└────────────┴────────────────┴────────┴─────────┘\n\nEach  capability column indicates Mercurial behavior for internal/external merge tools at ex‐\namining each rule.\n\n• \"o\": \"assume that a tool has capability\"\n\n• \"x\": \"assume that a tool does not have capability\"\n\n• \"?\": \"check actual capability of a tool\"\n\nIf merge.strict-capability-check configuration is  true,  Mercurial  checks  capabilities  of\nmerge tools strictly in (*) cases above (= each capability column becomes \"?/?\"). It is false\nby default for backward compatibility.\n\nNote   After  selecting a merge program, Mercurial will by default attempt to merge the files\nusing a simple merge algorithm first. Only if it doesn't succeed because of  conflict‐\ning changes will Mercurial actually execute the merge program. Whether to use the sim‐\nple merge algorithm first can be controlled by the premerge setting of the merge tool.\nPremerge is enabled by default unless the file is binary or a symlink.\n\nSee  the  merge-tools  and  ui  sections of hgrc(5) for details on the configuration of merge\ntools.\n"
                }
            ]
        },
        "PAGER SUPPORT": {
            "content": "Some Mercurial commands can produce a lot of output, and Mercurial  will  attempt  to  use  a\npager to make those commands more pleasant.\n\nTo set the pager that should be used, set the application variable:\n\n[pager]\npager = less -FRX\n\nIf  no  pager  is set in the user or repository configuration, Mercurial uses the environment\nvariable $PAGER. If $PAGER is not set, pager.pager from the default or  system  configuration\nis  used.  If none of these are set, a default pager will be used, typically less on Unix and\nmore on Windows.\n\nOn Windows, more is not color aware, so using it effectively disables color.  MSYS and Cygwin\nshells provide less as a pager, which can be configured to support ANSI color codes.  See  hg\nhelp config.color.pagermode to configure the color mode when invoking a pager.\n\nYou can disable the pager for certain commands by adding them to the pager.ignore list:\n\n[pager]\nignore = version, help, update\n\nTo  ignore  global commands like hg version or hg help, you have to specify them in your user\nconfiguration file.\n\nTo control whether the pager  is  used  at  all  for  an  individual  command,  you  can  use\n--pager=<value>:\n\n• use as needed: auto.\n\n• require the pager: yes or on.\n\n• suppress the pager: no or off (any unrecognized value will also work).\n\nTo globally turn off all attempts to use a pager, set:\n\n[ui]\npaginate = never\n\nwhich will prevent the pager from running.\n",
            "subsections": []
        },
        "FILE NAME PATTERNS": {
            "content": "Mercurial accepts several notations for identifying one or more files at a time.\n\nBy  default,  Mercurial  treats  filenames verbatim without pattern matching, relative to the\ncurrent working directory. Note that your system shell might perform pattern matching of  its\nown before passing filenames into Mercurial.\n\nAlternate pattern notations must be specified explicitly.\n\nNote   Patterns  specified  in .hgignore are not rooted.  Please see hg help hgignore for de‐\ntails.\n\nTo use a plain path name without any pattern matching, start it with path:. These path  names\nmust  completely match starting at the current repository root, and when the path points to a\ndirectory, it is matched recursively. To match all files in a directory non-recursively  (not\nincluding any files in subdirectories), rootfilesin: can be used, specifying an absolute path\n(relative to the repository root). To match a single file exactly, relative to the repository\nroot, you can use filepath:.\n\nTo  use an extended glob, start a name with glob:. Globs are rooted at the current directory;\na glob such as *.c will only match files in the current directory ending with  .c.  rootglob:\ncan be used instead of glob: for a glob that is rooted at the root of the repository.\n\nThe  supported  glob  syntax extensions are  to match any string across path separators and\n{a,b} to mean \"a or b\".\n\nTo use a Perl/Python regular expression, start a name with re:.  Regexp pattern  matching  is\nanchored at the root of the repository.\n\nTo  read name patterns from a file, use listfile: or listfile0:.  The latter expects null de‐\nlimited patterns while the former expects line feeds. Each string read from the file  is  it‐\nself treated as a file pattern.\n\nTo  read  a  set of patterns from a file, use include: or subinclude:.  include: will use all\nthe patterns from the given file and treat them as if  they  had  been  passed  in  manually.\nsubinclude:  will  only apply the patterns against files that are under the subinclude file's\ndirectory. See hg help hgignore for details on the format of these files.\n\nAll patterns, except for glob: specified in command line (not for  -I  or  -X  options),  can\nmatch  also against directories: files under matched directories are treated as matched.  For",
            "subsections": [
                {
                    "name": "-I  -X",
                    "content": "Plain examples:\n\npath:foo/bar                  a name bar in a directory named foo in the root\nof the repository\npath:some/path                a file or directory named \"some/path\"\nfilepath:some/path/to/a/file  exactly a single file named\n\"some/path/to/a/file\", relative to the root\nof the repository\nrootfilesin:foo/bar           the files in a directory called foo/bar, but\nnot any files in its subdirectories and not\na file bar in directory foo\n\nGlob examples:\n\nglob:*.c       any name ending in \".c\" in the current directory\n*.c            any name ending in \".c\" in the current directory\n.c           any name ending in \".c\" in any subdirectory of the\ncurrent directory including itself.\nfoo/*          any file in directory foo\nfoo/         any file in directory foo plus all its subdirectories,\nrecursively\nfoo/*.c        any name ending in \".c\" in the directory foo\nfoo/.c       any name ending in \".c\" in any subdirectory of foo\nincluding itself.\nrootglob:*.c   any name ending in \".c\" in the root of the repository\n\nRegexp examples:\n\nre:.*\\.c$      any name ending in \".c\", anywhere in the repository\n\nFile examples:\n\nlistfile:list.txt  read list from list.txt with one file pattern per line\nlistfile0:list.txt read list from list.txt with null byte delimiters\n\nSee also hg help filesets.\n\nInclude examples:\n\ninclude:path/to/mypatternfile    reads patterns to be applied to all paths\nsubinclude:path/to/subignorefile reads patterns specifically for paths in the\nsubdirectory\n",
                    "flag": "-X"
                }
            ]
        },
        "WORKING WITH PHASES": {
            "content": "",
            "subsections": [
                {
                    "name": "What are phases?",
                    "content": "Phases are a system for tracking which changesets have been or should be shared.  This  helps\nprevent  common  mistakes  when modifying history (for instance, with the mq or rebase exten‐\nsions).\n\nEach changeset in a repository is in one of the following phases:\n\n• public : changeset is visible on a public server\n\n• draft : changeset is not yet published\n\n• secret : changeset should not be pushed, pulled, or cloned\n\nThese phases are ordered (public < draft < secret) and no changeset can be in a  lower  phase\nthan  its  ancestors. For instance, if a changeset is public, all its ancestors are also pub‐\nlic. Lastly, changeset phases should only be changed towards the public phase.\n"
                },
                {
                    "name": "How are phases managed?",
                    "content": "For the most part, phases should work transparently. By default, a changeset  is  created  in\nthe draft phase and is moved into the public phase when it is pushed to another repository.\n\nOnce  changesets  become public, extensions like mq and rebase will refuse to operate on them\nto prevent creating duplicate changesets.  Phases can also be manually manipulated  with  the\nhg phase command if needed. See hg help -v phase for examples.\n\nTo make your commits secret by default, put this in your configuration file:\n\n[phases]\nnew-commit = secret\n"
                },
                {
                    "name": "Phases and servers",
                    "content": "Normally, all servers are publishing by default. This means:\n\n- all draft changesets that are pulled or cloned appear in phase\npublic on the client\n\n- all draft changesets that are pushed appear as public on both\nclient and server\n\n- secret changesets are neither pushed, pulled, or cloned\n\nNote   Pulling  a  draft changeset from a publishing server does not mark it as public on the\nserver side due to the read-only nature of pull.\n\nSometimes it may be desirable to push and pull changesets in the draft phase to share  unfin‐\nished  work. This can be done by setting a repository to disable publishing in its configura‐\ntion file:\n\n[phases]\npublish = False\n\nSee hg help config for more information on configuration files.\n\nNote   Servers running older versions of Mercurial are treated as publishing.\n\nNote   Changesets in secret phase are not exchanged with the server. This  applies  to  their\ncontent: file names, file contents, and changeset metadata. For technical reasons, the\nidentifier  (e.g.  d825e4025e39)  of  the  secret changeset may be communicated to the\nserver.\n"
                },
                {
                    "name": "Examples",
                    "content": "• list changesets in draft or secret phase:\n\nhg log -r \"not public()\"\n\n• change all secret changesets to draft:\n\nhg phase --draft \"secret()\"\n\n• forcibly move the current changeset and descendants from public to draft:\n\nhg phase --force --draft .\n\n• show a list of changeset revisions and each corresponding phase:\n\nhg log --template \"{rev} {phase}\\n\"\n\n• resynchronize draft changesets relative to a remote repository:\n\nhg phase -fd \"outgoing(URL)\"\n\nSee hg help phase for more information on manually manipulating phases.\n"
                }
            ]
        },
        "SPECIFYING REVISIONS": {
            "content": "Mercurial supports several ways to specify revisions.\n",
            "subsections": [
                {
                    "name": "Specifying single revisions",
                    "content": "A plain integer is treated as a revision number. Negative integers are treated as  sequential\noffsets  from  the  tip, with -1 denoting the tip, -2 denoting the revision prior to the tip,\nand so forth.\n\nA 40-digit hexadecimal string is treated as a  unique  revision  identifier.   A  hexadecimal\nstring  less  than  40  characters long is treated as a unique revision identifier and is re‐\nferred to as a short-form identifier. A short-form identifier is only valid if it is the pre‐\nfix of exactly one full-length identifier.\n\nAny other string is treated as a bookmark, tag, or branch  name.  A  bookmark  is  a  movable\npointer  to  a  revision. A tag is a permanent name associated with a revision. A branch name\ndenotes the tipmost open branch head of that branch - or if they are all closed, the  tipmost\nclosed  head  of the branch. Bookmark, tag, and branch names must not contain the \":\" charac‐\nter.\n\nThe reserved name \"tip\" always identifies the most recent revision.\n\nThe reserved name \"null\" indicates the null revision. This is the revision of an empty repos‐\nitory, and the parent of revision 0.\n\nThe reserved name \".\" indicates the working directory parent.  If  no  working  directory  is\nchecked out, it is equivalent to null. If an uncommitted merge is in progress, \".\" is the re‐\nvision of the first parent.\n\nFinally, commands that expect a single revision (like hg update) also accept revsets (see be‐\nlow  for  details). When given a revset, they use the last revision of the revset. A few com‐\nmands accept two single revisions (like hg diff). When given a revset, they use the first and\nthe last revisions of the revset.\n"
                },
                {
                    "name": "Specifying multiple revisions",
                    "content": "Mercurial supports a functional language for selecting a set  of  revisions.  Expressions  in\nthis language are called revsets.\n\nThe language supports a number of predicates which are joined by infix operators. Parenthesis\ncan be used for grouping.\n\nIdentifiers  such  as branch names may need quoting with single or double quotes if they con‐\ntain characters like - or if they match one of the predefined predicates.\n\nSpecial characters can be used in quoted identifiers by escaping them,  e.g.,  \\n  is  inter‐\npreted  as a newline. To prevent them from being interpreted, strings can be prefixed with r,\ne.g. r'...'.\n"
                },
                {
                    "name": "Operators",
                    "content": "There is a single prefix operator:\n"
                },
                {
                    "name": "not x",
                    "content": "Changesets not in x. Short form is ! x.\n\nThese are the supported infix operators:\n"
                },
                {
                    "name": "x::y",
                    "content": "A DAG range, meaning all changesets that are descendants of x and ancestors of y,  in‐\ncluding  x  and y themselves. If the first endpoint is left out, this is equivalent to\nancestors(y), if the second is left out it is equivalent to descendants(x).\n\nAn alternative syntax is x..y.\n"
                },
                {
                    "name": "x:y",
                    "content": "All changesets with revision numbers between x and y, both inclusive. Either  endpoint\ncan be left out, they default to 0 and tip.\n"
                },
                {
                    "name": "x and y",
                    "content": "The intersection of changesets in x and y. Short form is x & y.\n"
                },
                {
                    "name": "x or y",
                    "content": "The union of changesets in x and y. There are two alternative short forms: x | y and x\n+ y.\n"
                },
                {
                    "name": "x - y",
                    "content": "Changesets in x but not in y.\n"
                },
                {
                    "name": "x % y",
                    "content": "Changesets  that  are ancestors of x but not ancestors of y (i.e. ::x - ::y).  This is\nshorthand notation for only(x, y) (see below). The second argument is optional and, if\nleft out, is equivalent to only(x).\n"
                },
                {
                    "name": "x^n",
                    "content": "The nth parent of x, n == 0, 1, or 2.  For n == 0, x; for n == 1, the first parent  of\neach changeset in x; for n == 2, the second parent of changeset in x.\n"
                },
                {
                    "name": "x~n",
                    "content": "The  nth  first  ancestor of x; x~0 is x; x~3 is x^^^.  For n < 0, the nth unambiguous\ndescendent of x.\n"
                },
                {
                    "name": "x ## y",
                    "content": "Concatenate strings and identifiers into one string.\n\nAll other prefix, infix and postfix operators have lower priority than ##.  For  exam‐\nple, a1 ## a2~2 is equivalent to (a1 ## a2)~2.\n\nFor example:\n\n[revsetalias]\nissue(a1) = grep(r'\\bissue[ :]?' ## a1 ## r'\\b|\\bbug\\(' ## a1 ## r'\\)')\n\nissue(1234)  is  equivalent to grep(r'\\bissue[ :]?1234\\b|\\bbug\\(1234\\)') in this case.\nThis matches against all of \"issue 1234\", \"issue:1234\", \"issue1234\" and \"bug(1234)\".\n\nThere is a single postfix operator:\n\nx^\n\nEquivalent to x^1, the first parent of each changeset in x.\n"
                },
                {
                    "name": "Patterns",
                    "content": "Where noted, predicates that perform string matching can accept a pattern string. The pattern\nmay be either a literal, or a regular expression. If the pattern starts with re:, the remain‐\nder of the pattern is treated as a regular expression. Otherwise, it is treated as a literal.\nTo match a pattern that actually starts with re:, use the prefix literal:.\n\nMatching is case-sensitive, unless otherwise noted.  To perform a case- insensitive match  on\na case-sensitive predicate, use a regular expression, prefixed with (?i).\n\nFor example, tag(r're:(?i)release') matches \"release\" or \"RELEASE\" or \"Release\", etc.\n"
                },
                {
                    "name": "Predicates",
                    "content": "The following predicates are supported:\n"
                },
                {
                    "name": "adds(pattern)",
                    "content": "Changesets that add a file matching pattern.\n\nThe pattern without explicit kind like glob: is expected to be relative to the current\ndirectory and match against a file or a directory.\n"
                },
                {
                    "name": "all()",
                    "content": "All changesets, the same as 0:tip.\n\nancestor(*changeset)\n\nA greatest common ancestor of the changesets.\n\nAccepts  0  or more changesets.  Will return empty list when passed no args.  Greatest\ncommon ancestor of a single changeset is that changeset.\n"
                },
                {
                    "name": "ancestors(set[, depth])",
                    "content": "Changesets that are ancestors of changesets in set,  including  the  given  changesets\nthemselves.\n\nIf depth is specified, the result only includes changesets up to the specified genera‐\ntion.\n"
                },
                {
                    "name": "author(string)",
                    "content": "Alias for user(string).\n"
                },
                {
                    "name": "bisect(string)",
                    "content": "Changesets marked in the specified bisect status:\n\n• good, bad, skip: csets explicitly marked as good/bad/skip\n\n• goods, bads      : csets topologically good/bad\n\n• range              : csets taking part in the bisection\n\n• pruned             : csets that are goods, bads or skipped\n\n• untested           : csets whose fate is yet unknown\n\n• ignored            : csets ignored due to DAG topology\n\n• current            : the cset currently being bisected\n"
                },
                {
                    "name": "bookmark([name])",
                    "content": "The named bookmark or all bookmarks.\n\nPattern matching is supported for name. See hg help revisions.patterns.\n"
                },
                {
                    "name": "branch(string or set)",
                    "content": "All changesets belonging to the given branch or the branches of the given changesets.\n\nPattern matching is supported for string. See hg help revisions.patterns.\n"
                },
                {
                    "name": "branchpoint()",
                    "content": "Changesets with more than one child.\n"
                },
                {
                    "name": "bundle()",
                    "content": "Changesets in the bundle.\n\nBundle must be specified by the -R option.\n"
                },
                {
                    "name": "children(set)",
                    "content": "Child changesets of changesets in set.\n"
                },
                {
                    "name": "closed()",
                    "content": "Changeset is closed.\n"
                },
                {
                    "name": "commonancestors(set)",
                    "content": "Changesets that are ancestors of every changeset in set.\n"
                },
                {
                    "name": "conflictlocal()",
                    "content": "The local side of the merge, if currently in an unresolved merge.\n\n\"merge\" here includes merge conflicts from e.g. 'hg rebase' or 'hg graft'.\n"
                },
                {
                    "name": "conflictother()",
                    "content": "The other side of the merge, if currently in an unresolved merge.\n\n\"merge\" here includes merge conflicts from e.g. 'hg rebase' or 'hg graft'.\n"
                },
                {
                    "name": "contains(pattern)",
                    "content": "The  revision's  manifest  contains a file matching pattern (but might not modify it).\nSee hg help patterns for information about file patterns.\n\nThe pattern without explicit kind like glob: is expected to be relative to the current\ndirectory and match against a file exactly for efficiency.\n"
                },
                {
                    "name": "converted([id])",
                    "content": "Changesets converted from the given identifier in the old repository  if  present,  or\nall converted changesets if no identifier is specified.\n"
                },
                {
                    "name": "date(interval)",
                    "content": "Changesets within the interval, see hg help dates.\n"
                },
                {
                    "name": "desc(string)",
                    "content": "Search commit message for string. The match is case-insensitive.\n\nPattern matching is supported for string. See hg help revisions.patterns.\n"
                },
                {
                    "name": "descendants(set[, depth])",
                    "content": "Changesets  which are descendants of changesets in set, including the given changesets\nthemselves.\n\nIf depth is specified, the result only includes changesets up to the specified genera‐\ntion.\n"
                },
                {
                    "name": "destination([set])",
                    "content": "Changesets that were created by a graft, transplant  or  rebase  operation,  with  the\ngiven  revisions  specified  as  the source.  Omitting the optional set is the same as\npassing all().\n"
                },
                {
                    "name": "diffcontains(pattern)",
                    "content": "Search revision differences for when the pattern was added or removed.\n\nThe pattern may be a substring literal or a regular  expression.  See  hg  help  revi‐\nsions.patterns.\n"
                },
                {
                    "name": "draft()",
                    "content": "Changeset in draft phase.\n"
                },
                {
                    "name": "expectsize(set[, size])",
                    "content": "Return  the given revset if size matches the revset size.  Abort if the revset doesn't\nexpect given size.  size can either be an integer range or an integer.\n\nFor example, expectsize(0:1, 3:5) will abort as revset size is 2 and 2 is not  between\n3 and 5 inclusive.\n"
                },
                {
                    "name": "extra(label, [value])",
                    "content": "Changesets with the given label in the extra metadata, with the given optional value.\n\nPattern matching is supported for value. See hg help revisions.patterns.\n"
                },
                {
                    "name": "file(pattern)",
                    "content": "Changesets affecting files matched by pattern.\n\nFor a faster but less accurate result, consider using filelog() instead.\n\nThis predicate uses glob: as the default kind of pattern.\n"
                },
                {
                    "name": "filelog(pattern)",
                    "content": "Changesets connected to the specified filelog.\n\nFor  performance  reasons,  visits only revisions mentioned in the file-level filelog,\nrather than filtering through all changesets (much faster, but doesn't include deletes\nor duplicate changes). For a slower, more accurate result, use file().\n\nThe pattern without explicit kind like glob: is expected to be relative to the current\ndirectory and match against a file exactly for efficiency.\n"
                },
                {
                    "name": "first(set, [n])",
                    "content": "An alias for limit().\n"
                },
                {
                    "name": "follow([file[, startrev]])",
                    "content": "An alias for ::. (ancestors of the working directory's first parent).  If file pattern\nis specified, the histories of files matching given pattern in the revision  given  by\nstartrev are followed, including copies.\n"
                },
                {
                    "name": "followlines(file, fromline:toline[, startrev=., descend=False])",
                    "content": "Changesets modifying file in line range ('fromline', 'toline').\n\nLine  range corresponds to 'file' content at 'startrev' and should hence be consistent\nwith file size. If startrev is not specified, working directory's parent is used.\n\nBy default, ancestors of 'startrev' are returned. If 'descend' is True, descendants of\n'startrev' are returned though renames are (currently) not followed in this direction.\n"
                },
                {
                    "name": "grep(regex)",
                    "content": "Like keyword(string) but accepts a regex. Use grep(r'...') to  ensure  special  escape\ncharacters are handled correctly. Unlike keyword(string), the match is case-sensitive.\n"
                },
                {
                    "name": "head()",
                    "content": "Changeset is a named branch head.\n"
                },
                {
                    "name": "heads(set)",
                    "content": "Members of set with no children in set.\n"
                },
                {
                    "name": "hidden()",
                    "content": "Hidden changesets.\n"
                },
                {
                    "name": "id(string)",
                    "content": "Revision non-ambiguously specified by the given hex string prefix.\n"
                },
                {
                    "name": "keyword(string)",
                    "content": "Search  commit message, user name, and names of changed files for string. The match is\ncase-insensitive.\n\nFor a regular expression or case sensitive search of these fields, use grep(regex).\n"
                },
                {
                    "name": "last(set, [n])",
                    "content": "Last n members of set, defaulting to 1.\n"
                },
                {
                    "name": "limit(set[, n[, offset]])",
                    "content": "First n members of set, defaulting to 1, starting from offset.\n"
                },
                {
                    "name": "matching(revision [, field])",
                    "content": "Changesets in which a given set of fields match the set of fields in the selected  re‐\nvision or set.\n\nTo  match  more  than  one  field pass the list of fields to match separated by spaces\n(e.g. author description).\n\nValid fields are most regular revision fields and some special fields.\n\nRegular revision fields are description, author, branch, date, files, phase,  parents,\nsubstate,  user  and diff.  Note that author and user are synonyms. diff refers to the\ncontents of the revision. Two revisions matching their  diff  will  also  match  their\nfiles.\n\nSpecial  fields  are  summary  and metadata: summary matches the first line of the de‐\nscription.  metadata is equivalent to matching description user date (i.e. it  matches\nthe main metadata fields).\n\nmetadata  is  the  default  field  which is used when no fields are specified. You can\nmatch more than one field at a time.\n"
                },
                {
                    "name": "max(set)",
                    "content": "Changeset with highest revision number in set.\n"
                },
                {
                    "name": "merge()",
                    "content": "Changeset is a merge changeset.\n"
                },
                {
                    "name": "min(set)",
                    "content": "Changeset with lowest revision number in set.\n"
                },
                {
                    "name": "modifies(pattern)",
                    "content": "Changesets modifying files matched by pattern.\n\nThe pattern without explicit kind like glob: is expected to be relative to the current\ndirectory and match against a file or a directory.\n"
                },
                {
                    "name": "named(namespace)",
                    "content": "The changesets in a given namespace.\n\nPattern matching is supported for namespace. See hg help revisions.patterns.\n"
                },
                {
                    "name": "nodefromfile(path)",
                    "content": "Read a list of nodes from the file at path.\n\nThis applies id(LINE) to each line of the file.\n\nThis is useful when the amount of nodes you need to specify gets  too  large  for  the\ncommand line.\n"
                },
                {
                    "name": "none()",
                    "content": "No changesets.\n"
                },
                {
                    "name": "only(set, [set])",
                    "content": "Changesets  that  are  ancestors  of the first set that are not ancestors of any other\nhead in the repo. If a second set is specified, the result is ancestors of  the  first\nset that are not ancestors of the second set (i.e. ::<set1> - ::<set2>).\n"
                },
                {
                    "name": "origin([set])",
                    "content": "Changesets that were specified as a source for the grafts, transplants or rebases that\ncreated  the given revisions.  Omitting the optional set is the same as passing all().\nIf a changeset created by these operations is itself specified as a source for one  of\nthese operations, only the source changeset for the first operation is selected.\n"
                },
                {
                    "name": "outgoing([path])",
                    "content": "Changesets  not found in the specified destination repository, or the default push lo‐\ncation.\n\nIf the location resolve to multiple repositories, the union of all outgoing  changeset\nwill be used.\n"
                },
                {
                    "name": "p1([set])",
                    "content": "First parent of changesets in set, or the working directory.\n"
                },
                {
                    "name": "p2([set])",
                    "content": "Second parent of changesets in set, or the working directory.\n"
                },
                {
                    "name": "parents([set])",
                    "content": "The set of all parents for all changesets in set, or the working directory.\n"
                },
                {
                    "name": "present(set)",
                    "content": "An empty set, if any revision in set isn't found; otherwise, all revisions in set.\n\nIf  any  of  specified  revisions is not present in the local repository, the query is\nnormally aborted. But this predicate allows the query to continue even in such cases.\n"
                },
                {
                    "name": "public()",
                    "content": "Changeset in public phase.\n"
                },
                {
                    "name": "remote([id [,path]])",
                    "content": "Local revision that corresponds to the given identifier in  a  remote  repository,  if\npresent. Here, the '.' identifier is a synonym for the current local branch.\n"
                },
                {
                    "name": "removes(pattern)",
                    "content": "Changesets which remove files matching pattern.\n\nThe pattern without explicit kind like glob: is expected to be relative to the current\ndirectory and match against a file or a directory.\n"
                },
                {
                    "name": "rev(number)",
                    "content": "Revision with the given numeric identifier.\n"
                },
                {
                    "name": "reverse(set)",
                    "content": "Reverse order of set.\n"
                },
                {
                    "name": "revset(set)",
                    "content": "Strictly interpret the content as a revset.\n\nThe  content  of  this special predicate will be strictly interpreted as a revset. For\nexample, revset(id(0)) will be interpreted as \"id(0)\" without possible ambiguity  with\na \"id(0)\" bookmark or tag.\n"
                },
                {
                    "name": "roots(set)",
                    "content": "Changesets in set with no parent changeset in set.\n"
                },
                {
                    "name": "secret()",
                    "content": "Changeset in secret phase.\n"
                },
                {
                    "name": "sort(set[, [-]key... [, ...]])",
                    "content": "Sort  set  by keys. The default sort order is ascending, specify a key as -key to sort\nin descending order.\n\nThe keys can be:\n\n• rev for the revision number,\n\n• branch for the branch name,\n\n• desc for the commit message (description),\n\n• user for user name (author can be used as an alias),\n\n• date for the commit date\n\n• topo for a reverse topographical sort\n\n• node the nodeid of the revision\n\n• random randomly shuffle revisions\n\nThe topo sort order cannot be combined with other sort keys. This sort takes  one  op‐\ntional argument, topo.firstbranch, which takes a revset that specifies what topograph‐\nical branches to prioritize in the sort.\n\nThe  random sort takes one optional random.seed argument to control the pseudo-random‐\nness of the result.\n"
                },
                {
                    "name": "subrepo([pattern])",
                    "content": "Changesets that add, modify or remove the given subrepo.  If  no  subrepo  pattern  is\nnamed, any subrepo changes are returned.\n"
                },
                {
                    "name": "tag([name])",
                    "content": "The specified tag by name, or all tagged revisions if no name is given.\n\nPattern matching is supported for name. See hg help revisions.patterns.\n"
                },
                {
                    "name": "user(string)",
                    "content": "User name contains string. The match is case-insensitive.\n\nPattern matching is supported for string. See hg help revisions.patterns.\n"
                },
                {
                    "name": "Aliases",
                    "content": "New  predicates (known as \"aliases\") can be defined, using any combination of existing predi‐\ncates or other aliases. An alias definition looks like:\n\n<alias> = <definition>\n\nin the revsetalias section of a Mercurial configuration file. Arguments of the form  a1,  a2,\netc. are substituted from the alias into the definition.\n\nFor example,\n\n[revsetalias]\nh = heads()\nd(s) = sort(s, date)\nrs(s, k) = reverse(sort(s, k))\n\ndefines  three  aliases,  h,  d,  and  rs.  rs(0:tip,  author)  is  exactly equivalent to re‐\nverse(sort(0:tip, author)).\n"
                },
                {
                    "name": "Equivalents",
                    "content": "Command line equivalents for hg log:\n\n-f    ->  ::.\n-d x  ->  date(x)\n-k x  ->  keyword(x)\n-m    ->  merge()\n-u x  ->  user(x)\n-b x  ->  branch(x)\n-P x  ->  !::x\n-l x  ->  limit(expr, x)\n"
                },
                {
                    "name": "Examples",
                    "content": "Some sample queries:\n\n• Changesets on the default branch:\n\nhg log -r \"branch(default)\"\n\n• Changesets on the default branch since tag 1.5 (excluding merges):\n\nhg log -r \"branch(default) and 1.5:: and not merge()\"\n\n• Open branch heads:\n\nhg log -r \"head() and not closed()\"\n\n• Changesets between tags 1.3 and 1.5 mentioning \"bug\" that affect hgext/*:\n\nhg log -r \"1.3::1.5 and keyword(bug) and file('hgext/*')\"\n\n• Changesets committed in May 2008, sorted by user:\n\nhg log -r \"sort(date('May 2008'), user)\"\n\n• Changesets mentioning \"bug\" or \"issue\" that are not in a tagged release:\n\nhg log -r \"(keyword(bug) or keyword(issue)) and not ancestors(tag())\"\n\n• Update to the commit that bookmark @ is pointing to, without activating the bookmark  (this\nworks because the last revision of the revset is used):\n\nhg update :@\n\n• Show  diff between tags 1.3 and 1.5 (this works because the first and the last revisions of\nthe revset are used):\n\nhg diff -r 1.3::1.5\n"
                }
            ]
        },
        "RUST IN MERCURIAL": {
            "content": "Mercurial can be augmented with Rust extensions for speeding up certain operations.\n",
            "subsections": [
                {
                    "name": "Compatibility",
                    "content": "Though the Rust extensions are only tested by  the  project  under  Linux,  users  of  MacOS,\nFreeBSD  and other UNIX-likes have been using the Rust extensions. Your mileage may vary, but\nby all means do give us feedback or signal your interest for better support.\n\nNo Rust extensions are available for Windows at this time.\n"
                },
                {
                    "name": "Features",
                    "content": "The following operations are sped up when using Rust:\n\n• discovery of differences between repositories (pull/push)\n\n• nodemap (see hg help config.format.use-persistent-nodemap)\n\n• all commands using the dirstate (status, commit, diff, add, update, etc.)\n\n• dirstate-v2 (see hg help config.format.use-dirstate-v2)\n\n• iteration over ancestors in a graph\n\nMore features are in the works, and improvements on the above listed are still  in  progress.\nFor more experimental work see the \"rhg\" section.\n"
                },
                {
                    "name": "Checking for Rust",
                    "content": "You may already have the Rust extensions depending on how you install Mercurial:\n\n$ hg debuginstall | grep -i rust\nchecking Rust extensions (installed)\nchecking module policy (rust+c-allow)\n\nIf  those  lines  don't even exist, you're using an old version of hg which does not have any\nRust extensions yet.\n"
                },
                {
                    "name": "Installing",
                    "content": "You will need cargo to be in your $PATH. See the \"MSRV\" section for which version to use.\n"
                },
                {
                    "name": "Using pip",
                    "content": "Users of pip can install the Rust extensions with the following command:\n\n$ pip install mercurial --global-option --rust --no-use-pep517\n\n--no-use-pep517 is here to tell pip to  preserve  backwards  compatibility  with  the  legacy\nsetup.py  system.  Mercurial  has not yet migrated its complex setup to the new system, so we\nstill need this to add compiled extensions.\n\nThis might take a couple of minutes because you're compiling everything.\n\nSee the \"Checking for Rust\" section to see if the install succeeded.\n"
                },
                {
                    "name": "From your distribution",
                    "content": "Some distributions are shipping Mercurial  with  Rust  extensions  enabled  and  pre-compiled\n(meaning  you  won't  have  to install cargo), or allow you to specify an install flag. Check\nwith your specific distribution for how to do that, or ask their  team  to  add  support  for\nhg+Rust!\n"
                },
                {
                    "name": "From source",
                    "content": "Please  refer to the rust/README.rst file in the Mercurial repository for instructions on how\nto install from source.\n\nMSRV\nThe minimum supported Rust version is defined in rust/clippy.toml.  The project's  policy  is\nto  keep  it at or below the version from Debian testing, to make the distributions' job eas‐\nier.\n"
                },
                {
                    "name": "rhg",
                    "content": "There exists an experimental pure-Rust version of Mercurial called rhg with a fallback mecha‐\nnism for unsupported invocations. It allows for much faster  execution  of  certain  commands\nwhile adding no discernable overhead for the rest.\n\nThe  only way of trying it out is by building it from source. Please refer to rust/README.rst\nin the Mercurial repository.\n\nSee hg help config.rhg for configuration options.\n"
                },
                {
                    "name": "Contributing",
                    "content": "If you would like to help the Rust endeavor, please refer to rust/README.rst in the Mercurial\nrepository.\n"
                }
            ]
        },
        "USING MERCURIAL FROM SCRIPTS AND AUTOMATION": {
            "content": "It is common for machines (as opposed to humans) to consume Mercurial.  This help  topic  de‐\nscribes some of the considerations for interfacing machines with Mercurial.\n",
            "subsections": [
                {
                    "name": "Choosing an Interface",
                    "content": "Machines have a choice of several methods to interface with Mercurial.  These include:\n\n• Executing the hg process\n\n• Querying a HTTP server\n\n• Calling out to a command server\n\nExecuting hg processes is very similar to how humans interact with Mercurial in the shell. It\nshould already be familiar to you.\n\nhg  serve can  be  used to start a server. By default, this will start a \"hgweb\" HTTP server.\nThis HTTP server has support for machine-readable output, such as JSON. For more, see hg help\nhgweb.\n\nhg serve can also start a \"command server.\" Clients can connect to this server and issue Mer‐\ncurial commands over a special protocol.  For more details on the command  server,  including\nlinks to client libraries, see https://www.mercurial-scm.org/wiki/CommandServer.\n\nhg  serve based  interfaces (the hgweb and command servers) have the advantage over simple hg\nprocess invocations in that they are likely more efficient. This is because there is signifi‐\ncant overhead to spawn new Python processes.\n\nTip    If you need to invoke several hg processes in short order and/or performance is impor‐\ntant to you, use of a server-based interface is highly recommended.\n"
                },
                {
                    "name": "Environment Variables",
                    "content": "As documented in hg help environment, various environment variables influence  the  operation\nof Mercurial. The following are particularly relevant for machines consuming Mercurial:\n\nHGPLAIN\nIf  not set, Mercurial's output could be influenced by configuration settings that im‐\npact its encoding, verbose mode, localization, etc.\n\nIt is highly recommended for machines to set this variable when invoking hg processes.\n\nHGENCODING\nIf not set, the locale used by Mercurial will be detected from the environment. If the\ndetermined locale does not support display of certain characters, Mercurial may render\nthese character sequences incorrectly (often by using \"?\" as a placeholder for invalid\ncharacters in the current locale).\n\nExplicitly setting this environment variable is a good practice to  guarantee  consis‐\ntent results. \"utf-8\" is a good choice on UNIX-like environments.\n\nHGRCPATH\nIf  not set, Mercurial will inherit config options from config files using the process\ndescribed in hg help config. This  includes  inheriting  user  or  system-wide  config\nfiles.\n\nWhen utmost control over the Mercurial configuration is desired, the value of HGRCPATH\ncan  be  set to an explicit file with known good configs. In rare cases, the value can\nbe set to an empty file or the null device (often /dev/null) to bypass loading of  any\nuser  or  system  config  files. Note that these approaches can have unintended conse‐\nquences, as the user and system config files often define things like the username and\nextensions that may be required to interface with a repository.\n\nHGRCSKIPREPO\nWhen set, the .hg/hgrc from repositories are not read.\n\nNote that not reading the repository's configuration can have unintended consequences,\nas the repository config files can define things like extensions that are required for\naccess to the repository.\n"
                },
                {
                    "name": "Command-line Flags",
                    "content": "Mercurial's default command-line parser is designed for humans, and is not robust against ma‐\nlicious input. For instance, you can start a debugger by  passing  --debugger  as  an  option\nvalue:\n\n$ REV=--debugger sh -c 'hg log -r \"$REV\"'\n\nThis  happens  because several command-line flags need to be scanned without using a concrete\ncommand table, which may be modified while loading repository settings and extensions.\n\nSince Mercurial  4.4.2,  the  parsing  of  such  flags  may  be  restricted  by  setting  HG‐\nPLAIN=+strictflags.  When  this  feature is enabled, all early options (e.g. -R/--repository,\n--cwd, --config) must be specified first amongst the other global options, and cannot be  in‐\njected to an arbitrary location:\n\n$ HGPLAIN=+strictflags hg -R \"$REPO\" log -r \"$REV\"\n\nIn  earlier Mercurial versions where +strictflags isn't available, you can mitigate the issue\nby concatenating an option value with its flag:\n\n$ hg log -r\"$REV\" --keyword=\"$KEYWORD\"\n"
                },
                {
                    "name": "Consuming Command Output",
                    "content": "It is common for machines to need to parse the output  of  Mercurial  commands  for  relevant\ndata. This section describes the various techniques for doing so.\n"
                },
                {
                    "name": "Parsing Raw Command Output",
                    "content": "Likely the simplest and most effective solution for consuming command output is to simply in‐\nvoke hg commands as you would as a user and parse their output.\n\nThe output of many commands can easily be parsed with tools like grep, sed, and awk.\n\nA  potential  downside  with parsing command output is that the output of commands can change\nwhen Mercurial is upgraded. While Mercurial does generally strive for strong  backwards  com‐\npatibility, command output does occasionally change. Having tests for your automated interac‐\ntions  with hg commands is generally recommended, but is even more important when raw command\noutput parsing is involved.\n"
                },
                {
                    "name": "Using Templates to Control Output",
                    "content": "Many hg commands support templatized output via the -T/--template argument. For more, see  hg\nhelp templates.\n\nTemplates  are  useful for explicitly controlling output so that you get exactly the data you\nwant formatted how you want it. For example, log -T {node}\\n can be used to print  a  newline\ndelimited  list  of  changeset  nodes  instead of a human-tailored output containing authors,\ndates, descriptions, etc.\n\nTip    If parsing raw command output is too complicated, consider  using  templates  to  make\nyour life easier.\n\nThe  -T/--template  argument  allows specifying pre-defined styles.  Mercurial ships with the\nmachine-readable styles cbor, json, and xml, which provide CBOR, JSON, and  XML  output,  re‐\nspectively.  These are useful for producing output that is machine readable as-is.\n\n(Mercurial 5.0 is required for CBOR style.)\n\nImportant\nThe  json  and xml styles are considered experimental. While they may be attractive to\nuse for easily obtaining machine-readable output, their behavior may change in  subse‐\nquent versions.\n\nThese  styles may also exhibit unexpected results when dealing with certain encodings.\nMercurial treats things like filenames as a series of bytes  and  normalizing  certain\nbyte sequences to JSON or XML with certain encoding settings can lead to surprises.\n"
                },
                {
                    "name": "Command Server Output",
                    "content": "If  using the command server to interact with Mercurial, you are likely using an existing li‐\nbrary/API that abstracts implementation details of the command server. If so, this  interface\nlayer may perform parsing for you, saving you the work of implementing it yourself.\n"
                },
                {
                    "name": "Output Verbosity",
                    "content": "Commands  often  have  varying  output verbosity, even when machine readable styles are being\nused (e.g. -T json). Adding -v/--verbose and --debug to the command's arguments can  increase\nthe amount of data exposed by Mercurial.\n\nAn alternate way to get the data you need is by explicitly specifying a template.\n"
                },
                {
                    "name": "Other Topics",
                    "content": ""
                },
                {
                    "name": "revsets",
                    "content": "Revisions  sets is a functional query language for selecting a set of revisions. Think\nof it as SQL for Mercurial repositories. Revsets are useful for querying  repositories\nfor specific data.\n\nSee hg help revsets for more.\n"
                },
                {
                    "name": "share extension",
                    "content": "The  share extension provides functionality for sharing repository data across several\nworking copies. It can even automatically \"pool\" storage for logically related reposi‐\ntories when cloning.\n\nConfiguring the share extension can lead to significant  resource  utilization  reduc‐\ntion, particularly around disk space and the network. This is especially true for con‐\ntinuous integration (CI) environments.\n\nSee hg help -e share for more.\n"
                }
            ]
        },
        "SUBREPOSITORIES": {
            "content": "Subrepositories let you nest external repositories or projects into a parent Mercurial repos‐\nitory, and make commands operate on them as a group.\n\nMercurial currently supports Mercurial, Git, and Subversion subrepositories.\n\nSubrepositories are made of three components:\n\n1. Nested repository checkouts. They can appear anywhere in the parent working directory.\n\n2. Nested  repository  references.  They are defined in .hgsub, which should be placed in the\nroot of working directory, and tell where the subrepository checkouts come from. Mercurial\nsubrepositories are referenced like:\n\npath/to/nested = https://example.com/nested/repo/path\n\nGit and Subversion subrepos are also supported:\n\npath/to/nested = [git]git://example.com/nested/repo/path\npath/to/nested = [svn]https://example.com/nested/trunk/path\n\nwhere path/to/nested is the checkout location relatively to the parent Mercurial root, and\nhttps://example.com/nested/repo/path is the source repository path. The  source  can  also\nreference a filesystem path.\n\nNote  that  .hgsub does not exist by default in Mercurial repositories, you have to create\nand add it to the parent repository before using subrepositories.\n\n3. Nested repository states. They are defined in .hgsubstate, which is placed in the root  of\nworking  directory, and capture whatever information is required to restore the subreposi‐\ntories to the state they were committed in a parent repository changeset. Mercurial  auto‐\nmatically record the nested repositories states when committing in the parent repository.\n\nNote\nThe .hgsubstate file should not be edited manually.\n",
            "subsections": [
                {
                    "name": "Adding a Subrepository",
                    "content": "If  .hgsub  does  not exist, create it and add it to the parent repository. Clone or checkout\nthe external projects where you want it to live in the parent repository. Edit .hgsub and add\nthe subrepository entry as described above. At this point, the subrepository is  tracked  and\nthe next commit will record its state in .hgsubstate and bind it to the committed changeset.\n"
                },
                {
                    "name": "Synchronizing a Subrepository",
                    "content": "Subrepos  do not automatically track the latest changeset of their sources. Instead, they are\nupdated to the changeset that corresponds with the changeset checked  out  in  the  top-level\nchangeset. This is so developers always get a consistent set of compatible code and libraries\nwhen they update.\n\nThus,  updating  subrepos is a manual process. Simply check out target subrepo at the desired\nrevision, test in the top-level repo, then commit in the parent repository to record the  new\ncombination.\n"
                },
                {
                    "name": "Deleting a Subrepository",
                    "content": "To  remove a subrepository from the parent repository, delete its reference from .hgsub, then\nremove its files.\n"
                },
                {
                    "name": "Interaction with Mercurial Commands",
                    "content": "add    add does not recurse in subrepos unless -S/--subrepos is specified.  However,  if  you\nspecify  the full path of a file in a subrepo, it will be added even without -S/--sub‐\nrepos specified.  Subversion subrepositories are currently silently ignored.\n"
                },
                {
                    "name": "addremove",
                    "content": "addremove does not recurse into subrepos unless -S/--subrepos is specified.   However,\nif  you specify the full path of a directory in a subrepo, addremove will be performed\non it even without -S/--subrepos being specified.  Git and Subversion  subrepositories\nwill print a warning and continue.\n"
                },
                {
                    "name": "archive",
                    "content": "archive does not recurse in subrepositories unless -S/--subrepos is specified.\n\ncat    Git  subrepositories  only support exact file matches.  Subversion subrepositories are\ncurrently ignored.\n\ncommit commit creates a consistent snapshot of the state of the entire project and  its  sub‐\nrepositories. If any subrepositories have been modified, Mercurial will abort.  Mercu‐\nrial  can  be  made  to  instead  commit  all  modified  subrepositories by specifying\n-S/--subrepos, or setting \"ui.commitsubrepos=True\" in a  configuration  file  (see  hg\nhelp  config).   After  there  are  no longer any modified subrepositories, it records\ntheir state and finally commits it in the parent repository.  The  --addremove  option\nalso  honors  the  -S/--subrepos  option.  However, Git and Subversion subrepositories\nwill print a warning and abort.\n\ndiff   diff does not recurse in subrepos unless -S/--subrepos is specified.  However, if  you\nspecify  the  full  path  of  a file or directory in a subrepo, it will be diffed even\nwithout -S/--subrepos  being  specified.   Subversion  subrepositories  are  currently\nsilently ignored.\n\nfiles  files  does  not recurse into subrepos unless -S/--subrepos is specified.  However, if\nyou specify the full path of a file or directory in a subrepo, it  will  be  displayed\neven  without  -S/--subrepos  being specified.  Git and Subversion subrepositories are\ncurrently silently ignored.\n\nforget forget currently only handles exact file matches in subrepos.  Git and Subversion sub‐\nrepositories are currently silently ignored.\n"
                },
                {
                    "name": "incoming",
                    "content": "incoming does not recurse in subrepos unless -S/--subrepos is specified. Git and  Sub‐\nversion subrepositories are currently silently ignored.\n"
                },
                {
                    "name": "outgoing",
                    "content": "outgoing  does not recurse in subrepos unless -S/--subrepos is specified. Git and Sub‐\nversion subrepositories are currently silently ignored.\n\npull   pull is not recursive since it is not clear what to pull prior to running  hg  update.\nListing and retrieving all subrepositories changes referenced by the parent repository\npulled changesets is expensive at best, impossible in the Subversion case.\n\npush   Mercurial will automatically push all subrepositories first when the parent repository\nis  being pushed. This ensures new subrepository changes are available when referenced\nby top-level repositories.  Push is a no-op for Subversion subrepositories.\n\nserve  serve does not recurse into subrepositories unless -S/--subrepos  is  specified.   Git\nand Subversion subrepositories are currently silently ignored.\n\nstatus status  does  not recurse into subrepositories unless -S/--subrepos is specified. Sub‐\nrepository changes are displayed as regular Mercurial changes on the subrepository el‐\nements. Subversion subrepositories are currently silently ignored.\n\nremove remove does not recurse into subrepositories unless -S/--subrepos is specified.   How‐\never,  if  you  specify a file or directory path in a subrepo, it will be removed even\nwithout -S/--subrepos.  Git and Subversion subrepositories are currently silently  ig‐\nnored.\n\nupdate update  restores  the  subrepos  in the state they were originally committed in target\nchangeset. If the recorded changeset is not available in  the  current  subrepository,\nMercurial will pull it in first before updating.  This means that updating can require\nnetwork access when using subrepositories.\n"
                },
                {
                    "name": "Remapping Subrepositories Sources",
                    "content": "A  subrepository  source  location  may change during a project life, invalidating references\nstored in the parent repository history. To fix this, rewriting rules can be defined in  par‐\nent repository hgrc file or in Mercurial configuration. See the [subpaths] section in hgrc(5)\nfor more details.\n"
                }
            ]
        },
        "TEMPLATE USAGE": {
            "content": "Mercurial  allows  you to customize output of commands through templates. You can either pass\nin a template or select an existing template-style from the command line, via the  --template\noption.\n\nYou  can  customize output for any \"log-like\" command: log, outgoing, incoming, tip, parents,\nand heads.\n\nSome built-in styles are packaged with Mercurial. These can be listed with hg log  --template\nlist. Example usage:\n\n$ hg log -r1.0::1.1 --template changelog\n\nA template is a piece of text, with markup to invoke variable expansion:\n\n$ hg log -r1 --template \"{node}\\n\"\nb56ce7b07c52de7d5fd79fb89701ea538af65746\n",
            "subsections": [
                {
                    "name": "Keywords",
                    "content": "Strings  in curly braces are called keywords. The availability of keywords depends on the ex‐\nact context of the templater. These keywords are usually available for templating a  log-like\ncommand:\n"
                },
                {
                    "name": "_fast_rank",
                    "content": "the rank of a changeset if cached\n\nThe  rank  of  a  revision is the size of the sub-graph it defines as a head.  Equiva‐\nlently, the rank of a revision r is the size of the set ancestors(r), r included.\n"
                },
                {
                    "name": "activebookmark",
                    "content": "String. The active bookmark, if it is associated with the changeset.\n\nauthor Alias for {user}\n\nbisect String. The changeset bisection status.\n"
                },
                {
                    "name": "bookmarks",
                    "content": "List of strings. Any bookmarks associated with the changeset. Also sets 'active',  the\nname of the active bookmark.\n\nbranch String. The name of the branch on which the changeset was committed.\n"
                },
                {
                    "name": "changessincelatesttag",
                    "content": "Integer. All ancestors not in the latest tag.\n"
                },
                {
                    "name": "children",
                    "content": "List of strings. The children of the changeset.\n\ndate   Date information. The date when the changeset was committed.\n\ndesc   String. The text of the changeset description.\n"
                },
                {
                    "name": "diffstat",
                    "content": "String.  Statistics of changes with the following format: \"modified files: +added/-re‐\nmoved lines\"\n\nextras List of dicts with key, value entries of the 'extras' field of this changeset.\n"
                },
                {
                    "name": "file_adds",
                    "content": "List of strings. Files added by this changeset.\n"
                },
                {
                    "name": "file_copies",
                    "content": "List of strings. Files copied in this changeset with their sources.\n"
                },
                {
                    "name": "file_copies_switch",
                    "content": "List of strings. Like \"filecopies\" but displayed only if the --copied switch is set.\n"
                },
                {
                    "name": "file_dels",
                    "content": "List of strings. Files removed by this changeset.\n"
                },
                {
                    "name": "file_mods",
                    "content": "List of strings. Files modified by this changeset.\n\nfiles  List of strings. All files modified, added, or removed by this changeset.\n"
                },
                {
                    "name": "graphnode",
                    "content": "String. The character representing the changeset node in an ASCII revision graph.\n"
                },
                {
                    "name": "graphwidth",
                    "content": "Integer. The width of the graph drawn by 'log --graph' or zero.\n\nindex  Integer. The current iteration of the loop. (0 indexed)\n"
                },
                {
                    "name": "latesttag",
                    "content": "List of strings. The global tags on the most recent globally tagged ancestor  of  this\nchangeset.  If no such tags exist, the list consists of the single string \"null\".\n"
                },
                {
                    "name": "latesttagdistance",
                    "content": "Integer. Longest path to the latest tag.\n"
                },
                {
                    "name": "namespaces",
                    "content": "Dict of lists. Names attached to this changeset per namespace.\n\nnegrev Integer.  The repository-local changeset negative revision number, which counts in the\nopposite direction.\n\nnode   String. The changeset identification hash, as a 40 hexadecimal digit string.\n"
                },
                {
                    "name": "onelinesummary",
                    "content": "String. A one-line summary for the ctx (not including trailing newline).  The  default\ntemplate be overridden in command-templates.oneline-summary.\n\np1     Changeset.  The  changeset's  first  parent.  {p1.rev}  for  the  revision number, and\n{p1.node} for the identification hash.\n\np2     Changeset. The changeset's second  parent.  {p2.rev}  for  the  revision  number,  and\n{p2.node} for the identification hash.\n"
                },
                {
                    "name": "parents",
                    "content": "List  of  strings. The parents of the changeset in \"rev:node\" format. If the changeset\nhas only one \"natural\" parent (the predecessor revision) nothing is shown.\n"
                },
                {
                    "name": "peerurls",
                    "content": "A dictionary of repository locations defined in the [paths] section of your configura‐\ntion file.\n\nphase  String. The changeset phase name.\n"
                },
                {
                    "name": "reporoot",
                    "content": "String. The root directory of the current repository.\n\nrev    Integer. The repository-local changeset revision number.\n"
                },
                {
                    "name": "subrepos",
                    "content": "List of strings. Updated subrepositories in the changeset.\n\ntags   List of strings. Any tags associated with the changeset.\n"
                },
                {
                    "name": "termwidth",
                    "content": "Integer. The width of the current terminal.\n\nuser   String. The unmodified author of the changeset.\n"
                },
                {
                    "name": "verbosity",
                    "content": "String. The current output verbosity in 'debug', 'quiet', 'verbose', or ''.\n\nThe \"date\" keyword does not produce human-readable output. If you want to use a date in  your\noutput, you can use a filter to process it. Filters are functions which return a string based\non  the  input  variable.  Be  sure  to use the stringify filter first when you're applying a\nstring-input filter to a list-like input variable.  You can also use a chain  of  filters  to\nget the desired output:\n\n$ hg tip --template \"{date|isodate}\\n\"\n2008-08-21 18:22 +0000\n"
                },
                {
                    "name": "Filters",
                    "content": "List of filters:\n"
                },
                {
                    "name": "addbreaks",
                    "content": "Any text. Add an XHTML \"<br />\" tag before the end of every line except the last.\n\nage    Date.  Returns  a  human-readable date/time difference between the given date/time and\nthe current date/time.\n"
                },
                {
                    "name": "basename",
                    "content": "Any text. Treats the text as a path, and returns the last component of the path  after\nsplitting  by  the  path  separator.   For  example,  \"foo/bar/baz\"  becomes \"baz\" and\n\"foo/bar//\" becomes \"\".\n\ncbor   Any object. Serializes the object to CBOR bytes.\n"
                },
                {
                    "name": "commondir",
                    "content": "List of text. Treats each list item as file name with / as path separator and  returns\nthe  longest  common  directory  prefix  shared  by all list items.  Returns the empty\nstring if no common prefix exists.\n\nThe list items are not normalized, i.e. \"foo/../bar\" is handled as file \"bar\"  in  the\ndirectory \"foo/..\". Leading slashes are ignored.\n\nFor  example,  [\"foo/bar/baz\", \"foo/baz/bar\"] becomes \"foo\" and [\"foo/bar\", \"baz\"] be‐\ncomes \"\".\n\ncount  List or text. Returns the length as an integer.\n"
                },
                {
                    "name": "dirname",
                    "content": "Any text. Treats the text as a path, and strips the last component of the  path  after\nsplitting by the path separator.\n\ndomain Any  text.  Finds the first string that looks like an email address, and extracts just\nthe domain component. Example: User <user@example.com> becomes example.com.\n\nemail  Any text. Extracts the first string that looks like an email  address.  Example:  User\n<user@example.com> becomes user@example.com.\n"
                },
                {
                    "name": "emailuser",
                    "content": "Any text. Returns the user portion of an email address.\n\nescape Any  text.  Replaces  the special XML/XHTML characters \"&\", \"<\" and \">\" with XML enti‐\nties, and filters out NUL characters.\n\nfill68 Any text. Wraps the text to fit in 68 columns.\n\nfill76 Any text. Wraps the text to fit in 76 columns.\n"
                },
                {
                    "name": "firstline",
                    "content": "Any text. Returns the first line of text.\n\nhex    Any text. Convert a binary Mercurial node identifier into its long hexadecimal  repre‐\nsentation.\n\nhgdate Date. Returns the date as a pair of numbers: \"1157407993 25200\" (Unix timestamp, time‐\nzone offset).\n"
                },
                {
                    "name": "isodate",
                    "content": "Date. Returns the date in ISO 8601 format: \"2009-08-18 13:00 +0200\".\n"
                },
                {
                    "name": "isodatesec",
                    "content": "Date.  Returns  the  date  in ISO 8601 format, including seconds: \"2009-08-18 13:00:13\n+0200\". See also the rfc3339date filter.\n\njson   Any object. Serializes the object to a JSON formatted text.\n\nlower  Any text. Converts the text to lowercase.\n"
                },
                {
                    "name": "nonempty",
                    "content": "Any text. Returns '(none)' if the string is empty.\n"
                },
                {
                    "name": "obfuscate",
                    "content": "Any text. Returns the input text rendered as a sequence of XML entities.\n\nperson Any text. Returns the name before an email address, interpreting it as per RFC 5322.\n"
                },
                {
                    "name": "reverse",
                    "content": "List. Reverses the order of list items.\n"
                },
                {
                    "name": "revescape",
                    "content": "Any text. Escapes all \"special\" characters, except @.   Forward  slashes  are  escaped\ntwice  to  prevent  web  servers  from prematurely unescaping them. For example, \"@foo\nbar/baz\" becomes \"@foo%20bar%252Fbaz\".\n"
                },
                {
                    "name": "rfc3339date",
                    "content": "Date.  Returns  a  date  using  the  Internet  date  format  specified  in  RFC  3339:\n\"2009-08-18T13:00:13+02:00\".\n"
                },
                {
                    "name": "rfc822date",
                    "content": "Date.  Returns  a  date using the same format used in email headers: \"Tue, 18 Aug 2009\n13:00:13 +0200\".\n\nshort  Changeset hash. Returns the short form of a changeset  hash,  i.e.  a  12  hexadecimal\ndigit string.\n"
                },
                {
                    "name": "shortbisect",
                    "content": "Any  text.  Treats  label as a bisection status, and returns a single-character repre‐\nsenting the status (G: good, B: bad, S: skipped, U:  untested,  I:  ignored).  Returns\nsingle space if text is not a valid bisection status.\n"
                },
                {
                    "name": "shortdate",
                    "content": "Date. Returns a date like \"2006-09-18\".\n"
                },
                {
                    "name": "slashpath",
                    "content": "Any text. Replaces the native path separator with slash.\n"
                },
                {
                    "name": "splitlines",
                    "content": "Any text. Split text into a list of lines.\n"
                },
                {
                    "name": "stringify",
                    "content": "Any  type.  Turns the value into text by converting values into text and concatenating\nthem.\n"
                },
                {
                    "name": "stripdir",
                    "content": "Treat the text as path and strip a directory level, if possible.  For  example,  \"foo\"\nand \"foo/bar\" becomes \"foo\".\n"
                },
                {
                    "name": "tabindent",
                    "content": "Any text. Returns the text, with every non-empty line except the first starting with a\ntab character.\n\nupper  Any text. Converts the text to uppercase.\n"
                },
                {
                    "name": "urlescape",
                    "content": "Any   text.   Escapes  all  \"special\"  characters.  For  example,  \"foo  bar\"  becomes\n\"foo%20bar\".\n\nuser   Any text. Returns a short representation of a user name or email address.\n\nutf8   Any text. Converts from the local character encoding to UTF-8.\n\nNote that a filter is nothing more than a function call, i.e.  expr|filter is  equivalent  to\nfilter(expr).\n"
                },
                {
                    "name": "Functions",
                    "content": "In addition to filters, there are some basic built-in functions:\n"
                },
                {
                    "name": "config(section, name[, default])",
                    "content": "Returns the requested hgrc config option as a string.\n"
                },
                {
                    "name": "configbool(section, name[, default])",
                    "content": "Returns the requested hgrc config option as a boolean.\n"
                },
                {
                    "name": "configint(section, name[, default])",
                    "content": "Returns the requested hgrc config option as an integer.\n"
                },
                {
                    "name": "date(date[, fmt])",
                    "content": "Format  a  date.  The format string uses the Python strftime format.  The default is a\nUnix date format, including the timezone: \"Mon Sep 04 15:13:13 2006 0700\".\n"
                },
                {
                    "name": "dict([[key=]value...])",
                    "content": "Construct a dict from key-value pairs. A key may be omitted if a value expression  can\nprovide an unambiguous name.\n"
                },
                {
                    "name": "diff([includepattern [, excludepattern]])",
                    "content": "Show a diff, optionally specifying files to include or exclude.\n"
                },
                {
                    "name": "files(pattern)",
                    "content": "All files of the current changeset matching the pattern. See hg help patterns.\n"
                },
                {
                    "name": "fill(text[, width[, initialident[, hangindent]]])",
                    "content": "Fill many paragraphs with optional indentation. See the \"fill\" filter.\n"
                },
                {
                    "name": "filter(iterable[, expr])",
                    "content": "Remove  empty  elements from a list or a dict. If expr specified, it's applied to each\nelement to test emptiness.\n"
                },
                {
                    "name": "get(dict, key)",
                    "content": "Get an attribute/key from an object. Some keywords are complex  types.  This  function\nallows you to obtain the value of an attribute on these types.\n"
                },
                {
                    "name": "if(expr, then[, else])",
                    "content": "Conditionally execute based on the result of an expression.\n"
                },
                {
                    "name": "ifcontains(needle, haystack, then[, else])",
                    "content": "Conditionally execute based on whether the item \"needle\" is in \"haystack\".\n"
                },
                {
                    "name": "ifeq(expr1, expr2, then[, else])",
                    "content": "Conditionally execute based on whether 2 items are equivalent.\n"
                },
                {
                    "name": "indent(text, indentchars[, firstline])",
                    "content": "Indents  all  non-empty  lines with the characters given in the indentchars string. An\noptional third parameter will override the indent for the first line only if present.\n"
                },
                {
                    "name": "join(list, sep)",
                    "content": "Join items in a list with a delimiter.\n"
                },
                {
                    "name": "label(label, expr)",
                    "content": "Apply a label to generated content. Content with a label applied can result  in  addi‐\ntional  post-processing,  such as automatic colorization. In order to receive effects,\nlabels must have a dot, such as log.secret or branch.active.\n"
                },
                {
                    "name": "latesttag([pattern])",
                    "content": "The global tags matching the given pattern on the most recent globally tagged ancestor\nof this changeset.  If no such tags exist, the \"{tag}\" template resolves to the string\n\"null\". See hg help revisions.patterns for the pattern syntax.\n"
                },
                {
                    "name": "localdate(date[, tz])",
                    "content": "Converts a date to the specified timezone.  The default is local date.\n"
                },
                {
                    "name": "mailmap(author)",
                    "content": "Return the author, updated according to the value set in the .mailmap file\n"
                },
                {
                    "name": "max(iterable)",
                    "content": "Return the max of an iterable\n"
                },
                {
                    "name": "min(iterable)",
                    "content": "Return the min of an iterable\n"
                },
                {
                    "name": "mod(a, b)",
                    "content": "Calculate a mod b such that a / b + a mod b == a\n"
                },
                {
                    "name": "pad(text, width[, fillchar=' '[, left=False[, truncate=False]]])",
                    "content": "Pad text with a fill character.\n"
                },
                {
                    "name": "relpath(path)",
                    "content": "Convert a repository-absolute path into a filesystem  path  relative  to  the  current\nworking directory.\n"
                },
                {
                    "name": "revset(query[, formatargs...])",
                    "content": "Execute a revision set query. See hg help revset.\n"
                },
                {
                    "name": "rstdoc(text, style)",
                    "content": "Format reStructuredText.\n"
                },
                {
                    "name": "search(pattern, text)",
                    "content": "Look  for the first text matching the regular expression pattern.  Groups are accessi‐\nble as {1}, {2}, ... in %-mapped template.\n"
                },
                {
                    "name": "separate(sep, args...)",
                    "content": "Add a separator between non-empty arguments.\n"
                },
                {
                    "name": "shortest(node, minlength=4)",
                    "content": "Obtain the shortest representation of a node.\n"
                },
                {
                    "name": "startswith(pattern, text)",
                    "content": "Returns the value from the \"text\" argument if it begins  with  the  content  from  the\n\"pattern\" argument.\n"
                },
                {
                    "name": "strip(text[, chars])",
                    "content": "Strip  characters  from  a  string. By default, strips all leading and trailing white‐\nspace.\n"
                },
                {
                    "name": "sub(pattern, replacement, expression)",
                    "content": "Perform text substitution using regular expressions.\n"
                },
                {
                    "name": "subsetparents(rev, revset)",
                    "content": "Look up parents of the rev in the sub graph given by the revset.\n"
                },
                {
                    "name": "word(number, text[, separator])",
                    "content": "Return the nth word from a string.\n"
                },
                {
                    "name": "Operators",
                    "content": "We provide a limited set of infix arithmetic operations on integers:\n\n+ for addition\n- for subtraction\n* for multiplication\n/ for floor division (division rounded to integer nearest -infinity)\n\nDivision fulfills the law x = x / y + mod(x, y).\n\nAlso, for any expression that returns a list, there is a list operator:\n\nexpr % \"{template}\"\n\nAs seen in the above example, {template} is interpreted as a template.  To  prevent  it  from\nbeing interpreted, you can use an escape character \\{ or a raw string prefix, r'...'.\n\nThe dot operator can be used as a shorthand for accessing a sub item:\n\n• expr.member is roughly equivalent to expr % '{member}' if expr returns a non-list/dict. The\nreturned value is not stringified.\n\n• dict.key is identical to get(dict, 'key').\n"
                },
                {
                    "name": "Aliases",
                    "content": "New keywords and functions can be defined in the templatealias section of a Mercurial config‐\nuration file:\n\n<alias> = <definition>\n\nArguments of the form a1, a2, etc. are substituted from the alias into the definition.\n\nFor example,\n\n[templatealias]\nr = rev\nrn = \"{r}:{node|short}\"\nleftpad(s, w) = pad(s, w, ' ', True)\n\ndefines two symbol aliases, r and rn, and a function alias leftpad().\n\nIt's  also  possible  to  specify complete template strings, using the templates section. The\nsyntax used is the general template string syntax.\n\nFor example,\n\n[templates]\nnodedate = \"{node|short}: {date(date, \"%Y-%m-%d\")}\\n\"\n\ndefines a template, nodedate, which can be called like:\n\n$ hg log -r . -Tnodedate\n\nA template defined in templates section can also be referenced from another template:\n\n$ hg log -r . -T \"{rev} {nodedate}\"\n\nbut be aware that the keywords cannot be overridden by templates. For example, a template de‐\nfined as templates.rev cannot be referenced as {rev}.\n\nA template defined in templates section may have sub templates which are inserted  before/af‐\nter/between items:\n\n[templates]\nmyjson = ' {dict(rev, node|short)|json}'\nmyjson:docheader = '\\{\\n'\nmyjson:docfooter = '\\n}\\n'\nmyjson:separator = ',\\n'\n"
                },
                {
                    "name": "Examples",
                    "content": "Some sample command line templates:\n\n• Format lists, e.g. files:\n\n$ hg log -r 0 --template \"files:\\n{files % '  {file}\\n'}\"\n\n• Join the list of files with a \", \":\n\n$ hg log -r 0 --template \"files: {join(files, ', ')}\\n\"\n\n• Join the list of files ending with \".py\" with a \", \":\n\n$ hg log -r 0 --template \"pythonfiles: {join(files('.py'), ', ')}\\n\"\n\n• Separate non-empty arguments by a \" \":\n\n$ hg log -r 0 --template \"{separate(' ', node, bookmarks, tags}\\n\"\n\n• Modify each line of a commit description:\n\n$ hg log --template \"{splitlines(desc) % ' {line}\\n'}\"\n\n• Format date:\n\n$ hg log -r 0 --template \"{date(date, '%Y')}\\n\"\n\n• Display date in UTC:\n\n$ hg log -r 0 --template \"{localdate(date, 'UTC')|date}\\n\"\n\n• Output the description set to a fill-width of 30:\n\n$ hg log -r 0 --template \"{fill(desc, 30)}\"\n\n• Use a conditional to test for the default branch:\n\n$ hg log -r 0 --template \"{ifeq(branch, 'default', 'on the main branch',\n'on branch {branch}')}\\n\"\n\n• Append a newline if not empty:\n\n$ hg tip --template \"{if(author, '{author}\\n')}\"\n\n• Label the output for use with the color extension:\n\n$ hg log -r 0 --template \"{label('changeset.{phase}', node|short)}\\n\"\n\n• Invert the firstline filter, i.e. everything but the first line:\n\n$ hg log -r 0 --template \"{sub(r'^.*\\n?\\n?', '', desc)}\\n\"\n\n• Display the contents of the 'extra' field, one per line:\n\n$ hg log -r 0 --template \"{join(extras, '\\n')}\\n\"\n\n• Mark the active bookmark with '*':\n\n$ hg log --template \"{bookmarks % '{bookmark}{ifeq(bookmark, active, '*')} '}\\n\"\n\n• Find the previous release candidate tag, the distance and changes since the tag:\n\n$ hg log -r . --template \"{latesttag('re:^.*-rc$') % '{tag}, {changes}, {distance}'}\\n\"\n\n• Mark the working copy parent with '@':\n\n$ hg log --template \"{ifcontains(rev, revset('.'), '@')}\\n\"\n\n• Show details of parent revisions:\n\n$ hg log --template \"{revset('parents(%d)', rev) % '{desc|firstline}\\n'}\"\n\n• Show only commit descriptions that start with \"template\":\n\n$ hg log --template \"{startswith('template', firstline(desc))}\\n\"\n\n• Print the first word of each line of a commit message:\n\n$ hg log --template \"{word(0, desc)}\\n\"\n"
                }
            ]
        },
        "URL PATHS": {
            "content": "Valid URLs are of the form:\n\nlocal/filesystem/path[#revision]\nfile://local/filesystem/path[#revision]\nhttp://[user[:pass]@]host[:port]/[path][#revision]\nhttps://[user[:pass]@]host[:port]/[path][#revision]\nssh://[user@]host[:port]/[path][#revision]\npath://pathname\n\nPaths  in  the local filesystem can either point to Mercurial repositories or to bundle files\n(as created by hg bundle or hg incoming --bundle). See also hg help paths.\n\nAn optional identifier after # indicates a particular branch, tag, or changeset to  use  from\nthe remote repository. See also hg help revisions.\n\nSome  features, such as pushing to http:// and https:// URLs are only possible if the feature\nis explicitly enabled on the remote Mercurial server.\n\nNote that the security of HTTPS URLs depends on proper configuration of web.cacerts.\n\nSome notes about using SSH with Mercurial:\n\n• SSH requires an accessible shell account on the destination machine and a copy of hg in the\nremote path or specified with remotecmd.\n\n• path is relative to the remote user's home directory by default. Use an extra slash at  the\nstart of a path to specify an absolute path:\n\nssh://example.com//tmp/repository\n\n• Mercurial doesn't use its own compression via SSH; the right thing to do is to configure it\nin your ~/.ssh/config, e.g.:\n\nHost *.mylocalnetwork.example.com\nCompression no\nHost *\nCompression yes\n\nAlternatively  specify  \"ssh -C\" as your ssh command in your configuration file or with the\n--ssh command line option.\n\nThese URLs can all be stored in your configuration file with path aliases under  the  [paths]\nsection like so:\n\n[paths]\nalias1 = URL1\nalias2 = URL2\n...\n\nYou  can  then use the alias for any command that uses a URL (for example hg pull alias1 will\nbe treated as hg pull URL1).\n\nTwo path aliases are special because they are used as defaults when you do  not  provide  the\nURL to a command:\n",
            "subsections": [
                {
                    "name": "default:",
                    "content": "When  you  create  a repository with hg clone, the clone command saves the location of\nthe source repository as the new repository's 'default' path. This is then  used  when\nyou omit path from push- and pull-like commands (including incoming and outgoing).\n"
                },
                {
                    "name": "default-push:",
                    "content": "The  push  command  will look for a path named 'default-push', and prefer it over 'de‐\nfault' if both are defined.\n\nThese alias can also be use in the path:// scheme:\n\n[paths]\nalias1 = URL1\nalias2 = path://alias1\n...\n\ncheck hg help config.paths for details about the behavior of such \"sub-path\".\n"
                }
            ]
        },
        "EXTENSIONS": {
            "content": "This section contains help for extensions that are distributed together with Mercurial.  Help\nfor other extensions is available in the help system.\n",
            "subsections": [
                {
                    "name": "absorb",
                    "content": "apply working directory changes to changesets (EXPERIMENTAL)\n\nThe  absorb extension provides a command to use annotate information to amend modified chunks\ninto the corresponding non-public changesets.\n\n[absorb]\n# only check 50 recent non-public changesets at most\nmax-stack-size = 50\n# whether to add noise to new commits to avoid obsolescence cycle\nadd-noise = 1\n# make `amend --correlated` a shortcut to the main command\namend-flag = correlated\n\n[color]\nabsorb.description = yellow\nabsorb.node = blue bold\nabsorb.path = bold\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change creation",
                    "content": ""
                },
                {
                    "name": "absorb",
                    "content": "incorporate corrections into the stack of draft changesets:\n\nhg absorb [OPTION] [FILE]...\n\nabsorb analyzes each change in your working directory and attempts to amend the changed lines\ninto the changesets in your stack that first introduced those lines.\n\nIf absorb cannot find an unambiguous changeset to amend for a change,  that  change  will  be\nleft in the working directory, untouched. They can be observed by hg status or hg diff after‐\nwards. In other words, absorb does not write to the working directory.\n\nChangesets outside the revset ::. and not public() and not merge() will not be changed.\n\nChangesets that become empty after applying the changes will be deleted.\n\nBy  default,  absorb  will  show what it plans to do and prompt for confirmation.  If you are\nconfident that the changes will be absorbed to the correct place, run hg absorb  -a to  apply\nthe changes immediately.\n\nReturns 0 on success, 1 if all chunks were ignored and nothing amended.\n\nOptions:\n"
                },
                {
                    "name": "-a, --apply-changes",
                    "content": "apply changes without prompting for confirmation\n",
                    "flag": "-a",
                    "long": "--apply-changes"
                },
                {
                    "name": "-p, --print-changes",
                    "content": "always print which changesets are modified by which changes\n",
                    "flag": "-p",
                    "long": "--print-changes"
                },
                {
                    "name": "-i, --interactive",
                    "content": "interactively select which chunks to apply\n",
                    "flag": "-i",
                    "long": "--interactive"
                },
                {
                    "name": "-e, --edit-lines",
                    "content": "edit what lines belong to which changesets before commit (EXPERIMENTAL)\n",
                    "flag": "-e",
                    "long": "--edit-lines"
                },
                {
                    "name": "-n, --dry-run",
                    "content": "do not perform actions, just print output\n\n--style <STYLE>\ndisplay using template map file (DEPRECATED)\n",
                    "flag": "-n",
                    "long": "--dry-run"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "acl",
                    "content": "hooks for controlling repository access\n\nThis  hook  makes  it possible to allow or deny write access to given branches and paths of a\nrepository when receiving incoming changesets via pretxnchangegroup and pretxncommit.\n\nThe authorization is matched based on the local user name on the system where the hook  runs,\nand not the committer of the original changeset (since the latter is merely informative).\n\nThe  acl hook is best used along with a restricted shell like hgsh, preventing authenticating\nusers from doing anything other than pushing or pulling. The hook is not safe to use if users\nhave interactive shell access, as they can then disable the hook. Nor is it  safe  if  remote\nusers share an account, because then there is no way to distinguish them.\n\nThe order in which access checks are performed is:\n\n1. Deny  list for branches (section acl.deny.branches)\n\n2. Allow list for branches (section acl.allow.branches)\n\n3. Deny  list for paths    (section acl.deny)\n\n4. Allow list for paths    (section acl.allow)\n\nThe allow and deny sections take key-value pairs.\n"
                },
                {
                    "name": "Branch-based Access Control",
                    "content": "Use  the  acl.deny.branches  and acl.allow.branches sections to have branch-based access con‐\ntrol. Keys in these sections can be either:\n\n• a branch name, or\n\n• an asterisk, to match any branch;\n\nThe corresponding values can be either:\n\n• a comma-separated list containing users and groups, or\n\n• an asterisk, to match anyone;\n\nYou can add the \"!\" prefix to a user or group name to invert the sense of the match.\n"
                },
                {
                    "name": "Path-based Access Control",
                    "content": "Use the acl.deny and acl.allow sections to have path-based access control. Keys in these sec‐\ntions accept a subtree pattern (with a glob syntax by default). The corresponding values fol‐\nlow the same syntax as the other sections above.\n"
                },
                {
                    "name": "Bookmark-based Access Control",
                    "content": "Use the acl.deny.bookmarks and acl.allow.bookmarks sections  to  have  bookmark-based  access\ncontrol. Keys in these sections can be either:\n\n• a bookmark name, or\n\n• an asterisk, to match any bookmark;\n\nThe corresponding values can be either:\n\n• a comma-separated list containing users and groups, or\n\n• an asterisk, to match anyone;\n\nYou can add the \"!\" prefix to a user or group name to invert the sense of the match.\n\nNote: for interactions between clients and servers using Mercurial 3.6+ a rejection will gen‐\nerally  reject the entire push, for interactions involving older clients, the commit transac‐\ntions will already be accepted, and only the bookmark movement will be rejected.\n"
                },
                {
                    "name": "Groups",
                    "content": "Group names must be prefixed with an @ symbol. Specifying a group name has the same effect as\nspecifying all the users in that group.\n\nYou can define group members in the acl.groups section.  If  a  group  name  is  not  defined\nthere,  and  Mercurial  is  running under a Unix-like system, the list of users will be taken\nfrom the OS.  Otherwise, an exception will be raised.\n"
                },
                {
                    "name": "Example Configuration",
                    "content": "[hooks]\n\n# Use this if you want to check access restrictions at commit time\npretxncommit.acl = python:hgext.acl.hook\n\n# Use this if you want to check access restrictions for pull, push,\n# bundle and serve.\npretxnchangegroup.acl = python:hgext.acl.hook\n\n[acl]\n# Allow or deny access for incoming changes only if their source is\n# listed here, let them pass otherwise. Source is \"serve\" for all\n# remote access (http or ssh), \"push\", \"pull\" or \"bundle\" when the\n# related commands are run locally.\n# Default: serve\nsources = serve\n\n[acl.deny.branches]\n\n# Everyone is denied to the frozen branch:\nfrozen-branch = *\n\n# A bad user is denied on all branches:\n* = bad-user\n\n[acl.allow.branches]\n\n# A few users are allowed on branch-a:\nbranch-a = user-1, user-2, user-3\n\n# Only one user is allowed on branch-b:\nbranch-b = user-1\n\n# The super user is allowed on any branch:\n* = super-user\n\n# Everyone is allowed on branch-for-tests:\nbranch-for-tests = *\n\n[acl.deny]\n# This list is checked first. If a match is found, acl.allow is not\n# checked. All users are granted access if acl.deny is not present.\n# Format for both lists: glob pattern = user, ..., @group, ...\n\n# To match everyone, use an asterisk for the user:\n# my/glob/pattern = *\n\n# user6 will not have write access to any file:\n= user6\n\n# Group \"hg-denied\" will not have write access to any file:\n= @hg-denied\n\n# Nobody will be able to change \"DONT-TOUCH-THIS.txt\", despite\n# everyone being able to change all other files. See below.\nsrc/main/resources/DONT-TOUCH-THIS.txt = *\n\n[acl.allow]\n# if acl.allow is not present, all users are allowed by default\n# empty acl.allow = no users allowed\n\n# User \"docwriter\" has write access to any file under the \"docs\"\n# folder:\ndocs/ = docwriter\n\n# User \"jack\" and group \"designers\" have write access to any file\n# under the \"images\" folder:\nimages/ = jack, @designers\n\n# Everyone (except for \"user6\" and \"@hg-denied\" - see acl.deny above)\n# will have write access to any file under the \"resources\" folder\n# (except for 1 file. See acl.deny):\nsrc/main/resources/ = *\n\n.hgtags = releaseengineer\n"
                },
                {
                    "name": "Examples using the ! prefix",
                    "content": "Suppose there's a branch that only a given user (or group) should be able to push to, and you\ndon't want to restrict access to any other branch that may be created.\n\nThe \"!\" prefix allows you to prevent anyone except a given user or group to  push  changesets\nin a given branch or path.\n\nIn  the  examples below, we will: 1) Deny access to branch \"ring\" to anyone but user \"gollum\"\n2) Deny access to branch \"lake\" to anyone but members of the group \"hobbit\" 3) Deny access to\na file to anyone but user \"gollum\"\n\n[acl.allow.branches]\n# Empty\n\n[acl.deny.branches]\n\n# 1) only 'gollum' can commit to branch 'ring';\n# 'gollum' and anyone else can still commit to any other branch.\nring = !gollum\n\n# 2) only members of the group 'hobbit' can commit to branch 'lake';\n# 'hobbit' members and anyone else can still commit to any other branch.\nlake = !@hobbit\n\n# You can also deny access based on file paths:\n\n[acl.allow]\n# Empty\n\n[acl.deny]\n# 3) only 'gollum' can change the file below;\n# 'gollum' and anyone else can still change any other file.\n/misty/mountains/cave/ring = !gollum\n"
                },
                {
                    "name": "amend",
                    "content": "provide the amend command (EXPERIMENTAL)\n\nThis extension provides an amend command that is similar  to  commit  --amend  but  does  not\nprompt an editor.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change creation",
                    "content": ""
                },
                {
                    "name": "amend",
                    "content": "amend the working copy parent with all or specified outstanding changes:\n\nhg amend [OPTION]... [FILE]...\n\nSimilar  to  hg  commit --amend, but reuse the commit message without invoking editor, unless\n--edit was set.\n\nSee hg help commit for more details.\n\nOptions:\n"
                },
                {
                    "name": "-A, --addremove",
                    "content": "mark new/missing files as added/removed before committing\n",
                    "flag": "-A",
                    "long": "--addremove"
                },
                {
                    "name": "-e, --edit",
                    "content": "invoke editor on commit messages\n",
                    "flag": "-e",
                    "long": "--edit"
                },
                {
                    "name": "-i, --interactive",
                    "content": "use interactive mode\n",
                    "flag": "-i",
                    "long": "--interactive"
                },
                {
                    "name": "--close-branch",
                    "content": "mark a branch as closed, hiding it from the branch list\n",
                    "long": "--close-branch"
                },
                {
                    "name": "-s, --secret",
                    "content": "use the secret phase for committing\n",
                    "flag": "-s",
                    "long": "--secret"
                },
                {
                    "name": "--draft",
                    "content": "use the draft phase for committing\n",
                    "long": "--draft"
                },
                {
                    "name": "-n,_",
                    "content": "store a note on the amend\n"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-m,_",
                    "content": "use text as commit message\n"
                },
                {
                    "name": "-l,_",
                    "content": "read commit message from file\n"
                },
                {
                    "name": "-d,_",
                    "content": "record the specified date as commit date\n"
                },
                {
                    "name": "-u,_",
                    "content": "record the specified user as committer\n"
                },
                {
                    "name": "-D, --currentdate",
                    "content": "record the current date as commit date\n",
                    "flag": "-D",
                    "long": "--currentdate"
                },
                {
                    "name": "-U, --currentuser",
                    "content": "record the current user as committer\n\n[+] marked option can be specified multiple times\n",
                    "flag": "-U",
                    "long": "--currentuser"
                },
                {
                    "name": "automv",
                    "content": "check for unrecorded moves at commit time (EXPERIMENTAL)\n\nThis extension checks at commit/amend time if any of the committed files comes  from  an  un‐\nrecorded mv.\n\nThe threshold at which a file is considered a move can be set with the automv.similarity con‐\nfig  option. This option takes a percentage between 0 (disabled) and 100 (files must be iden‐\ntical), the default is 95.\n"
                },
                {
                    "name": "beautifygraph",
                    "content": "beautify log -G output by using Unicode characters (EXPERIMENTAL)\n\nA terminal with UTF-8 support and monospace narrow text are required.\n"
                },
                {
                    "name": "blackbox",
                    "content": "log repository events to a blackbox for debugging\n\nLogs event information to .hg/blackbox.log to help debug and diagnose problems.   The  events\nthat get logged can be configured via the blackbox.track and blackbox.ignore config keys.\n\nExamples:\n\n[blackbox]\ntrack = *\nignore = pythonhook\n# dirty is *EXPENSIVE* (slow);\n# each log entry indicates `+` if the repository is dirty, like :hg:`id`.\ndirty = True\n# record the source of log messages\nlogsource = True\n\n[blackbox]\ntrack = command, commandfinish, commandexception, exthook, pythonhook\n\n[blackbox]\ntrack = incoming\n\n[blackbox]\n# limit the size of a log file\nmaxsize = 1.5 MB\n# rotate up to N log files when the current one gets too big\nmaxfiles = 3\n\n[blackbox]\n# Include microseconds in log entries with %f (see Python function\n# datetime.datetime.strftime)\ndate-format = %Y-%m-%d @ %H:%M:%S.%f\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Repository maintenance",
                    "content": ""
                },
                {
                    "name": "blackbox",
                    "content": "view the recent repository events:\n\nhg blackbox [OPTION]...\n\nview the recent repository events\n\nOptions:\n"
                },
                {
                    "name": "-l,_",
                    "content": "the number of events to show (default: 10)\n"
                },
                {
                    "name": "bookflow",
                    "content": "implements bookmark-based branching (EXPERIMENTAL)\n\n• Disables creation of new branches (config: enablebranches=False).\n\n• Requires an active bookmark on commit (config: requirebookmark=True).\n\n• Doesn't move the active bookmark on update, only on commit.\n\n• Requires '--rev' for moving an existing bookmark.\n\n• Protects special bookmarks (config: protect=@).\n\nflow related commands\n\nhg book NAME\ncreate a new bookmark\n\nhg book NAME -r REV\nmove bookmark to revision (fast-forward)\n\nhg up|co NAME\nswitch to bookmark\n\nhg push -B .\npush active bookmark\n"
                },
                {
                    "name": "bugzilla",
                    "content": "hooks for integrating with the Bugzilla bug tracker\n\nThis  hook  extension adds comments on bugs in Bugzilla when changesets that refer to bugs by\nBugzilla ID are seen. The comment is formatted using the Mercurial template mechanism.\n\nThe bug references can optionally include an update for Bugzilla of the hours  spent  working\non the bug. Bugs can also be marked fixed.\n\nFour basic modes of access to Bugzilla are provided:\n\n1. Access via the Bugzilla REST-API. Requires bugzilla 5.0 or later.\n\n2. Access via the Bugzilla XMLRPC interface. Requires Bugzilla 3.4 or later.\n\n3. Check  data  via the Bugzilla XMLRPC interface and submit bug change via email to Bugzilla\nemail interface. Requires Bugzilla 3.4 or later.\n\n4. Writing directly to the Bugzilla database. Only Bugzilla  installations  using  MySQL  are\nsupported. Requires Python MySQLdb.\n\nWriting  directly  to the database is susceptible to schema changes, and relies on a Bugzilla\ncontrib script to send out bug change notification emails. This script runs as the user  run‐\nning Mercurial, must be run on the host with the Bugzilla install, and requires permission to\nread  Bugzilla  configuration  details and the necessary MySQL user and password to have full\naccess rights to the Bugzilla database. For these reasons this access mode is now  considered\ndeprecated, and will not be updated for new Bugzilla versions going forward. Only adding com‐\nments is supported in this access mode.\n\nAccess  via  XMLRPC  needs a Bugzilla username and password to be specified in the configura‐\ntion. Comments are added under that username. Since the configuration must be readable by all\nMercurial users, it is recommended that the rights of that user are restricted in Bugzilla to\nthe minimum necessary to add comments. Marking bugs fixed requires Bugzilla 4.0 and later.\n\nAccess via XMLRPC/email uses XMLRPC to query Bugzilla, but sends email to the Bugzilla  email\ninterface to submit comments to bugs.  The From: address in the email is set to the email ad‐\ndress  of  the Mercurial user, so the comment appears to come from the Mercurial user. In the\nevent that the Mercurial user email is not recognized by Bugzilla as  a  Bugzilla  user,  the\nemail  associated with the Bugzilla username used to log into Bugzilla is used instead as the\nsource of the comment. Marking bugs fixed works on all supported Bugzilla versions.\n\nAccess via the REST-API needs either a Bugzilla username and password or an apikey  specified\nin  the configuration. Comments are made under the given username or the user associated with\nthe apikey in Bugzilla.\n\nConfiguration items common to all access modes:\n"
                },
                {
                    "name": "bugzilla.version",
                    "content": "The access type to use. Values recognized are:\n\nrestapi\n\nBugzilla REST-API, Bugzilla 5.0 and later.\n\nxmlrpc\n\nBugzilla XMLRPC interface.\n\nxmlrpc+email\n\nBugzilla XMLRPC and email interfaces.\n\n3.0\n\nMySQL access, Bugzilla 3.0 and later.\n\n2.18\n\nMySQL access, Bugzilla 2.18 and up to but not including 3.0.\n\n2.16\n\nMySQL access, Bugzilla 2.16 and up to but not including 2.18.\n"
                },
                {
                    "name": "bugzilla.regexp",
                    "content": "Regular expression to match bug IDs for update in changeset commit message.   It  must\ncontain one \"()\" named group <ids> containing the bug IDs separated by non-digit char‐\nacters.  It may also contain a named group <hours> with a floating-point number giving\nthe hours worked on the bug. If no named groups are present, the first \"()\"  group  is\nassumed  to  contain the bug IDs, and work time is not updated. The default expression\nmatches Bug 1234, Bug no. 1234, Bug number 1234, Bugs 1234,5678, Bug 1234 and 5678 and\nvariations thereof, followed by an hours number prefixed by h  or  hours,  e.g.  hours\n1.5. Matching is case insensitive.\n"
                },
                {
                    "name": "bugzilla.fixregexp",
                    "content": "Regular  expression  to  match  bug IDs for marking fixed in changeset commit message.\nThis must contain a \"()\" named group  <ids>`  containing  the  bug  IDs  separated  by\nnon-digit  characters.  It  may  also  contain  a  named group ``<hours> with a float‐\ning-point number giving the hours worked on the bug. If no named groups  are  present,\nthe  first \"()\" group is assumed to contain the bug IDs, and work time is not updated.\nThe default expression matches Fixes 1234, Fixes bug 1234, Fixes bugs 1234,5678, Fixes\n1234 and 5678 and variations thereof, followed by an hours number  prefixed  by  h  or\nhours, e.g. hours 1.5. Matching is case insensitive.\n"
                },
                {
                    "name": "bugzilla.fixstatus",
                    "content": "The status to set a bug to when marking fixed. Default RESOLVED.\n"
                },
                {
                    "name": "bugzilla.fixresolution",
                    "content": "The resolution to set a bug to when marking fixed. Default FIXED.\n"
                },
                {
                    "name": "bugzilla.style",
                    "content": "The style file to use when formatting comments.\n"
                },
                {
                    "name": "bugzilla.template",
                    "content": "Template to use when formatting comments. Overrides style if specified. In addition to\nthe usual Mercurial keywords, the extension specifies:\n\n{bug}\n\nThe Bugzilla bug ID.\n\n{root}\n\nThe full pathname of the Mercurial repository.\n\n{webroot}\n\nStripped pathname of the Mercurial repository.\n\n{hgweb}\n\nBase URL for browsing Mercurial repositories.\n\nDefault   changeset   {node|short}   in   repo   {root}   refers  to  bug  {bug}.\\nde‐\ntails:\\n\\t{desc|tabindent}\n"
                },
                {
                    "name": "bugzilla.strip",
                    "content": "The number of path separator characters to strip  from  the  front  of  the  Mercurial\nrepository  path ({root} in templates) to produce {webroot}. For example, a repository\nwith {root} /var/local/my-project with a strip of 2 gives a  value  for  {webroot}  of\nmy-project. Default 0.\n"
                },
                {
                    "name": "web.baseurl",
                    "content": "Base URL for browsing Mercurial repositories. Referenced from templates as {hgweb}.\n\nConfiguration items common to XMLRPC+email and MySQL access modes:\n"
                },
                {
                    "name": "bugzilla.usermap",
                    "content": "Path  of file containing Mercurial committer email to Bugzilla user email mappings. If\nspecified, the file should contain one mapping per line:\n\ncommitter = Bugzilla user\n\nSee also the [usermap] section.\n\nThe [usermap] section is used to specify mappings of Mercurial committer  email  to  Bugzilla\nuser  email.  See  also  bugzilla.usermap.  Contains entries of the form committer = Bugzilla\nuser.\n\nXMLRPC and REST-API access mode configuration:\n"
                },
                {
                    "name": "bugzilla.bzurl",
                    "content": "The base URL for the Bugzilla installation.  Default http://localhost/bugzilla.\n"
                },
                {
                    "name": "bugzilla.user",
                    "content": "The username to use to log into Bugzilla via XMLRPC. Default bugs.\n"
                },
                {
                    "name": "bugzilla.password",
                    "content": "The password for Bugzilla login.\n\nREST-API access mode uses the options listed above as well as:\n"
                },
                {
                    "name": "bugzilla.apikey",
                    "content": "An apikey generated on the Bugzilla instance for api access.  Using an apikey  removes\nthe need to store the user and password options.\n\nXMLRPC+email access mode uses the XMLRPC access mode configuration items, and also:\n"
                },
                {
                    "name": "bugzilla.bzemail",
                    "content": "The Bugzilla email address.\n\nIn  addition,  the  Mercurial  email  settings  must  be configured. See the documentation in\nhgrc(5), sections [email] and [smtp].\n\nMySQL access mode configuration:\n"
                },
                {
                    "name": "bugzilla.host",
                    "content": "Hostname of the MySQL server holding the Bugzilla database.  Default localhost.\n"
                },
                {
                    "name": "bugzilla.db",
                    "content": "Name of the Bugzilla database in MySQL. Default bugs.\n"
                },
                {
                    "name": "bugzilla.user",
                    "content": "Username to use to access MySQL server. Default bugs.\n"
                },
                {
                    "name": "bugzilla.password",
                    "content": "Password to use to access MySQL server.\n"
                },
                {
                    "name": "bugzilla.timeout",
                    "content": "Database connection timeout (seconds). Default 5.\n"
                },
                {
                    "name": "bugzilla.bzuser",
                    "content": "Fallback Bugzilla user name to record comments with, if changeset committer cannot  be\nfound as a Bugzilla user.\n"
                },
                {
                    "name": "bugzilla.bzdir",
                    "content": "Bugzilla install directory. Used by default notify. Default /var/www/html/bugzilla.\n"
                },
                {
                    "name": "bugzilla.notify",
                    "content": "The command to run to get Bugzilla to send bug change notification emails. Substitutes\nfrom  a  map  with 3 keys, bzdir, id (bug id) and user (committer bugzilla email). De‐\nfault depends on version; from 2.18 it is \"cd %(bzdir)s &&  perl  -T  contrib/sendbug‐\nmail.pl %(id)s %(user)s\".\n\nActivating the extension:\n\n[extensions]\nbugzilla =\n\n[hooks]\n# run bugzilla hook on every change pulled or pushed in here\nincoming.bugzilla = python:hgext.bugzilla.hook\n\nExample configurations:\n\nXMLRPC  example configuration. This uses the Bugzilla at http://my-project.org/bugzilla, log‐\nging in as user bugmail@my-project.org with password plugh. It is used with a  collection  of\nMercurial    repositories    in    /var/local/hg/repos/,    with    a    web   interface   at\nhttp://my-project.org/hg.\n\n[bugzilla]\nbzurl=http://my-project.org/bugzilla\nuser=bugmail@my-project.org\npassword=plugh\nversion=xmlrpc\ntemplate=Changeset {node|short} in {root|basename}.\n{hgweb}/{webroot}/rev/{node|short}\\n\n{desc}\\n\nstrip=5\n\n[web]\nbaseurl=http://my-project.org/hg\n\nXMLRPC+email example configuration. This uses the Bugzilla at http://my-project.org/bugzilla,\nlogging in as user bugmail@my-project.org with password plugh. It is used with  a  collection\nof    Mercurial   repositories   in   /var/local/hg/repos/,   with   a   web   interface   at\nhttp://my-project.org/hg.  Bug  comments   are   sent   to   the   Bugzilla   email   address\nbugzilla@my-project.org.\n\n[bugzilla]\nbzurl=http://my-project.org/bugzilla\nuser=bugmail@my-project.org\npassword=plugh\nversion=xmlrpc+email\nbzemail=bugzilla@my-project.org\ntemplate=Changeset {node|short} in {root|basename}.\n{hgweb}/{webroot}/rev/{node|short}\\n\n{desc}\\n\nstrip=5\n\n[web]\nbaseurl=http://my-project.org/hg\n\n[usermap]\nuser@emaildomain.com=user.name@bugzilladomain.com\n\nMySQL example configuration. This has a local Bugzilla 3.2 installation in /opt/bugzilla-3.2.\nThe  MySQL database is on localhost, the Bugzilla database name is bugs and MySQL is accessed\nwith MySQL username bugs password XYZZY. It is used with a collection of Mercurial  reposito‐\nries in /var/local/hg/repos/, with a web interface at http://my-project.org/hg.\n\n[bugzilla]\nhost=localhost\npassword=XYZZY\nversion=3.0\nbzuser=unknown@domain.com\nbzdir=/opt/bugzilla-3.2\ntemplate=Changeset {node|short} in {root|basename}.\n{hgweb}/{webroot}/rev/{node|short}\\n\n{desc}\\n\nstrip=5\n\n[web]\nbaseurl=http://my-project.org/hg\n\n[usermap]\nuser@emaildomain.com=user.name@bugzilladomain.com\n\nAll the above add a comment to the Bugzilla bug record of the form:\n\nChangeset 3b16791d6642 in repository-name.\nhttp://my-project.org/hg/repository-name/rev/3b16791d6642\n\nChangeset commit comment. Bug 1234.\n"
                },
                {
                    "name": "censor",
                    "content": "erase file content at a given revision\n\nThe  censor  command  instructs  Mercurial to erase all content of a file at a given revision\nwithout updating the changeset hash. This allows existing history to remain valid while  pre‐\nventing future clones/pulls from receiving the erased data.\n\nTypical uses for censor are due to security or legal requirements, including:\n\n* Passwords, private keys, cryptographic material\n* Licensed data/code/libraries for which the license has expired\n* Personally Identifiable Information or other private data\n\nCensored nodes can interrupt mercurial's typical operation whenever the excised data needs to\nbe materialized. Some commands, like hg cat/hg revert, simply fail when asked to produce cen‐\nsored data. Others, like hg verify and hg update, must be capable of tolerating censored data\nto  continue  to  function  in a meaningful way. Such commands only tolerate censored file As\nhaving a censored version in a checkout is impractical. The current  head  revisions  of  the\nrepository  are  checked.  If  the revision to be censored is in any of them the command will\nabort.\n\nA few informative commands such as hg grep will  unconditionally  ignore  censored  data  and\nmerely report that it was encountered.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Repository maintenance",
                    "content": ""
                },
                {
                    "name": "censor",
                    "content": "hg censor -r REV [-t TEXT] [FILE]\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "censor file from specified revision\n"
                },
                {
                    "name": "--check-heads",
                    "content": "check that repository heads are not affected (default: True)\n",
                    "long": "--check-heads"
                },
                {
                    "name": "-t,_",
                    "content": "replacement tombstone data\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "children",
                    "content": "command to display child changesets (DEPRECATED)\n\nThis extension is deprecated. You should use hg log -r \"children(REV)\" instead.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change navigation",
                    "content": ""
                },
                {
                    "name": "children",
                    "content": "show the children of the given or working directory revision:\n\nhg children [-r REV] [FILE]\n\nPrint the children of the working directory's revisions. If a revision is given via -r/--rev,\nthe children of that revision will be printed. If a file argument is given, revision in which\nthe  file  was last changed (after the working directory revision or the argument to --rev if\ngiven) is printed.\n\nPlease use hg log instead:\n\nhg children => hg log -r \"children(.)\"\nhg children -r REV => hg log -r \"children(REV)\"\n\nSee hg help log and hg help revsets.children.\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "show children of the specified revision (default: .)\n\n--style <STYLE>\ndisplay using template map file (DEPRECATED)\n"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "churn",
                    "content": "command to display statistics about repository history\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Repository maintenance",
                    "content": ""
                },
                {
                    "name": "churn",
                    "content": "histogram of changes to the repository:\n\nhg churn [-d DATE] [-r REV] [--aliases FILE] [FILE]\n\nThis command will display a histogram representing the number of changed lines or  revisions,\ngrouped  according  to the given template. The default template will group changes by author.\nThe --dateformat option may be used to group the results by date instead.\n\nStatistics are based on the number of changed lines, or alternatively the number of  matching\nrevisions if the --changesets option is specified.\n\nExamples:\n\n# display count of changed lines for every committer\nhg churn -T \"{author|email}\"\n\n# display daily activity graph\nhg churn -f \"%H\" -s -c\n\n# display activity of developers by month\nhg churn -f \"%Y-%m\" -s -c\n\n# display count of lines changed in every year\nhg churn -f \"%Y\" -s\n\n# display count of lines changed in a time range\nhg churn -d \"2020-04 to 2020-09\"\n\nIt  is  possible to map alternate email addresses to a main address by providing a file using\nthe following format:\n\n<alias email> = <actual email>\n\nSuch a file may be specified with the --aliases option, otherwise a  .hgchurn  file  will  be\nlooked for in the working directory root.  Aliases will be split from the rightmost \"=\".\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "count rate for the specified revision or revset\n"
                },
                {
                    "name": "-d,_",
                    "content": "count rate for revisions matching date spec\n"
                },
                {
                    "name": "-t,_",
                    "content": "template to group changesets (DEPRECATED)\n"
                },
                {
                    "name": "-T,_",
                    "content": "template to group changesets (default: {author|email})\n"
                },
                {
                    "name": "-f,_",
                    "content": "strftime-compatible format for grouping by date\n"
                },
                {
                    "name": "-c, --changesets",
                    "content": "count rate by number of changesets\n",
                    "flag": "-c",
                    "long": "--changesets"
                },
                {
                    "name": "-s, --sort",
                    "content": "sort by key (default: sort by count)\n",
                    "flag": "-s",
                    "long": "--sort"
                },
                {
                    "name": "--diffstat",
                    "content": "display added/removed lines separately\n\n--aliases <FILE>\nfile with email aliases\n",
                    "long": "--diffstat"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "clonebundles",
                    "content": "advertise pre-generated bundles to seed clones\n\n\"clonebundles\"  is  a server-side extension used to advertise the existence of pre-generated,\nexternally hosted bundle files to clients that are cloning so that  cloning  can  be  faster,\nmore  reliable,  and require less resources on the server. \"pullbundles\" is a related feature\nfor sending pre-generated bundle files to clients as part of pull operations.\n\nCloning can be a CPU and I/O intensive operation on servers. Traditionally,  the  server,  in\nresponse to a client's request to clone, dynamically generates a bundle containing the entire\nrepository  content  and  sends  it to the client.  There is no caching on the server and the\nserver will have to redundantly generate the same outgoing bundle in response to  each  clone\nrequest.  For servers with large repositories or with high clone volume, the load from clones\ncan make scaling the server challenging and costly.\n\nThis extension provides server operators the ability to offload potentially  expensive  clone\nload  to  an external service. Pre-generated bundles also allow using more CPU intensive com‐\npression, reducing the effective bandwidth requirements.\n\nHere's how clone bundles work:\n\n1. A server operator establishes a mechanism for making bundle files available on  a  hosting\nservice where Mercurial clients can fetch them.\n\n2. A  manifest  file listing available bundle URLs and some optional metadata is added to the\nMercurial repository on the server.\n\n3. A client initiates a clone against a clone bundles aware server.\n\n4. The client sees the server is advertising clone bundles and fetches the  manifest  listing\navailable bundles.\n\n5. The client filters and sorts the available bundles based on what it supports and prefers.\n\n6. The client downloads and applies an available bundle from the server-specified URL.\n\n7. The client reconnects to the original server and performs the equivalent of hg pull to re‐\ntrieve  all repository data not in the bundle. (The repository could have been updated be‐\ntween when the bundle was created and when the client started the  clone.)  This  may  use\n\"pullbundles\".\n\nInstead  of  the server generating full repository bundles for every clone request, it gener‐\nates full bundles once and they are subsequently reused to bootstrap new clones.  The  server\nmay  still  transfer  data  at  clone  time.   However,  this  is  only  data  that  has been\nadded/changed since the bundle was created. For large, established repositories, this can re‐\nduce server load for clones to less than 1% of original.\n\nHere's how pullbundles work:\n\n1. A manifest file listing available bundles and describing the revisions  is  added  to  the\nMercurial repository on the server.\n\n2. A  new-enough  client  informs  the  server that it supports partial pulls and initiates a\npull.\n\n3. If the server has pull bundles enabled and sees the client advertising partial  pulls,  it\nchecks for a matching pull bundle in the manifest.  A bundle matches if the format is sup‐\nported  by  the  client, the client has the required revisions already and needs something\nfrom the bundle.\n\n4. If there is at least one matching bundle, the server sends it to the client.\n\n5. The client applies the bundle and notices that the server reply was incomplete. It  initi‐\nates another pull.\n\nTo work, this extension requires the following of server operators:\n\n• Generating  bundle  files  of  repository content (typically periodically, such as once per\nday).\n\n• Clone bundles: A file server that clients have network access to and that Python knows  how\nto talk to through its normal URL handling facility (typically an HTTP/HTTPS server).\n\n• A process for keeping the bundles manifest in sync with available bundle files.\n\nStrictly speaking, using a static file hosting server isn't required: a server operator could\nuse  a  dynamic service for retrieving bundle data. However, static file hosting services are\nsimple and scalable and should be sufficient for most needs.\n\nBundle files can be generated with the hg bundle command. Typically hg bundle  --all is  used\nto produce a bundle of the entire repository.\n\nThe  bundlespec  option  stream  (see  hg  help  bundlespec) can be used to produce a special\nstreaming clonebundle, typically using hg bundle  --all  --type=\"none-streamv2\".   These  are\nbundle  files that are extremely efficient to produce and consume (read: fast). However, they\nare larger than traditional bundle formats and require that clients support the exact set  of\nrepository data store formats in use by the repository that created them.  Typically, a newer\nserver  can  serve data that is compatible with older clients.  However, streaming clone bun‐\ndles don't have this guarantee. Server operators need to be aware that newer versions of Mer‐"
                },
                {
                    "name": "curial may produce streaming clone bundles incompatible with older Mercurial versions.",
                    "content": "A server operator is responsible for creating a .hg/clonebundles.manifest file containing the\nlist of available bundle files suitable for seeding clones. If this file does not exist,  the\nrepository  will  not advertise the existence of clone bundles when clients connect. For pull\nbundles, .hg/pullbundles.manifest is used.\n\nThe manifest file contains a newline (n) delimited list of entries.\n\nEach line in this file defines an available bundle. Lines have the format:\n\n<URL> [<key>=<value>[ <key>=<value>]]\n\nThat is, a URL followed by an optional, space-delimited list of  key=value  pairs  describing\nadditional properties of this bundle. Both keys and values are URI encoded.\n\nFor pull bundles, the URL is a path under the .hg directory of the repository.\n\nKeys in UPPERCASE are reserved for use by Mercurial and are defined below.  All non-uppercase\nkeys  can  be  used by site installations. An example use for custom properties is to use the\ndatacenter attribute to define which data center a file is hosted in. Clients could then pre‐\nfer a server in the data center closest to them.\n\nThe following reserved keys are currently defined:\n\nBUNDLESPEC\nA \"bundle specification\" string that describes the type of the bundle.\n\nThese are string values that are accepted by the \"--type\" argument of hg bundle.\n\nThe values are parsed in strict mode, which means  they  must  be  of  the  \"<compres‐\nsion>-<type>\" form. See mercurial.exchange.parsebundlespec() for more details.\n\nhg  debugbundle --spec can be used to print the bundle specification string for a bun‐\ndle file. The output of this command can be used verbatim for the value of  BUNDLESPEC\n(it is already escaped).\n\nClients  will  automatically filter out specifications that are unknown or unsupported\nso they won't attempt to download something that likely won't apply.\n\nThe actual value doesn't impact client behavior beyond filtering: clients  will  still\nsniff the bundle type from the header of downloaded files.\n\nUse of this key is highly recommended, as it allows clients to easily skip unsupported\nbundles.  If this key is not defined, an old client may attempt to apply a bundle that\nit is incapable of reading.\n\nREQUIRESNI\nWhether Server Name Indication (SNI) is required to connect to the  URL.   SNI  allows\nservers to use multiple certificates on the same IP. It is somewhat common in CDNs and\nother  hosting  providers. Older Python versions do not support SNI. Defining this at‐\ntribute enables clients with older Python versions to filter this entry without  expe‐\nriencing an opaque SSL failure at connection time.\n\nIf  this  is  defined,  it is important to advertise a non-SNI fallback URL or clients\nrunning old Python releases may not be able to clone with the clonebundles facility.\n\nValue should be \"true\".\n\nREQUIREDRAM\nValue specifies expected memory requirements to decode the payload.  Values  can  have\nsuffixes for common bytes sizes. e.g. \"64MB\".\n\nThis  key  is often used with zstd-compressed bundles using a high compression level /\nwindow size, which can require 100+ MB of memory to decode.\n\nheads  Used for pull bundles. This contains the ; separated changeset hashes of the heads  of\nthe bundle content.\n\nbases  Used  for pull bundles. This contains the ; separated changeset hashes of the roots of\nthe bundle content. This can be skipped if the bundle was created without --base.\n\nManifests can contain multiple entries. Assuming metadata is defined, clients will filter en‐\ntries from the manifest that they don't support. The remaining entries are optionally  sorted\nby  client  preferences  (ui.clonebundleprefers  config  option). The client then attempts to\nfetch the bundle at the first URL in the remaining list.\n"
                },
                {
                    "name": "Errors when downloading a bundle will fail the entire clone operation: clients do  not  auto‐",
                    "content": "matically  fall back to a traditional clone. The reason for this is that if a server is using\nclone bundles, it is probably doing so because the feature is necessary to help it scale.  In\nother  words, there is an assumption that clone load will be offloaded to another service and\nthat the Mercurial server isn't responsible for serving this clone load.  If that other  ser‐\nvice experiences issues and clients start mass falling back to the original Mercurial server,\nthe  added  clone load could overwhelm the server due to unexpected load and effectively take\nit offline. Not having clients automatically fall back to cloning from  the  original  server\nmitigates this scenario.\n\nBecause there is no automatic Mercurial server fallback on failure of the bundle hosting ser‐\nvice, it is important for server operators to view the bundle hosting service as an extension\nof  the Mercurial server in terms of availability and service level agreements: if the bundle\nhosting service goes down, so does the ability for clients to clone. Note: clients will see a\nmessage informing them how to bypass the clone bundles facility when  a  failure  occurs.  So\nserver  operators  should prepare for some people to follow these instructions when a failure\noccurs, thus driving more load to the original Mercurial server when the bundle hosting  ser‐\nvice fails.\n"
                },
                {
                    "name": "inline clonebundles",
                    "content": "It  is  possible  to transmit clonebundles inline in case repositories are accessed over SSH.\nThis avoids having to setup an external HTTPS server and results in the same  access  control\nas already present for the SSH setup.\n\nInline  clonebundles  should be placed into the .hg/bundle-cache directory.  A clonebundle at\n.hg/bundle-cache/mybundle.bundle  is  referred  to  in  the  clonebundles.manifest  file   as\npeer-bundle-cache://mybundle.bundle.\n"
                },
                {
                    "name": "auto-generation of clone bundles",
                    "content": "It  is  possible  to set Mercurial to automatically re-generate clone bundles when enough new\ncontent is available.\n\nMercurial will take care of the process asynchronously. The defined list of bundle-type  will\nbe  generated,  uploaded, and advertised. Older bundles will get decommissioned as newer ones\nreplace them.\n"
                },
                {
                    "name": "Bundles Generation:",
                    "content": "The extension can generate multiple variants of the clone bundle. Each different variant will\nbe defined by the \"bundle-spec\" they use:\n\n[clone-bundles]\nauto-generate.formats= zstd-v2, gzip-v2\n\nSee hg help bundlespec for details about available options.\n\nBy default, new bundles are generated when 5% of the repository contents or at least 1000 re‐\nvisions are not contained in the cached  bundles.  This  option  can  be  controlled  by  the\nclone-bundles.trigger.below-bundled-ratio  option  (default 0.95) and the clone-bundles.trig‐\nger.revs option (default 1000):\n\n[clone-bundles]\ntrigger.below-bundled-ratio=0.95\ntrigger.revs=1000\n\nThis logic can be manually triggered using the admin::clone-bundles-refresh command, or auto‐\nmatically on each repository change if clone-bundles.auto-generate.on-change is set to yes:\n\n[clone-bundles]\nauto-generate.on-change=yes\nauto-generate.formats= zstd-v2, gzip-v2\n"
                },
                {
                    "name": "Automatic Inline serving",
                    "content": "The simplest way to serve the generated bundle is through the Mercurial protocol. However  it\nis  not  the most efficient as request will still be served by that main server. It is useful\nin case where authentication is complexe or when an efficient mirror system is already in use\nanyway. See the inline clonebundles section above for details about inline clonebundles\n\nTo automatically serve generated bundle through inline clonebundle, simply set the  following\noption:\n\nauto-generate.serve-inline=yes\n\nEnabling this option disable the managed upload and serving explained below.\n"
                },
                {
                    "name": "Bundles Upload and Serving:",
                    "content": "This  is  the most efficient way to serve automatically generated clone bundles, but requires\nsome setup.\n\nThe generated bundles need to be made available to users through a \"public\" URL.  This should\nbe donne through clone-bundles.upload-command configuration. The value of this command should\nbe a shell command. It will have access to the bundle file path through the $HGCBBUNDLEPATH\nvariable. And the expected basename in the \"public\" URL is accessible at:\n\n[clone-bundles]\nupload-command=sftp put $HGCBBUNDLEPATH       sftp://bundles.host/clone-bundles/$HGCBBUNDLEBASENAME\n\nIf the file was already uploaded, the command must still succeed.\n\nAfter upload, the file should be available at an url defined by clone-bundles.url-template.\n\n[clone-bundles] url-template=https://bundles.host/cache/clone-bundles/{basename}\n"
                },
                {
                    "name": "Old bundles cleanup:",
                    "content": "When new bundles are generated, the older ones are no longer necessary  and  can  be  removed\nfrom  storage.  This is done through the clone-bundles.delete-command configuration. The com‐\nmand is given the url of the artifact to  delete  through  the  $HGCBBUNDLEURL  environment\nvariable.\n\n[clone-bundles]    delete-command=sftp   rm   sftp://bundles.host/clone-bundles/$HGCBBUN‐\nDLEBASENAME\n\nIf the file was already deleted, the command must still succeed.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Uncategorized commands",
                    "content": ""
                },
                {
                    "name": "admin::clone-bundles-clear",
                    "content": "remove existing clone bundle caches:\n\nhg admin::clone-bundles-clear\n\nSee hg help admin::clone-bundles-refresh for details on how to regenerate them.\n\nThis command will only affect bundles currently available, it will not affect  bundles  being\nasynchronously generated.\n"
                },
                {
                    "name": "admin::clone-bundles-refresh",
                    "content": "generate clone bundles according to the configuration:\n\nhg admin::clone-bundles-refresh\n\nThis  runs  the  logic for automatic generation, removing outdated bundles and generating new\nones if necessary. See hg help -e clone-bundles for details about how to configure this  fea‐\nture.\n\nOptions:\n"
                },
                {
                    "name": "--background",
                    "content": "start bundle generation in the background\n",
                    "long": "--background"
                },
                {
                    "name": "closehead",
                    "content": "close arbitrary heads without checking them out first\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change manipulation",
                    "content": ""
                },
                {
                    "name": "close-head",
                    "content": "close the given head revisions:\n\nhg close-head [OPTION]... [REV]...\n\nThis  is  equivalent  to  checking  out  each  revision in a clean tree and running hg commit\n--close-branch, except that it doesn't change the working directory.\n\nThe commit message must be specified with -l or -m.\n\nOptions:\n"
                },
                {
                    "name": "-m,_",
                    "content": "use text as commit message\n"
                },
                {
                    "name": "-l,_",
                    "content": "read commit message from file\n"
                },
                {
                    "name": "-d,_",
                    "content": "record the specified date as commit date\n"
                },
                {
                    "name": "-u,_",
                    "content": "record the specified user as committer\n"
                },
                {
                    "name": "-r,_",
                    "content": "revision to check\n\n[+] marked option can be specified multiple times\n\naliases: close-heads\n"
                },
                {
                    "name": "commitextras",
                    "content": "adds a new flag extras to commit (ADVANCED)\n"
                },
                {
                    "name": "convert",
                    "content": "import revisions from foreign VCS repositories into Mercurial\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Uncategorized commands",
                    "content": ""
                },
                {
                    "name": "convert",
                    "content": "convert a foreign SCM repository to a Mercurial one.:\n\nhg convert [OPTION]... SOURCE [DEST [REVMAP]]\n\nAccepted source formats [identifiers]:\n\n• Mercurial [hg]\n\n• CVS [cvs]\n\n• Darcs [darcs]\n\n• git [git]\n\n• Subversion [svn]\n\n• Monotone [mtn]\n\n• GNU Arch [gnuarch]\n\n• Bazaar [bzr]\n\n• Perforce [p4]\n\nAccepted destination formats [identifiers]:\n\n• Mercurial [hg]\n\n• Subversion [svn] (history on branches is not preserved)\n\nIf no revision is given, all revisions will be converted.  Otherwise, convert will  only  im‐\nport up to the named revision (given in a format understood by the source).\n\nIf no destination directory name is specified, it defaults to the basename of the source with"
                },
                {
                    "name": "-hg",
                    "content": "By  default, all sources except Mercurial will use --branchsort.  Mercurial uses --sourcesort\nto preserve original revision numbers order. Sort modes have the following effects:\n"
                },
                {
                    "name": "--branchsort",
                    "content": "convert from parent to child revision when possible, which means branches are  usually\nconverted one after the other. It generates more compact repositories.\n",
                    "long": "--branchsort"
                },
                {
                    "name": "--datesort",
                    "content": "sort  revisions  by  date. Converted repositories have good-looking changelogs but are\noften an order of magnitude larger than the same ones generated by --branchsort.\n",
                    "long": "--datesort"
                },
                {
                    "name": "--sourcesort",
                    "content": "try to preserve source revisions order, only supported by Mercurial sources.\n",
                    "long": "--sourcesort"
                },
                {
                    "name": "--closesort",
                    "content": "try to move closed revisions as close as possible to parent branches,  only  supported\nby Mercurial sources.\n\nIf  REVMAP  isn't given, it will be put in a default location (<dest>/.hg/shamap by default).\nThe REVMAP is a simple text file that maps each source commit ID to the  destination  ID  for\nthat revision, like so:\n\n<source ID> <destination ID>\n\nIf the file doesn't exist, it's automatically created. It's updated on each commit copied, so\nhg convert can be interrupted and can be run repeatedly to copy new commits.\n\nThe authormap is a simple text file that maps each source commit author to a destination com‐\nmit author. It is handy for source SCMs that use unix logins to identify authors (e.g.: CVS).\nOne line per author mapping and the line format is:\n\nsource author = destination author\n\nEmpty lines and lines starting with a # are ignored.\n\nThe filemap is a file that allows filtering and remapping of files and directories. Each line\ncan contain one of the following directives:\n\ninclude path/to/file-or-dir\n\nexclude path/to/file-or-dir\n\nrename path/to/source path/to/destination\n\nComment lines start with #. A specified path matches if it equals the full relative name of a\nfile  or  one  of  its  parent directories. The include or exclude directive with the longest\nmatching path applies, so line order does not matter.\n\nThe include directive causes a file, or all files under a directory, to be  included  in  the\ndestination  repository.  The default if there are no include statements is to include every‐\nthing.  If there are any include statements, nothing else is included.  The exclude directive\ncauses files or directories to be omitted. The rename directive renames a file  or  directory\nif  it  is converted. To rename from a subdirectory into the root of the repository, use . as\nthe path to rename to.\n\n--full will make sure the converted changesets contain exactly the right files with the right\ncontent. It will make a full conversion of all files, not just the ones  that  have  changed.\nFiles that already are correct will not be changed. This can be used to apply filemap changes\nwhen converting incrementally. This is currently only supported for Mercurial and Subversion.\n\nThe  splicemap  is a file that allows insertion of synthetic history, letting you specify the\nparents of a revision. This is useful if you want to e.g. give a Subversion  merge  two  par‐\nents,  or  graft two disconnected series of history together. Each entry contains a key, fol‐\nlowed by a space, followed by one or two comma-separated values:\n\nkey parent1, parent2\n\nThe key is the revision ID in the source revision control system whose parents should be mod‐\nified (same format as a key in .hg/shamap). The values are the revision IDs  (in  either  the\nsource  or  destination  revision  control system) that should be used as the new parents for\nthat node. For example, if you have merged \"release-1.0\" into \"trunk\", then you should  spec‐\nify  the  revision  on \"trunk\" as the first parent and the one on the \"release-1.0\" branch as\nthe second.\n\nThe branchmap is a file that allows you to rename a branch when it is being brought  in  from\nwhatever external repository. When used in conjunction with a splicemap, it allows for a pow‐\nerful  combination to help fix even the most badly mismanaged repositories and turn them into\nnicely structured Mercurial repositories. The branchmap contains lines of the form:\n\noriginalbranchname newbranchname\n\nwhere \"originalbranchname\" is the  name  of  the  branch  in  the  source  repository,  and\n\"newbranchname\"  is  the name of the branch is the destination repository. No whitespace is\nallowed in the new branch name. This can be used to (for instance) move code in  one  reposi‐\ntory from \"default\" to a named branch.\n",
                    "long": "--closesort"
                },
                {
                    "name": "Mercurial Source",
                    "content": "The Mercurial source recognizes the following configuration options, which you can set on the\ncommand line with --config:\n"
                },
                {
                    "name": "convert.hg.ignoreerrors",
                    "content": "ignore integrity errors when reading.  Use it to fix Mercurial repositories with miss‐\ning revlogs, by converting from and to Mercurial. Default is False.\n"
                },
                {
                    "name": "convert.hg.saverev",
                    "content": "store  original  revision  ID  in  changeset (forces target IDs to change). It takes a\nboolean argument and defaults to False.\n"
                },
                {
                    "name": "convert.hg.startrev",
                    "content": "specify the initial Mercurial revision.  The default is 0.\n"
                },
                {
                    "name": "convert.hg.revs",
                    "content": "revset specifying the source revisions to convert.\n"
                },
                {
                    "name": "Bazaar Source",
                    "content": "The following options can be used with --config:\n"
                },
                {
                    "name": "convert.bzr.saverev",
                    "content": "whether to store the original Bazaar commit ID in the metadata of the destination com‐\nmit. The default is True.\n"
                },
                {
                    "name": "CVS Source",
                    "content": "CVS source will use a sandbox (i.e. a checked-out copy) from CVS  to  indicate  the  starting\npoint  of what will be converted. Direct access to the repository files is not needed, unless\nof course the repository is :local:. The conversion uses the top level directory in the sand‐\nbox to find the CVS repository, and then uses CVS rlog commands to  find  files  to  convert.\nThis  means  that  unless  a filemap is given, all files under the starting directory will be\nconverted, and that any directory reorganization in the CVS sandbox is ignored.\n\nThe following options can be used with --config:\n"
                },
                {
                    "name": "convert.cvsps.cache",
                    "content": "Set to False to disable remote log caching, for testing and  debugging  purposes.  De‐\nfault is True.\n"
                },
                {
                    "name": "convert.cvsps.fuzz",
                    "content": "Specify  the  maximum time (in seconds) that is allowed between commits with identical\nuser and log message in a single changeset. When very large files were checked  in  as\npart of a changeset then the default may not be long enough.  The default is 60.\n"
                },
                {
                    "name": "convert.cvsps.logencoding",
                    "content": "Specify  encoding  name to be used for transcoding CVS log messages. Multiple encoding\nnames can be specified as a list (see hg help config.Syntax), but only the  first  ac‐\nceptable  encoding  in  the list is used per CVS log entries. This transcoding is exe‐\ncuted before cvslog hook below.\n"
                },
                {
                    "name": "convert.cvsps.mergeto",
                    "content": "Specify a regular expression to which commit log messages are matched. If a match  oc‐\ncurs,  then  the conversion process will insert a dummy revision merging the branch on\nwhich this log message occurs to  the  branch  indicated  in  the  regex.  Default  is\n{{mergetobranch ([-\\w]+)}}\n"
                },
                {
                    "name": "convert.cvsps.mergefrom",
                    "content": "Specify  a regular expression to which commit log messages are matched. If a match oc‐\ncurs, then the conversion process will add the most recent revision on the branch  in‐\ndicated  in  the  regex as the second parent of the changeset. Default is {{mergefrom‐\nbranch ([-\\w]+)}}\n"
                },
                {
                    "name": "convert.localtimezone",
                    "content": "use  local  time  (as  determined  by  the  TZ  environment  variable)  for  changeset\ndate/times. The default is False (use UTC).\n"
                },
                {
                    "name": "hooks.cvslog",
                    "content": "Specify  a Python function to be called at the end of gathering the CVS log. The func‐\ntion is passed a list with the log entries, and can modify the  entries  in-place,  or\nadd or delete them.\n"
                },
                {
                    "name": "hooks.cvschangesets",
                    "content": "Specify  a  Python  function to be called after the changesets are calculated from the\nCVS log. The function is passed a list with the changeset entries, and can modify  the\nchangesets in-place, or add or delete them.\n\nAn  additional \"debugcvsps\" Mercurial command allows the builtin changeset merging code to be\nrun without doing a conversion. Its parameters and output are similar to that of  cvsps  2.1.\nPlease see the command help for more details.\n"
                },
                {
                    "name": "Subversion Source",
                    "content": "Subversion  source  detects  classical trunk/branches/tags layouts.  By default, the supplied\nsvn://repo/path/ source URL is converted as a single branch. If svn://repo/path/trunk  exists\nit  replaces  the  default branch. If svn://repo/path/branches exists, its subdirectories are\nlisted as possible branches. If svn://repo/path/tags exists, it is looked for tags  referenc‐\ning  converted  branches. Default trunk, branches and tags values can be overridden with fol‐\nlowing options. Set them to paths relative to the source URL, or leave them blank to  disable\nauto detection.\n\nThe following options can be set with --config:\n"
                },
                {
                    "name": "convert.svn.branches",
                    "content": "specify the directory containing branches.  The default is branches.\n"
                },
                {
                    "name": "convert.svn.tags",
                    "content": "specify the directory containing tags. The default is tags.\n"
                },
                {
                    "name": "convert.svn.trunk",
                    "content": "specify the name of the trunk branch. The default is trunk.\n"
                },
                {
                    "name": "convert.localtimezone",
                    "content": "use  local  time  (as  determined  by  the  TZ  environment  variable)  for  changeset\ndate/times. The default is False (use UTC).\n\nSource history can be retrieved starting at a specific revision, instead of being  integrally\nconverted. Only single branch conversions are supported.\n"
                },
                {
                    "name": "convert.svn.startrev",
                    "content": "specify start Subversion revision number.  The default is 0.\n"
                },
                {
                    "name": "Git Source",
                    "content": "The  Git  importer  converts commits from all reachable branches (refs in refs/heads) and re‐\nmotes (refs in refs/remotes) to Mercurial.  Branches are converted to bookmarks with the same\nname, with the leading 'refs/heads' stripped. Git submodules are converted to Git subrepos in\nMercurial.\n\nThe following options can be set with --config:\n"
                },
                {
                    "name": "convert.git.similarity",
                    "content": "specify how similar files modified in a commit must be to be imported  as  renames  or\ncopies,  as  a  percentage between 0 (disabled) and 100 (files must be identical). For\nexample, 90 means that a delete/add pair will be imported as a rename if more than 90%\nof the file hasn't changed. The default is 50.\n"
                },
                {
                    "name": "convert.git.findcopiesharder",
                    "content": "while detecting copies, look at all files in the working copy instead of just  changed\nones.  This  is  very  expensive  for  large projects, and is only effective when con‐\nvert.git.similarity is greater than 0. The default is False.\n"
                },
                {
                    "name": "convert.git.renamelimit",
                    "content": "perform rename and copy detection up to this many changed files in a commit.  Increas‐\ning this will make rename and copy detection more accurate but will significantly slow\ndown  computation  on large projects. The option is only relevant if convert.git.simi‐\nlarity is greater than 0. The default is 400.\n"
                },
                {
                    "name": "convert.git.committeractions",
                    "content": "list of actions to take when processing author and committer values.\n\nGit commits have separate author (who wrote the commit) and committer (who applied the\ncommit) fields. Not all destinations support separate author and committer fields (in‐\ncluding Mercurial). This config option controls what to do with these author and  com‐\nmitter fields during conversion.\n\nA  value  of messagedifferent will append a committer: ...  line to the commit message\nif the Git committer is different from the author. The prefix  of  that  line  can  be\nspecified  using  the syntax messagedifferent=<prefix>. e.g. messagedifferent=git-com‐\nmitter:.  When a prefix is specified, a space will always be inserted between the pre‐\nfix and the value.\n\nmessagealways behaves like messagedifferent except it will always result in a  commit‐\nter:  ...  line being appended to the commit message. This value is mutually exclusive\nwith messagedifferent.\n\ndropcommitter will remove references to the committer. Only references to  the  author\nwill  remain.  Actions  that  add references to the committer will have no effect when\nthis is set.\n\nreplaceauthor will replace the value of the author field with the committer. Other ac‐\ntions that add references to the committer will still take effect when this is set.\n\nThe default is messagedifferent.\n"
                },
                {
                    "name": "convert.git.extrakeys",
                    "content": "list of extra keys from commit metadata to copy to the destination. Some Git reposito‐\nries store extra metadata in commits.  By default, this non-default metadata  will  be\nlost  during  conversion.   Setting  this config option can retain that metadata. Some\nbuilt-in keys such as parent and branch are not allowed to be copied.\n"
                },
                {
                    "name": "convert.git.remoteprefix",
                    "content": "remote refs are converted as bookmarks with convert.git.remoteprefix as a prefix  fol‐\nlowed by a /. The default is 'remote'.\n"
                },
                {
                    "name": "convert.git.saverev",
                    "content": "whether to store the original Git commit ID in the metadata of the destination commit.\nThe default is True.\n"
                },
                {
                    "name": "convert.git.skipsubmodules",
                    "content": "does  not  convert root level .gitmodules files or files with 160000 mode indicating a\nsubmodule. Default is False.\n"
                },
                {
                    "name": "Perforce Source",
                    "content": "The Perforce (P4) importer can be given a p4 depot path or a client specification as  source.\nIt  will  convert  all  files  in the source to a flat Mercurial repository, ignoring labels,\nbranches and integrations. Note that when a depot path is given you then usually should spec‐\nify a target directory, because otherwise the target may be named ...-hg.\n\nThe following options can be set with --config:\n"
                },
                {
                    "name": "convert.p4.encoding",
                    "content": "specify the encoding to use when decoding standard output of the Perforce command line\ntool. The default is default system encoding.\n"
                },
                {
                    "name": "convert.p4.startrev",
                    "content": "specify initial Perforce revision (a Perforce changelist number).\n"
                },
                {
                    "name": "Mercurial Destination",
                    "content": "The Mercurial destination will recognize Mercurial subrepositories in the destination  direc‐\ntory,  and  update the .hgsubstate file automatically if the destination subrepositories con‐\ntain the <dest>/<sub>/.hg/shamap file.  Converting a repository with subrepositories requires\nconverting a single repository at a time, from the bottom up.\n\nAn example showing how to convert a repository with subrepositories:\n\n# so convert knows the type when it sees a non empty destination\n$ hg init converted\n\n$ hg convert orig/sub1 converted/sub1\n$ hg convert orig/sub2 converted/sub2\n$ hg convert orig converted\n\nThe following options are supported:\n"
                },
                {
                    "name": "convert.hg.clonebranches",
                    "content": "dispatch source branches in separate clones. The default is False.\n"
                },
                {
                    "name": "convert.hg.tagsbranch",
                    "content": "branch name for tag revisions, defaults to default.\n"
                },
                {
                    "name": "convert.hg.usebranchnames",
                    "content": "preserve branch names. The default is True.\n"
                },
                {
                    "name": "convert.hg.sourcename",
                    "content": "records the given string as a 'convertsource' extra value on each commit made in  the\ntarget repository. The default is None.\n"
                },
                {
                    "name": "convert.hg.preserve-hash",
                    "content": "only works with mercurial sources. Make convert prevent performance improvement to the\nlist  of  modified files in commits when such an improvement would cause the hash of a\ncommit to change.  The default is False.\n"
                },
                {
                    "name": "All Destinations",
                    "content": "All destination types accept the following options:\n"
                },
                {
                    "name": "convert.skiptags",
                    "content": "does not convert tags from the source repo to the target repo. The default is False.\n"
                },
                {
                    "name": "Subversion Destination",
                    "content": "Original commit dates are not preserved by default.\n"
                },
                {
                    "name": "convert.svn.dangerous-set-commit-dates",
                    "content": "preserve original commit dates, forcefully setting svn:date revision properties.  This\noption  is  DANGEROUS  and  may  break some subversion functionality for the resulting\nrepository (e.g. filtering revisions with date ranges in svn log), as original  commit\ndates are not guaranteed to be monotonically increasing.\n\nFor  commit  dates  setting  to work destination repository must have pre-revprop-change hook\nconfigured to allow setting of svn:date revision properties. See Subversion documentation for\nmore details.\n\nOptions:\n\n--authors <FILE>\nusername mapping filename (DEPRECATED) (use --authormap instead)\n"
                },
                {
                    "name": "-s,_",
                    "content": "source repository type\n"
                },
                {
                    "name": "-d,_",
                    "content": "destination repository type\n"
                },
                {
                    "name": "-r,_",
                    "content": "import up to source revision REV\n"
                },
                {
                    "name": "-A,_",
                    "content": "remap usernames using this file\n\n--filemap <FILE>\nremap file names using contents of file\n\n--full apply filemap changes by converting all files again\n\n--splicemap <FILE>\nsplice synthesized history into place\n\n--branchmap <FILE>\nchange branch names while converting\n"
                },
                {
                    "name": "--branchsort",
                    "content": "try to sort changesets by branches\n",
                    "long": "--branchsort"
                },
                {
                    "name": "--datesort",
                    "content": "try to sort changesets by date\n",
                    "long": "--datesort"
                },
                {
                    "name": "--sourcesort",
                    "content": "preserve source changesets order\n",
                    "long": "--sourcesort"
                },
                {
                    "name": "--closesort",
                    "content": "try to reorder closed revisions\n\n[+] marked option can be specified multiple times\n",
                    "long": "--closesort"
                },
                {
                    "name": "eol",
                    "content": "automatically manage newlines in repository files\n\nThis extension allows you to manage the type of line endings (CRLF or LF) that  are  used  in\nthe  repository and in the local working directory. That way you can get CRLF line endings on\nWindows and LF on Unix/Mac, thereby letting everybody use their OS native line endings.\n\nThe extension reads its configuration from a versioned .hgeol configuration file found in the\nroot of the working directory. The .hgeol file use the same syntax  as  all  other  Mercurial\nconfiguration files. It uses two sections, [patterns] and [repository].\n\nThe [patterns] section specifies how line endings should be converted between the working di‐\nrectory  and  the  repository.  The format is specified by a file pattern. The first match is\nused, so put more specific patterns first. The available line endings are LF, CRLF, and BIN.\n\nFiles with the declared format of CRLF or LF are always checked out and stored in the reposi‐\ntory in that format and files declared to be binary (BIN) are left  unchanged.  Additionally,\nnative  is  an  alias for checking out in the platform's default line ending: LF on Unix (in‐\ncluding Mac OS X) and CRLF on Windows. Note that BIN (do nothing to line endings) is  Mercur‐\nial's  default behavior; it is only needed if you need to override a later, more general pat‐\ntern.\n\nThe optional [repository] section specifies the line endings to use for files stored  in  the\nrepository.  It  has  a single setting, native, which determines the storage line endings for\nfiles declared as native in the [patterns] section. It can be set to LF or CRLF. The  default\nis  LF. For example, this means that on Windows, files configured as native (CRLF by default)\nwill be converted to LF when stored in the repository. Files declared as LF, CRLF, or BIN  in\nthe [patterns] section are always stored as-is in the repository.\n\nExample versioned .hgeol file:\n\n[patterns]\n.py = native\n.vcproj = CRLF\n.txt = native\nMakefile = LF\n.jpg = BIN\n\n[repository]\nnative = LF\n\nNote   The  rules  will  first apply when files are touched in the working directory, e.g. by\nupdating to null and back to tip to touch all files.\n\nThe extension uses an optional [eol] section read from both the normal  Mercurial  configura‐\ntion  files and the .hgeol file, with the latter overriding the former. You can use that sec‐\ntion to control the overall behavior. There are three settings:\n\n• eol.native (default os.linesep) can be set to LF or CRLF to override the default  interpre‐\ntation  of  native for checkout. This can be used with hg archive on Unix, say, to generate\nan archive where files have line endings for Windows.\n\n• eol.only-consistent (default True) can be set to False to make the extension convert  files\nwith  inconsistent  EOLs.  Inconsistent means that there is both CRLF and LF present in the\nfile.  Such files are normally not touched under the assumption that they have  mixed  EOLs\non purpose.\n\n• eol.fix-trailing-newline  (default False) can be set to True to ensure that converted files\nend with a EOL character (either \\n or \\r\\n as per the configured patterns).\n\nThe extension provides cleverencode: and cleverdecode: filters like the deprecated  win32text\nextension  does.  This  means  that you can disable win32text and enable eol and your filters\nwill still work. You only need to these filters until you have prepared a .hgeol file.\n\nThe win32text.forbid* hooks provided by the win32text extension have been unified into a sin‐\ngle hook named eol.checkheadshook. The hook will lookup the expected line  endings  from  the\n.hgeol  file,  which  means  you  must  migrate to a .hgeol file first before using the hook.\neol.checkheadshook only checks heads, intermediate invalid revisions will be pushed. To  for‐\nbid  them  completely,  use  the  eol.checkallhook hook. These hooks are best used as pretxn‐\nchangegroup hooks.\n\nSee hg help patterns for more information about the glob patterns used.\n"
                },
                {
                    "name": "extdiff",
                    "content": "command to allow external programs to compare revisions\n\nThe extdiff Mercurial extension allows you to use external programs to compare revisions,  or\nrevision  with  working  directory. The external diff programs are called with a configurable\nset of options and two non-option arguments: paths to  directories  containing  snapshots  of\nfiles to compare.\n\nIf  there is more than one file being compared and the \"child\" revision is the working direc‐\ntory, any modifications made in the external diff program will be copied back to the  working\ndirectory from the temporary directory.\n\nThe  extdiff  extension also allows you to configure new diff commands, so you do not need to\ntype hg extdiff -p kdiff3 always.\n\n[extdiff]\n# add new command that runs GNU diff(1) in 'context diff' mode\ncdiff = gdiff -Nprc5\n## or the old way:\n#cmd.cdiff = gdiff\n#opts.cdiff = -Nprc5\n\n# add new command called meld, runs meld (no need to name twice).  If\n# the meld executable is not available, the meld tool in [merge-tools]\n# will be used, if available\nmeld =\n\n# add new command called vimdiff, runs gvimdiff with DirDiff plugin\n# (see http://www.vim.org/scripts/script.php?scriptid=102) Non\n# English user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" in\n# your .vimrc\nvimdiff = gvim -f \"+next\" \\\n\"+execute 'DirDiff' fnameescape(argv(0)) fnameescape(argv(1))\"\n\nTool arguments can include variables that are expanded at runtime:\n\n$parent1, $plabel1 - filename, descriptive label of first parent\n$child,   $clabel  - filename, descriptive label of child revision\n$parent2, $plabel2 - filename, descriptive label of second parent\n$root              - repository root\n$parent is an alias for $parent1.\n\nThe extdiff extension will look in your [diff-tools] and [merge-tools] sections for diff tool\narguments, when none are specified in [extdiff].\n\n[extdiff]\nkdiff3 =\n\n[diff-tools]\nkdiff3.diffargs=--L1 '$plabel1' --L2 '$clabel' $parent $child\n\nIf a program has a graphical interface, it might be interesting to tell Mercurial  about  it.\nIt  will  prevent the program from being mistakenly used in a terminal-only environment (such\nas an SSH terminal session), and will make hg extdiff --per-file open multiple file diffs  at\nonce  instead of one by one (if you still want to open file diffs one by one, you can use the\n--confirm option).\n\nDeclaring that a tool has a graphical interface can be done with the gui flag next  to  where\ndiffargs are specified:\n\n[diff-tools]\nkdiff3.diffargs=--L1 '$plabel1' --L2 '$clabel' $parent $child\nkdiff3.gui = true\n\nYou  can use -I/-X and list of file or directory names like normal hg diff command. The extd‐\niff extension makes snapshots of only needed files, so running the external diff program will\nactually be pretty fast (at least faster than having to compare the entire tree).\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "File content management",
                    "content": ""
                },
                {
                    "name": "extdiff",
                    "content": "use external program to diff repository (or selected files):\n\nhg extdiff [OPT]... [FILE]...\n\nShow differences between revisions for the specified files, using an  external  program.  The\ndefault program used is diff, with default options \"-Npru\".\n\nTo  select  a  different program, use the -p/--program option. The program will be passed the\nnames of two directories to compare, unless the --per-file option is specified  (see  below).\nTo  pass  additional options to the program, use -o/--option. These will be passed before the\nnames of the directories or files to compare.\n\nThe --from, --to, and --change options work the same way they do for hg diff.\n\nThe --per-file option runs the external program repeatedly on each file to diff,  instead  of\nonce  on  two  directories.  By default, this happens one by one, where the next file diff is\nopen in the external program only once the previous external program (for the  previous  file\ndiff) has exited. If the external program has a graphical interface, it can open all the file\ndiffs at once instead of one by one. See hg help -e extdiff for information about how to tell\nMercurial that a given program has a graphical interface.\n\nThe  --confirm option will prompt the user before each invocation of the external program. It\nis ignored if --per-file isn't specified.\n\nOptions:\n"
                },
                {
                    "name": "-p,_",
                    "content": "comparison program to run\n"
                },
                {
                    "name": "-o,_",
                    "content": "pass option to comparison program\n"
                },
                {
                    "name": "-r,_",
                    "content": "revision (DEPRECATED)\n\n--from <REV1>\nrevision to diff from\n\n--to <REV2>\nrevision to diff to\n"
                },
                {
                    "name": "-c,_",
                    "content": "change made by revision\n"
                },
                {
                    "name": "--per-file",
                    "content": "compare each file instead of revision snapshots\n",
                    "long": "--per-file"
                },
                {
                    "name": "--confirm",
                    "content": "prompt user before each external program invocation\n",
                    "long": "--confirm"
                },
                {
                    "name": "--patch",
                    "content": "compare patches for two revisions\n",
                    "long": "--patch"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-S, --subrepos",
                    "content": "recurse into subrepositories\n\n[+] marked option can be specified multiple times\n",
                    "flag": "-S",
                    "long": "--subrepos"
                },
                {
                    "name": "factotum",
                    "content": "http authentication with factotum\n\nThis extension allows the factotum(4) facility on Plan 9 from Bell Labs platforms to  provide\nauthentication  information for HTTP access. Configuration entries specified in the auth sec‐\ntion as well as authentication information provided in the  repository  URL  are  fully  sup‐\nported. If no prefix is specified, a value of \"*\" will be assumed.\n\nBy default, keys are specified as:\n\nproto=pass service=hg prefix=<prefix> user=<username> !password=<password>\n\nIf  the factotum extension is unable to read the required key, one will be requested interac‐\ntively.\n\nA configuration section is available to customize runtime behavior. By default, these entries\nare:\n\n[factotum]\nexecutable = /bin/auth/factotum\nmountpoint = /mnt/factotum\nservice = hg\n\nThe executable entry defines the full path to the factotum binary. The mountpoint  entry  de‐\nfines  the  path to the factotum file service. Lastly, the service entry controls the service\nname used when reading keys.\n"
                },
                {
                    "name": "fastannotate",
                    "content": "yet another annotate implementation that might be faster (EXPERIMENTAL)\n\nThe fastannotate extension provides a 'fastannotate' command that makes use  of  the  linelog\ndata  structure  as a cache layer and is expected to be faster than the vanilla 'annotate' if\nthe cache is present.\n\nIn most cases, fastannotate requires a setup that mainbranch  is  some  pointer  that  always\nmoves forward, to be most efficient.\n\nUsing  fastannotate  together  with  linkrevcache  would speed up building the annotate cache\ngreatly. Run \"debugbuildlinkrevcache\" before \"debugbuildannotatecache\".\n\n[fastannotate]\n# specify the main branch head. the internal linelog will only contain\n# the linear (ignoring p2) \"mainbranch\". since linelog cannot move\n# backwards without a rebuild, this should be something that always moves\n# forward, usually it is \"master\" or \"@\".\nmainbranch = master\n\n# fastannotate supports different modes to expose its feature.\n# a list of combination:\n# - fastannotate: expose the feature via the \"fastannotate\" command which\n#   deals with everything in a most efficient way, and provides extra\n#   features like --deleted etc.\n# - fctx: replace fctx.annotate implementation. note:\n#     a. it is less efficient than the \"fastannotate\" command\n#     b. it will make it practically impossible to access the old (disk\n#        side-effect free) annotate implementation\n#     c. it implies \"hgweb\".\n# - hgweb: replace hgweb's annotate implementation. conflict with \"fctx\".\n# (default: fastannotate)\nmodes = fastannotate\n\n# default format when no format flags are used (default: number)\ndefaultformat = changeset, user, date\n\n# serve the annotate cache via wire protocol (default: False)\n# tip: the .hg/fastannotate directory is portable - can be rsynced\nserver = True\n\n# build annotate cache on demand for every client request (default: True)\n# disabling it could make server response faster, useful when there is a\n# cronjob building the cache.\nserverbuildondemand = True\n\n# update local annotate cache from remote on demand\nclient = False\n\n# path to use when connecting to the remote server (default: default)\nremotepath = default\n\n# minimal length of the history of a file required to fetch linelog from\n# the server. (default: 10)\nclientfetchthreshold = 10\n\n# for \"fctx\" mode, always follow renames regardless of command line option.\n# this is a BC with the original command but will reduced the space needed\n# for annotate cache, and is useful for client-server setup since the\n# server will only provide annotate cache with default options (i.e. with\n# follow). do not affect \"fastannotate\" mode. (default: True)\nforcefollow = True\n\n# for \"fctx\" mode, always treat file as text files, to skip the \"isbinary\"\n# check. this is consistent with the \"fastannotate\" command and could help\n# to avoid a file fetch if remotefilelog is used. (default: True)\nforcetext = True\n\n# use unfiltered repo for better performance.\nunfilteredrepo = True\n\n# sacrifice correctness in some corner cases for performance. it does not\n# affect the correctness of the annotate cache being built. the option\n# is experimental and may disappear in the future (default: False)\nperfhack = True\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Uncategorized commands",
                    "content": ""
                },
                {
                    "name": "fastexport",
                    "content": "export repositories as git fast-import stream\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change import/export",
                    "content": ""
                },
                {
                    "name": "fastexport",
                    "content": "export repository as git fast-import stream:\n\nhg fastexport [OPTION]... [REV]...\n\nThis command lets you dump a repository as a human-readable text stream.   It  can  be  piped\ninto  corresponding import routines like \"git fast-import\".  Incremental dumps can be created\nby using marks files.\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "revisions to export\n"
                },
                {
                    "name": "-i,_",
                    "content": "old marks file to read\n"
                },
                {
                    "name": "-e,_",
                    "content": "new marks file to write\n"
                },
                {
                    "name": "-A,_",
                    "content": "remap usernames using this file\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "fetch",
                    "content": "pull, update and merge in one command (DEPRECATED)\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Remote repository management",
                    "content": ""
                },
                {
                    "name": "fetch",
                    "content": "pull changes from a remote repository, merge new changes if needed.:\n\nhg fetch [SOURCE]\n\nThis finds all changes from the repository at the specified path or URL and adds them to  the\nlocal repository.\n\nIf the pulled changes add a new branch head, the head is automatically merged, and the result\nof  the  merge  is committed.  Otherwise, the working directory is updated to include the new\nchanges.\n\nWhen a merge is needed, the working directory is first updated to the newly  pulled  changes.\nLocal  changes  are  then  merged  into  the  pulled  changes. To switch the merge order, use\n--switch-parent.\n\nSee hg help dates for a list of formats valid for -d/--date.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "a specific revision you would like to pull\n\n--edit invoke editor on commit messages\n"
                },
                {
                    "name": "--force-editor",
                    "content": "edit commit message (DEPRECATED)\n",
                    "long": "--force-editor"
                },
                {
                    "name": "--switch-parent",
                    "content": "switch parents when merging\n",
                    "long": "--switch-parent"
                },
                {
                    "name": "-m,_",
                    "content": "use text as commit message\n"
                },
                {
                    "name": "-l,_",
                    "content": "read commit message from file\n"
                },
                {
                    "name": "-d,_",
                    "content": "record the specified date as commit date\n"
                },
                {
                    "name": "-u,_",
                    "content": "record the specified user as committer\n"
                },
                {
                    "name": "-e,_",
                    "content": "specify ssh command to use\n\n--remotecmd <CMD>\nspecify hg command to run on the remote side\n"
                },
                {
                    "name": "--insecure",
                    "content": "do not verify server certificate (ignoring web.cacerts config)\n\n[+] marked option can be specified multiple times\n",
                    "long": "--insecure"
                },
                {
                    "name": "fix",
                    "content": "rewrite file content in changesets or working copy (EXPERIMENTAL)\n\nProvides a command that runs configured tools on the contents of modified files, writing back\nany fixes to the working copy or replacing changesets.\n\nFixer tools are run in the repository's root directory. This allows them to  read  configura‐\ntion files from the working copy, or even write to the working copy.  The working copy is not\nupdated  to match the revision being fixed. In fact, several revisions may be fixed in paral‐\nlel. Writes to the working copy are not amended into the revision being  fixed;  fixer  tools\nMUST always read content to be fixed from stdin, and write fixed file content back to stdout.\n\nHere  is  an  example configuration that causes hg fix to apply automatic formatting fixes to\nmodified lines in C++ code:\n\n[fix]\nclang-format:command=clang-format --assume-filename={rootpath}\nclang-format:linerange=--lines={first}:{last}\nclang-format:pattern=set:.cpp or .hpp\n\nThe :command suboption forms the first part of the shell command that will be used to  fix  a\nfile.  The content of the file is passed on standard input, and the fixed file content is ex‐\npected on standard output. Any output on standard error will be displayed as  a  warning.  If\nthe  exit  status  is  not zero, the file will not be affected. A placeholder warning is dis‐\nplayed if there is a non-zero exit status but no standard error output. Some  values  may  be\nsubstituted into the command:\n\n{rootpath}  The path of the file being fixed, relative to the repo root\n{basename}  The name of the file being fixed, without the directory path\n\nIf the :linerange suboption is set, the tool will only be run if there are changed lines in a\nfile.  The  value  of this suboption is appended to the shell command once for every range of\nchanged lines in the file. Some values may be substituted into the command:\n\n{first}   The 1-based line number of the first line in the modified range\n{last}    The 1-based line number of the last line in the modified range\n\nDeleted sections of a file will be ignored by :linerange, because there is  no  corresponding\nline range in the version being fixed.\n\nBy  default, tools that set :linerange will only be executed if there is at least one changed\nline range. This is meant to prevent accidents like running a code formatter in  such  a  way\nthat  it  unexpectedly reformats the whole file. If such a tool needs to operate on unchanged\nfiles, it should set the :skipclean suboption to false.\n\nThe :pattern suboption determines which files will be passed through  each  configured  tool.\nSee  hg  help  patterns for  possible  values. However, all patterns are relative to the repo\nroot, even if that text says they are relative to the current working directory. If there are\nfile arguments to hg fix, the intersection of these patterns is used.\n\nThere is also a configurable limit for the maximum size of file that will be processed by  hg\nfix:\n\n[fix]\nmaxfilesize = 2MB\n\nNormally,  execution  of  configured  tools  will  continue  after  a failure (indicated by a\nnon-zero exit status). It can also be configured to abort after the first  such  failure,  so\nthat  no  files will be affected if any tool fails. This abort will also cause hg fix to exit\nwith a non-zero status:\n\n[fix]\nfailure = abort\n\nWhen multiple tools are configured to affect a file, they execute in an order defined by  the\n:priority  suboption. The priority suboption has a default value of zero for each tool. Tools\nare executed in order of descending priority. The execution order of tools with equal  prior‐\nity  is  unspecified. For example, you could use the 'sort' and 'head' utilities to keep only\nthe 10 smallest numbers in a text file by ensuring that 'sort' runs before 'head':\n\n[fix]\nsort:command = sort -n\nhead:command = head -n 10\nsort:pattern = numbers.txt\nhead:pattern = numbers.txt\nsort:priority = 2\nhead:priority = 1\n\nTo account for changes made by each tool, the line numbers used  for  incremental  formatting\nare recomputed before executing the next tool. So, each tool may see different values for the\narguments added by the :linerange suboption.\n\nEach fixer tool is allowed to return some metadata in addition to the fixed file content. The\nmetadata must be placed before the file content on stdout, separated from the file content by\na  zero byte. The metadata is parsed as a JSON value (so, it should be UTF-8 encoded and con‐\ntain no zero bytes). A fixer tool is expected to produce this metadata encoding if  and  only\nif the :metadata suboption is true:\n\n[fix]\ntool:command = tool --prepend-json-metadata\ntool:metadata = true\n\nThe  metadata  values  are  passed  to hooks, which can be used to print summaries or perform\nother post-fixing work. The supported hooks are:\n\n\"postfixfile\"\nRun once for each file in each revision where any fixer tools made changes\nto the file content. Provides \"$HGREV\" and \"$HGPATH\" to identify the file,\nand \"$HGMETADATA\" with a map of fixer names to metadata values from fixer\ntools that affected the file. Fixer tools that didn't affect the file have a\nvalue of None. Only fixer tools that executed are present in the metadata.\n\n\"postfix\"\nRun once after all files and revisions have been handled. Provides\n\"$HGREPLACEMENTS\" with information about what revisions were created and\nmade obsolete. Provides a boolean \"$HGWDIRWRITTEN\" to indicate whether any\nfiles in the working copy were updated. Provides a list \"$HGMETADATA\"\nmapping fixer tool names to lists of metadata values returned from\nexecutions that modified a file. This aggregates the same metadata\npreviously passed to the \"postfixfile\" hook.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "File content management",
                    "content": ""
                },
                {
                    "name": "fix",
                    "content": "rewrite file content in changesets or working directory:\n\nhg fix [OPTION]... [FILE]...\n\nRuns any configured tools to fix the content of files. (See hg help -e fix for details  about\nconfiguring tools.) Only affects files with changes, unless file arguments are provided. Only\naffects changed lines of files, unless the --whole flag is used. Some tools may always affect\nthe whole file regardless of --whole.\n\nIf  --working-dir  is used, files with uncommitted changes in the working copy will be fixed.\nNote that no backup are made.\n\nIf revisions are specified with --source, those  revisions  and  their  descendants  will  be\nchecked,  and  they may be replaced with new revisions that have fixed file content. By auto‐\nmatically including the descendants, no merging, rebasing, or evolution will be required.  If\nan ancestor of the working copy is included, then the working copy itself will also be fixed,\nand the working copy will be updated to the fixed parent.\n\nWhen  determining what lines of each file to fix at each revision, the whole set of revisions\nbeing fixed is considered, so that fixes to earlier revisions  are  not  forgotten  in  later\nones. The --base flag can be used to override this default behavior, though it is not usually\ndesirable to do so.\n\nOptions:\n\n--all  fix all non-public non-obsolete revisions\n\n--base <REV[+]>\nrevisions  to  diff against (overrides automatic selection, and applies to every revi‐\nsion being fixed)\n"
                },
                {
                    "name": "-r,_",
                    "content": "revisions to fix (ADVANCED)\n"
                },
                {
                    "name": "-s,_",
                    "content": "fix the specified revisions and their descendants\n"
                },
                {
                    "name": "-w, --working-dir",
                    "content": "fix the working directory\n",
                    "flag": "-w",
                    "long": "--working-dir"
                },
                {
                    "name": "--whole",
                    "content": "always fix every line of a file\n\n[+] marked option can be specified multiple times\n",
                    "long": "--whole"
                },
                {
                    "name": "fsmonitor",
                    "content": "Faster status operations with the Watchman file monitor (EXPERIMENTAL)\n\nIntegrates the file-watching program Watchman with Mercurial to  produce  faster  status  re‐\nsults.\n\nOn  a  particular Linux system, for a real-world repository with over 400,000 files hosted on\next4, vanilla hg status takes 1.3 seconds. On the same system, with fsmonitor it takes  about\n0.3 seconds.\n\nfsmonitor  requires no configuration -- it will tell Watchman about your repository as neces‐\nsary. You'll need to install Watchman from https://facebook.github.io/watchman/ and make sure\nit is in your PATH.\n\nfsmonitor is incompatible with the largefiles and eol extensions, and will disable itself  if\nany of those are active.\n\nThe following configuration options exist:\n\n[fsmonitor]\nmode = {off, on, paranoid}\n\nWhen mode = off, fsmonitor will disable itself (similar to not loading the extension at all).\nWhen  mode  =  on,  fsmonitor will be enabled (the default).  When mode = paranoid, fsmonitor\nwill query both Watchman and the filesystem, and ensure that the results are consistent.\n\n[fsmonitor]\ntimeout = (float)\n\nA value, in seconds, that determines how long fsmonitor will wait for Watchman to return  re‐\nsults. Defaults to 2.0.\n\n[fsmonitor]\nblacklistusers = (list of userids)\n\nA list of usernames for which fsmonitor will disable itself altogether.\n\n[fsmonitor]\nwalkoninvalidate = (boolean)\n\nWhether  or  not to walk the whole repo ourselves when our cached state has been invalidated,\nfor example when Watchman has been restarted or .hgignore rules have  been  changed.  Walking\nthe  repo  in  that case can result in competing for I/O with Watchman. For large repos it is\nrecommended to set this value to false. You may wish to set this to true if you have  a  very\nfast  filesystem  that  can  outpace the IPC overhead of getting the result data for the full\nrepo from Watchman. Defaults to false.\n\n[fsmonitor]\nwarnwhenunused = (boolean)\n\nWhether to print a warning during certain operations when fsmonitor would  be  beneficial  to\nperformance but isn't enabled.\n\n[fsmonitor]\nwarnupdatefilecount = (integer)\n# or when mercurial is built with rust support\nwarnupdatefilecountrust = (integer)\n\nIf  warnwhenunused  is  set  and  fsmonitor isn't enabled, a warning will be printed during\nworking directory updates if this many files will be created.\n"
                },
                {
                    "name": "git",
                    "content": "grant Mercurial the ability to operate on Git repositories. (EXPERIMENTAL)\n\nThis is currently super experimental. It probably will consume your firstborn  a  la  Rumpel‐\nstiltskin, etc.\n"
                },
                {
                    "name": "githelp",
                    "content": "try mapping git commands to Mercurial commands\n\nTries to map a given git command to a Mercurial command:\n\n$ hg githelp -- git checkout master hg update master\n\nIf an unknown command or parameter combination is detected, an error is produced.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Help",
                    "content": ""
                },
                {
                    "name": "githelp",
                    "content": "suggests the Mercurial equivalent of the given git command:\n\nhg githelp\n\nUsage: hg githelp -- <git command>\n\naliases: git\n"
                },
                {
                    "name": "gpg",
                    "content": "commands to sign and verify changesets\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Signing changes (GPG)",
                    "content": ""
                },
                {
                    "name": "sigcheck",
                    "content": "verify all the signatures there may be for a particular revision:\n\nhg sigcheck REV\n\nverify all the signatures there may be for a particular revision\n"
                },
                {
                    "name": "sign",
                    "content": "add a signature for the current or given revision:\n\nhg sign [OPTION]... [REV]...\n\nIf  no  revision is given, the parent of the working directory is used, or tip if no revision\nis checked out.\n\nThe gpg.cmd config setting can be used to specify the command to run. A default  key  can  be\nspecified with gpg.key.\n\nSee hg help dates for a list of formats valid for -d/--date.\n\nOptions:\n"
                },
                {
                    "name": "-l, --local",
                    "content": "make the signature local\n",
                    "flag": "-l",
                    "long": "--local"
                },
                {
                    "name": "-f, --force",
                    "content": "sign even if the sigfile is modified\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "--no-commit",
                    "content": "do not commit the sigfile after signing\n",
                    "long": "--no-commit"
                },
                {
                    "name": "-k,_",
                    "content": "the key id to sign with\n"
                },
                {
                    "name": "-m,_",
                    "content": "use text as commit message\n"
                },
                {
                    "name": "-e, --edit",
                    "content": "invoke editor on commit messages\n",
                    "flag": "-e",
                    "long": "--edit"
                },
                {
                    "name": "-d,_",
                    "content": "record the specified date as commit date\n"
                },
                {
                    "name": "-u,_",
                    "content": "record the specified user as committer\n"
                },
                {
                    "name": "sigs",
                    "content": "list signed changesets:\n\nhg sigs\n\nlist signed changesets\n"
                },
                {
                    "name": "graphlog",
                    "content": "command to view revision graphs from a shell (DEPRECATED)\n\nThe  functionality  of  this  extension has been include in core Mercurial since version 2.3.\nPlease use hg log -G ... instead.\n\nThis extension adds a --graph option to the incoming, outgoing and log  commands.  When  this\noptions is given, an ASCII representation of the revision graph is also shown.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change navigation",
                    "content": ""
                },
                {
                    "name": "glog",
                    "content": "show revision history alongside an ASCII revision graph:\n\nhg glog [OPTION]... [FILE]\n\nPrint a revision history alongside a revision graph drawn with ASCII characters.\n\nNodes printed as an @ character are parents of the working directory.\n\nThis is an alias to hg log -G.\n\nOptions:\n"
                },
                {
                    "name": "-f, --follow",
                    "content": "follow changeset history, or file history across copies and renames\n",
                    "flag": "-f",
                    "long": "--follow"
                },
                {
                    "name": "--follow-first",
                    "content": "only follow the first parent of merge changesets (DEPRECATED)\n",
                    "long": "--follow-first"
                },
                {
                    "name": "-d,_",
                    "content": "show revisions matching date spec\n"
                },
                {
                    "name": "-C, --copies",
                    "content": "show copied files\n",
                    "flag": "-C",
                    "long": "--copies"
                },
                {
                    "name": "-k,_",
                    "content": "do case-insensitive search for a given text\n"
                },
                {
                    "name": "-r,_",
                    "content": "show the specified revision or revset\n"
                },
                {
                    "name": "--removed",
                    "content": "include revisions where files were removed\n",
                    "long": "--removed"
                },
                {
                    "name": "-m, --only-merges",
                    "content": "show only merges (DEPRECATED)\n",
                    "flag": "-m",
                    "long": "--only-merges"
                },
                {
                    "name": "-u,_",
                    "content": "revisions committed by user\n\n--only-branch <BRANCH[+]>\nshow only changesets within the given named branch (DEPRECATED)\n"
                },
                {
                    "name": "-b,_",
                    "content": "show changesets within the given named branch\n"
                },
                {
                    "name": "-P,_",
                    "content": "do not display revision or any of its ancestors\n"
                },
                {
                    "name": "-p, --patch",
                    "content": "show patch\n",
                    "flag": "-p",
                    "long": "--patch"
                },
                {
                    "name": "-g, --git",
                    "content": "use git extended diff format\n",
                    "flag": "-g",
                    "long": "--git"
                },
                {
                    "name": "-l,_",
                    "content": "limit number of changes displayed\n"
                },
                {
                    "name": "-M, --no-merges",
                    "content": "do not show merges\n\n--stat output diffstat-style summary of changes\n",
                    "flag": "-M",
                    "long": "--no-merges"
                },
                {
                    "name": "-G, --graph",
                    "content": "show the revision DAG\n\n--style <STYLE>\ndisplay using template map file (DEPRECATED)\n",
                    "flag": "-G",
                    "long": "--graph"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "hgk",
                    "content": "browse the repository in a graphical way\n\nThe hgk extension allows browsing the history of a repository in a graphical way. It requires\nTcl/Tk version 8.4 or later. (Tcl/Tk is not distributed with Mercurial.)\n\nhgk consists of two parts: a Tcl script that does the displaying and querying of information,\nand  an extension to Mercurial named hgk.py, which provides hooks for hgk to get information.\nhgk can be found in the contrib directory, and the extension is shipped in the hgext  reposi‐\ntory, and needs to be enabled.\n\nThe  hg view command will launch the hgk Tcl script. For this command to work, hgk must be in\nyour search path. Alternately, you can specify the path to hgk in your configuration file:\n\n[hgk]\npath = /location/of/hgk\n\nhgk can make use of the extdiff extension to visualize revisions.  Assuming you  had  already\nconfigured extdiff vdiff command, just add:\n\n[hgk]\nvdiff=vdiff\n\nRevisions  context  menu will now display additional entries to fire vdiff on hovered and se‐\nlected revisions.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change navigation",
                    "content": ""
                },
                {
                    "name": "view",
                    "content": "start interactive history viewer:\n\nhg view [-l LIMIT] [REVRANGE]\n\nstart interactive history viewer\n\nOptions:\n"
                },
                {
                    "name": "-l,_",
                    "content": "limit number of changes displayed\n"
                },
                {
                    "name": "Uncategorized commands",
                    "content": ""
                },
                {
                    "name": "highlight",
                    "content": "syntax highlighting for hgweb (requires Pygments)\n\nIt depends on the Pygments syntax highlighting library: http://pygments.org/\n\nThere are the following configuration options:\n\n[web]\npygmentsstyle = <style> (default: colorful)\nhighlightfiles = <fileset> (default: size('<5M'))\nhighlightonlymatchfilename = <bool> (default False)\n\nhighlightonlymatchfilename will only highlight files if their type  could  be  identified  by\ntheir  filename. When this is not enabled (the default), Pygments will try very hard to iden‐\ntify the file type from content and any match (even matches with a low confidence score) will\nbe used.\n"
                },
                {
                    "name": "histedit",
                    "content": "interactive history editing\n\nWith this extension installed, Mercurial gains one new command: histedit. Usage  is  as  fol‐\nlows, assuming the following history:\n\n@  3[tip]   7c2fd3b9020c   2009-04-27 18:04 -0500   durin42\n|    Add delta\n|\no  2   030b686bedc4   2009-04-27 18:04 -0500   durin42\n|    Add gamma\n|\no  1   c561b4e977df   2009-04-27 18:04 -0500   durin42\n|    Add beta\n|\no  0   d8d2fcd0e319   2009-04-27 18:04 -0500   durin42\nAdd alpha\n\nIf  you  were  to run hg histedit c561b4e977df, you would see the following file open in your\neditor:\n\npick c561b4e977df Add beta\npick 030b686bedc4 Add gamma\npick 7c2fd3b9020c Add delta\n\n# Edit history between c561b4e977df and 7c2fd3b9020c\n#\n# Commits are listed from least to most recent\n#\n# Commands:\n#  p, pick = use commit\n#  e, edit = use commit, but allow edits before making new commit\n#  f, fold = use commit, but combine it with the one above\n#  r, roll = like fold, but discard this commit's description and date\n#  d, drop = remove commit from history\n#  m, mess = edit commit message without changing commit content\n#  b, base = checkout changeset and apply further changesets from there\n#\n\nIn this file, lines beginning with # are ignored. You must specify a rule for  each  revision\nin  your  history. For example, if you had meant to add gamma before beta, and then wanted to\nadd delta in the same revision as beta, you would reorganize the file to look like this:\n\npick 030b686bedc4 Add gamma\npick c561b4e977df Add beta\nfold 7c2fd3b9020c Add delta\n\n# Edit history between c561b4e977df and 7c2fd3b9020c\n#\n# Commits are listed from least to most recent\n#\n# Commands:\n#  p, pick = use commit\n#  e, edit = use commit, but allow edits before making new commit\n#  f, fold = use commit, but combine it with the one above\n#  r, roll = like fold, but discard this commit's description and date\n#  d, drop = remove commit from history\n#  m, mess = edit commit message without changing commit content\n#  b, base = checkout changeset and apply further changesets from there\n#\n\nAt which point you close the editor and histedit starts working. When you specify a fold  op‐\neration,  histedit will open an editor when it folds those revisions together, offering you a\nchance to clean up the commit message:\n\nAdd beta\n*\nAdd delta\n\nEdit the commit message to your liking, then close the editor. The date used for  the  commit\nwill  be  the later of the two commits' dates. For this example, let's assume that the commit\nmessage was changed to Add beta and delta.  After histedit has run and had a chance to remove\nany old or temporary revisions it needed, the history looks like this:\n\n@  2[tip]   989b4d060121   2009-04-27 18:04 -0500   durin42\n|    Add beta and delta.\n|\no  1   081603921c3f   2009-04-27 18:04 -0500   durin42\n|    Add gamma\n|\no  0   d8d2fcd0e319   2009-04-27 18:04 -0500   durin42\nAdd alpha\n\nNote that histedit does not remove any revisions (even its own temporary ones) until after it\nhas completed all the editing operations, so it will probably perform  several  strip  opera‐\ntions when it's done. For the above example, it had to run strip twice. Strip can be slow de‐\npending  on a variety of factors, so you might need to be a little patient. You can choose to\nkeep the original revisions by passing the --keep flag.\n\nThe edit operation will drop you back to a command prompt, allowing you to edit files freely,\nor even use hg record to commit some changes as a separate commit. When you're done, any  re‐\nmaining  uncommitted changes will be committed as well. When done, run hg histedit --continue\nto finish this step. If there are uncommitted changes, you'll be prompted for  a  new  commit\nmessage,  but  the  default commit message will be the original message for the edit ed revi‐\nsion, and the date of the original commit will be preserved.\n\nThe message operation will give you a chance to revise a commit message without changing  the\ncontents. It's a shortcut for doing edit immediately followed by hg histedit --continue`.\n\nIf histedit encounters a conflict when moving a revision (while handling pick or fold), it'll\nstop  in  a  similar manner to edit with the difference that it won't prompt you for a commit\nmessage when done. If you decide at this point that you don't like how much work it  will  be\nto  rearrange history, or that you made a mistake, you can use hg histedit --abort to abandon\nthe new changes you have made and return to the state before you attempted to edit your  his‐\ntory.\n\nIf  we clone the histedit-ed example repository above and add four more changes, such that we\nhave the following history:\n\n@  6[tip]   038383181893   2009-04-27 18:04 -0500   stefan\n|    Add theta\n|\no  5   140988835471   2009-04-27 18:04 -0500   stefan\n|    Add eta\n|\no  4   122930637314   2009-04-27 18:04 -0500   stefan\n|    Add zeta\n|\no  3   836302820282   2009-04-27 18:04 -0500   stefan\n|    Add epsilon\n|\no  2   989b4d060121   2009-04-27 18:04 -0500   durin42\n|    Add beta and delta.\n|\no  1   081603921c3f   2009-04-27 18:04 -0500   durin42\n|    Add gamma\n|\no  0   d8d2fcd0e319   2009-04-27 18:04 -0500   durin42\nAdd alpha\n\nIf you run hg histedit --outgoing on the clone then it is the same  as  running  hg  histedit\n836302820282.  If  you need plan to push to a repository that Mercurial does not detect to be\nrelated to the source repo, you can add a --force option.\n"
                },
                {
                    "name": "Config",
                    "content": "Histedit rule lines are truncated to 80 characters by default. You can customize this  behav‐\nior by setting a different length in your configuration file:\n\n[histedit]\nlinelen = 120      # truncate rule lines at 120 characters\n\nThe summary of a change can be customized as well:\n\n[histedit]\nsummary-template = '{rev} {bookmarks} {desc|firstline}'\n\nThe customized summary should be kept short enough that rule lines will fit in the configured\nline length. See above if that requires customization.\n\nhg  histedit  attempts to automatically choose an appropriate base revision to use. To change\nwhich base revision is used, define a revset in your configuration file:\n\n[histedit]\ndefaultrev = only(.) & draft()\n\nBy default each edited revision needs to be present in histedit commands.  To remove revision\nyou need to use drop operation. You can configure the drop to be implicit for missing commits\nby adding:\n\n[histedit]\ndropmissing = True\n\nBy default, histedit will close the transaction after each action. For performance  purposes,\nyou  can  configure histedit to use a single transaction across the entire histedit. WARNING:\nThis setting introduces a significant risk of losing the work you've done in  a  histedit  if\nthe histedit aborts unexpectedly:\n\n[histedit]\nsingletransaction = True\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change manipulation",
                    "content": ""
                },
                {
                    "name": "histedit",
                    "content": "interactively edit changeset history:\n\nhg histedit [OPTIONS] ([ANCESTOR] | --outgoing [URL])\n\nThis command lets you edit a linear series of changesets (up to and including the working di‐\nrectory, which should be clean).  You can:\n\n• pick to [re]order a changeset\n\n• drop to omit changeset\n\n• mess to reword the changeset commit message\n\n• fold to combine it with the preceding changeset (using the later date)\n\n• roll like fold, but discarding this commit's description and date\n\n• edit to edit this changeset (preserving date)\n\n• base to checkout changeset and apply further changesets from there\n\nThere are a number of ways to select the root changeset:\n\n• Specify ANCESTOR directly\n\n• Use  --outgoing  -- it will be the first linear changeset not included in destination. (See\nhg help config.paths.default-push)\n\n• Otherwise, the value from the \"histedit.defaultrev\" config option is used as  a  revset  to\nselect the base revision when ANCESTOR is not specified. The first revision returned by the\nrevset  is used. By default, this selects the editable history that is unique to the ances‐\ntry of the working directory.\n\nIf you use --outgoing, this command will abort if there are ambiguous outgoing revisions. For\nexample, if there are multiple branches containing outgoing revisions.\n\nUse \"min(outgoing() and ::.)\" or similar revset specification instead of --outgoing to  spec‐\nify  edit target revision exactly in such ambiguous situation. See hg help revsets for detail\nabout selecting revisions.\n\nExamples:\n\n• A number of changes have been made.  Revision 3 is no longer needed.\n\nStart history editing from revision 3:\n\nhg histedit -r 3\n\nAn editor opens, containing the list of revisions, with specific actions specified:\n\npick 5339bf82f0ca 3 Zworgle the foobar\npick 8ef592ce7cc4 4 Bedazzle the zerlog\npick 0a9639fcda9d 5 Morgify the cromulancy\n\nAdditional information about the possible actions to take appears below the list of  re‐\nvisions.\n\nTo  remove  revision  3  from  the history, its action (at the beginning of the relevant\nline) is changed to 'drop':\n\ndrop 5339bf82f0ca 3 Zworgle the foobar\npick 8ef592ce7cc4 4 Bedazzle the zerlog\npick 0a9639fcda9d 5 Morgify the cromulancy\n\n• A number of changes have been made.  Revision 2 and 4 need to be swapped.\n\nStart history editing from revision 2:\n\nhg histedit -r 2\n\nAn editor opens, containing the list of revisions, with specific actions specified:\n\npick 252a1af424ad 2 Blorb a morgwazzle\npick 5339bf82f0ca 3 Zworgle the foobar\npick 8ef592ce7cc4 4 Bedazzle the zerlog\n\nTo swap revision 2 and 4, its lines are swapped in the editor:\n\npick 8ef592ce7cc4 4 Bedazzle the zerlog\npick 5339bf82f0ca 3 Zworgle the foobar\npick 252a1af424ad 2 Blorb a morgwazzle\n\nReturns 0 on success, 1 if user intervention is required (not  only  for  intentional  \"edit\"\ncommand, but also for resolving unexpected conflicts).\n\nOptions:\n\n--commands <FILE>\nread history edits from the specified file\n"
                },
                {
                    "name": "-c, --continue",
                    "content": "continue an edit already in progress\n",
                    "flag": "-c",
                    "long": "--continue"
                },
                {
                    "name": "--edit-plan",
                    "content": "edit remaining actions list\n",
                    "long": "--edit-plan"
                },
                {
                    "name": "-k, --keep",
                    "content": "don't strip old nodes after edit is complete\n",
                    "flag": "-k",
                    "long": "--keep"
                },
                {
                    "name": "--abort",
                    "content": "abort an edit in progress\n",
                    "long": "--abort"
                },
                {
                    "name": "-o, --outgoing",
                    "content": "changesets not found in destination\n",
                    "flag": "-o",
                    "long": "--outgoing"
                },
                {
                    "name": "-f, --force",
                    "content": "force outgoing even for unrelated repositories\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-r,_",
                    "content": "first revision to be edited\n"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "hooklib",
                    "content": "collection of simple hooks for common tasks (EXPERIMENTAL)\n\nThis extension provides a number of simple hooks to handle issues commonly found in reposito‐\nries  with  many contributors: - email notification when changesets move from draft to public\nphase - email notification when changesets are obsoleted - enforcement of draft phase for all\nincoming changesets - enforcement of a no-branch-merge policy - enforcement  of  a  no-multi‐\nple-heads policy\n\nThe implementation of the hooks is subject to change, e.g. whether to implement them as indi‐\nvidual  hooks  or merge them into the notify extension as option. The functionality itself is\nplanned to be supported long-term.\n"
                },
                {
                    "name": "journal",
                    "content": "track previous positions of bookmarks (EXPERIMENTAL)\n\nThis extension adds a new command: hg journal, which shows you where  bookmarks  were  previ‐\nously located.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change organization",
                    "content": ""
                },
                {
                    "name": "journal",
                    "content": "show the previous position of bookmarks and the working copy:\n\nhg journal [OPTION]... [BOOKMARKNAME]\n\nThe  journal  is used to see the previous commits that bookmarks and the working copy pointed\nto. By default the previous locations for the working copy.  Passing  a  bookmark  name  will\nshow all the previous positions of that bookmark. Use the --all switch to show previous loca‐\ntions  for all bookmarks and the working copy; each line will then include the bookmark name,\nor '.' for the working copy, as well.\n\nIf name starts with re:, the remainder of the name is treated as  a  regular  expression.  To\nmatch a name that actually starts with re:, use the prefix literal:.\n\nBy  default  hg  journal  only shows the commit hash and the command that was running at that\ntime. -v/--verbose will show the prior hash, the user, and the time at which it happened.\n\nUse -c/--commits to output log information on each commit hash; at this point you can use the\nusual --patch, --git, --stat and --template switches to alter the log output for these.\n\nhg journal -T json can be used to produce machine readable output.\n\nOptions:\n\n--all  show history for all names\n"
                },
                {
                    "name": "-c, --commits",
                    "content": "show commit metadata\n",
                    "flag": "-c",
                    "long": "--commits"
                },
                {
                    "name": "-p, --patch",
                    "content": "show patch\n",
                    "flag": "-p",
                    "long": "--patch"
                },
                {
                    "name": "-g, --git",
                    "content": "use git extended diff format\n",
                    "flag": "-g",
                    "long": "--git"
                },
                {
                    "name": "-l,_",
                    "content": "limit number of changes displayed\n\n--stat output diffstat-style summary of changes\n\n--style <STYLE>\ndisplay using template map file (DEPRECATED)\n"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "keyword",
                    "content": "expand keywords in tracked files\n\nThis extension expands RCS/CVS-like or self-customized $Keywords$ in tracked text  files  se‐\nlected by your configuration.\n\nKeywords  are  only  expanded in local repositories and not stored in the change history. The\nmechanism can be regarded as a convenience for the current user or for archive distribution.\n\nKeywords expand to the changeset data pertaining to the latest change relative to the working\ndirectory parent of each file.\n\nConfiguration is done in the [keyword],  [keywordset]  and  [keywordmaps]  sections  of  hgrc\nfiles.\n\nExample:\n\n[keyword]\n# expand keywords in every python file except those matching \"x*\"\n.py =\nx*    = ignore\n\n[keywordset]\n# prefer svn- over cvs-like default keywordmaps\nsvn = True\n\nNote   The  more  specific  you are in your filename patterns the less you lose speed in huge\nrepositories.\n\nFor [keywordmaps] template mapping and expansion demonstration and control run hg kwdemo. See\nhg help templates for a list of available templates and filters.\n\nThree additional date template filters are provided:\n"
                },
                {
                    "name": "utcdate",
                    "content": "\"2006/09/18 15:13:13\"\n"
                },
                {
                    "name": "svnutcdate",
                    "content": "\"2006-09-18 15:13:13Z\"\n"
                },
                {
                    "name": "svnisodate",
                    "content": "\"2006-09-18 08:13:13 -700 (Mon, 18 Sep 2006)\"\n\nThe default template mappings (view with hg kwdemo -d) can be replaced with  customized  key‐\nwords  and  templates.  Again,  run  hg  kwdemo to  control the results of your configuration\nchanges.\n\nBefore changing/disabling active keywords, you must run hg kwshrink to avoid storing expanded\nkeywords in the change history.\n\nTo force expansion after enabling it, or a configuration change, run hg kwexpand.\n\nExpansions spanning more than one line and incremental expansions, like CVS' $Log$,  are  not\nsupported.  A  keyword template map \"Log = {desc}\" expands to the first line of the changeset\ndescription.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Uncategorized commands",
                    "content": ""
                },
                {
                    "name": "kwdemo",
                    "content": "print [keywordmaps] configuration and an expansion example:\n\nhg kwdemo [-d] [-f RCFILE] [TEMPLATEMAP]...\n\nShow current, custom, or default keyword template maps and their expansions.\n\nExtend the current configuration by specifying maps as arguments  and  using  -f/--rcfile  to\nsource an external hgrc file.\n\nUse -d/--default to disable current configuration.\n\nSee hg help templates for information on templates and filters.\n\nOptions:\n"
                },
                {
                    "name": "-d, --default",
                    "content": "show default keyword template maps\n",
                    "flag": "-d",
                    "long": "--default"
                },
                {
                    "name": "-f,_",
                    "content": "read maps from rcfile\n"
                },
                {
                    "name": "kwexpand",
                    "content": "expand keywords in the working directory:\n\nhg kwexpand [OPTION]... [FILE]...\n\nRun after (re)enabling keyword expansion.\n\nkwexpand refuses to run if given files contain local changes.\n\nOptions:\n"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "kwfiles",
                    "content": "show files configured for keyword expansion:\n\nhg kwfiles [OPTION]... [FILE]...\n\nList  which  files  in  the working directory are matched by the [keyword] configuration pat‐\nterns.\n\nUseful to prevent inadvertent keyword expansion and to speed up execution by  including  only\nfiles that are actual candidates for expansion.\n\nSee hg help keyword on how to construct patterns both for inclusion and exclusion of files.\n\nWith -A/--all and -v/--verbose the codes used to show the status of files are:\n\nK = keyword expansion candidate\nk = keyword expansion candidate (not tracked)\nI = ignored\ni = ignored (not tracked)\n\nOptions:\n"
                },
                {
                    "name": "-A, --all",
                    "content": "show keyword status flags of all files\n",
                    "flag": "-A",
                    "long": "--all"
                },
                {
                    "name": "-i, --ignore",
                    "content": "show files excluded from expansion\n",
                    "flag": "-i",
                    "long": "--ignore"
                },
                {
                    "name": "-u, --unknown",
                    "content": "only show unknown (not tracked) files\n",
                    "flag": "-u",
                    "long": "--unknown"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "kwshrink",
                    "content": "revert expanded keywords in the working directory:\n\nhg kwshrink [OPTION]... [FILE]...\n\nMust be run before changing/disabling active keywords.\n\nkwshrink refuses to run if given files contain local changes.\n\nOptions:\n"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "largefiles",
                    "content": "track large binary files\n\nLarge binary files tend to be not very compressible, not very diffable, and not at all merge‐\nable. Such files are not handled efficiently by Mercurial's storage format (revlog), which is\nbased  on  compressed  binary  deltas;  storing large binary files as regular Mercurial files\nwastes bandwidth and disk space and increases Mercurial's memory usage. The largefiles exten‐\nsion addresses these problems by adding a centralized client-server layer on top  of  Mercur‐\nial:  largefiles live in a central store out on the network somewhere, and you only fetch the\nrevisions that you need when you need them.\n\nlargefiles works by maintaining a \"standin file\" in .hglf/ for each largefile.  The  standins\nare  small (41 bytes: an SHA-1 hash plus newline) and are tracked by Mercurial. Largefile re‐\nvisions are identified by the SHA-1 hash of their contents, which is written to the  standin.\nlargefiles  uses  that  revision ID to get/put largefile revisions from/to the central store.\nThis saves both disk space and bandwidth, since you don't need to retrieve all historical re‐\nvisions of large files when you clone or pull.\n\nTo start a new repository or add new large binary files, just add --large to your hg add com‐\nmand. For example:\n\n$ dd if=/dev/urandom of=randomdata count=2000\n$ hg add --large randomdata\n$ hg commit -m \"add randomdata as a largefile\"\n\nWhen you push a changeset that adds/modifies largefiles to a remote repository, its largefile\nrevisions will be uploaded along with it.  Note that the remote Mercurial must also have  the\nlargefiles extension enabled for this to work.\n\nWhen  you  pull  a changeset that affects largefiles from a remote repository, the largefiles\nfor the changeset will by default not be pulled down. However, when you update to such a  re‐\nvision,  any largefiles needed by that revision are downloaded and cached (if they have never\nbeen downloaded before). One way to pull largefiles when pulling is  thus  to  use  --update,\nwhich  will  update  your working copy to the latest pulled revision (and thereby downloading\nany new largefiles).\n\nIf you want to pull largefiles you don't need for update yet, then you can use pull with  the\n--lfrev option or the hg lfpull command.\n\nIf  you  know you are pulling from a non-default location and want to download all the large‐\nfiles that correspond to the new changesets at the same time, then you can pull with  --lfrev\n\"pulled()\".\n\nIf  you  just want to ensure that you will have the largefiles needed to merge or rebase with\nnew heads that you are pulling, then you can  pull  with  --lfrev  \"head(pulled())\"  flag  to\npre-emptively download any largefiles that are new in the heads you are pulling.\n\nKeep  in  mind  that network access may now be required to update to changesets that you have\nnot previously updated to. The nature of the largefiles extension means that updating  is  no\nlonger guaranteed to be a local-only operation.\n\nIf  you  already  have large files tracked by Mercurial without the largefiles extension, you\nwill need to convert your repository in order to benefit from largefiles. This is  done  with\nthe hg lfconvert command:\n\n$ hg lfconvert --size 10 oldrepo newrepo\n\nIn  repositories  that already have largefiles in them, any new file over 10MB will automati‐\ncally be added as a largefile. To change this threshold, set largefiles.minsize in your  Mer‐\ncurial config file to the minimum size in megabytes to track as a largefile, or use the --lf‐\nsize option to the add command (also in megabytes):\n\n[largefiles]\nminsize = 2\n\n$ hg add --lfsize 2\n\nThe  largefiles.patterns config option allows you to specify a list of filename patterns (see\nhg help patterns) that should always be tracked as largefiles:\n\n[largefiles]\npatterns =\n*.jpg\nre:.*\\.(png|bmp)$\nlibrary.zip\ncontent/audio/*\n\nFiles that match one of these patterns will be added as largefiles regardless of their size.\n\nThe largefiles.minsize and largefiles.patterns config options will be ignored for any reposi‐\ntories not already containing a largefile. To add the first largefile to  a  repository,  you\nmust explicitly do so with the --large flag passed to the hg add command.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Uncategorized commands",
                    "content": ""
                },
                {
                    "name": "lfconvert",
                    "content": "convert a normal repository to a largefiles repository:\n\nhg lfconvert SOURCE DEST [FILE ...]\n\nConvert  repository  SOURCE to a new repository DEST, identical to SOURCE except that certain\nfiles will be converted as largefiles: specifically, any file that  matches  any  PATTERN  or\nwhose  size is above the minimum size threshold is converted as a largefile. The size used to\ndetermine whether or not to track a file as a largefile is the size of the first  version  of\nthe  file. The minimum size can be specified either with --size or in configuration as large‐\nfiles.size.\n\nAfter running this command you will need to make sure that largefiles is enabled anywhere you\nintend to push the new repository.\n\nUse --to-normal to convert largefiles back to normal files; after this, the  DEST  repository\ncan be used without largefiles at all.\n\nOptions:\n"
                },
                {
                    "name": "-s,_",
                    "content": "minimum size (MB) for files to be converted as largefiles\n"
                },
                {
                    "name": "--to-normal",
                    "content": "convert from a largefiles repo to a normal repo\n",
                    "long": "--to-normal"
                },
                {
                    "name": "lfpull",
                    "content": "pull largefiles for the specified revisions from the specified source:\n\nhg lfpull -r REV... [-e CMD] [--remotecmd CMD] [SOURCE]\n\nPull largefiles that are referenced from local changesets but missing locally, pulling from a\nremote repository to the local cache.\n\nIf  SOURCE  is  omitted, the 'default' path will be used.  See hg help urls for more informa‐\ntion.\n\nSome examples:\n\n• pull largefiles for all branch heads:\n\nhg lfpull -r \"head() and not closed()\"\n\n• pull largefiles on the default branch:\n\nhg lfpull -r \"branch(default)\"\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "pull largefiles for these revisions\n"
                },
                {
                    "name": "-e,_",
                    "content": "specify ssh command to use\n\n--remotecmd <CMD>\nspecify hg command to run on the remote side\n"
                },
                {
                    "name": "--insecure",
                    "content": "do not verify server certificate (ignoring web.cacerts config)\n\n[+] marked option can be specified multiple times\n",
                    "long": "--insecure"
                },
                {
                    "name": "lfs",
                    "content": "lfs - large file support (EXPERIMENTAL)\n\nThis extension allows large files to be tracked outside of the normal repository storage  and\nstored on a centralized server, similar to the largefiles extension.  The git-lfs protocol is\nused  when  communicating  with  the server, so existing git infrastructure can be harnessed.\nEven though the files are stored outside of the repository, they are still integrity  checked\nin the same manner as normal files.\n\nThe  files  stored outside of the repository are downloaded on demand, which reduces the time\nto clone, and possibly the local disk usage.  This changes fundamental workflows in  a  DVCS,\nso  careful  thought  should be given before deploying it.  hg convert can be used to convert\nLFS repositories to normal repositories that no longer require  this  extension,  and  do  so\nwithout changing the commit hashes.  This allows the extension to be disabled if the central‐\nized  workflow becomes burdensome.  However, the pre and post convert clones will not be able\nto communicate with each other unless the extension is enabled on both.\n\nTo start a new repository, or to add LFS files to an existing one, just create an .hglfs file\nas described below in the root directory of the repository.  Typically, this file  should  be\nput  under  version  control,  so that the settings will propagate to other repositories with\npush and pull.  During any commit, Mercurial will consult this file to determine if an  added\nor  modified file should be stored externally.  The type of storage depends on the character‐\nistics of the file at each commit.  A file that is near a size threshold may switch back  and\nforth between LFS and normal storage, as needed.\n\nAlternately,  both normal repositories and largefile controlled repositories can be converted\nto LFS by using hg convert and the lfs.track config option described below.  The .hglfs  file\nshould  then  be created and added, to control subsequent LFS selection.  The hashes are also\nunchanged in this case.  The LFS and non-LFS repositories can be  distinguished  because  the\nLFS repository will abort any command if this extension is disabled.\n\nCommitted  LFS  files are held locally, until the repository is pushed.  Prior to pushing the\nnormal repository data, the LFS files that are tracked by the outgoing commits are  automati‐\ncally  uploaded to the configured central server.  No LFS files are transferred on hg pull or\nhg clone.  Instead, the files are downloaded on demand as they need to be read, if  a  cached\ncopy cannot be found locally.  Both committing and downloading an LFS file will link the file\nto a usercache, to speed up future access.  See the usercache config setting described below.\n\nThe extension reads its configuration from a versioned .hglfs configuration file found in the\nroot  of  the  working directory. The .hglfs file uses the same syntax as all other Mercurial\nconfiguration files. It uses a single section, [track].\n\nThe [track] section specifies which files are stored as LFS (or not). Each line is keyed by a\nfile pattern, with a predicate value.  The first file pattern match is used, so put more spe‐\ncific patterns first.  The available predicates are all(), none(), and size(). See  \"hg  help\nfilesets.size\" for the latter.\n\nExample versioned .hglfs file:\n\n[track]\n# No Makefile or python file, anywhere, will be LFS\nMakefile = none()\n.py = none()\n\n.zip = all()\n.exe = size(\">1MB\")\n\n# Catchall for everything not matched above\n= size(\">10MB\")\n\nConfigs:\n\n[lfs]\n# Remote endpoint. Multiple protocols are supported:\n# - http(s)://user:pass@example.com/path\n#   git-lfs endpoint\n# - file:///tmp/path\n#   local filesystem, usually for testing\n# if unset, lfs will assume the remote repository also handles blob storage\n# for http(s) URLs.  Otherwise, lfs will prompt to set this when it must\n# use this value.\n# (default: unset)\nurl = https://example.com/repo.git/info/lfs\n\n# Which files to track in LFS.  Path tests are \".extname\" for file\n# extensions, and \"path:under/some/directory\" for path prefix.  Both\n# are relative to the repository root.\n# File size can be tested with the \"size()\" fileset, and tests can be\n# joined with fileset operators.  (See \"hg help filesets.operators\".)\n#\n# Some examples:\n# - all()                       # everything\n# - none()                      # nothing\n# - size(\">20MB\")               # larger than 20MB\n# - !.txt                     # anything not a *.txt file\n# - .zip | .tar.gz | .7z  # some types of compressed files\n# - path:bin                    # files under \"bin\" in the project root\n# - (.php & size(\">2MB\")) | (.js & size(\">5MB\")) | .tar.gz\n#     | (path:bin & !path:/bin/README) | size(\">1GB\")\n# (default: none())\n#\n# This is ignored if there is a tracked '.hglfs' file, and this setting\n# will eventually be deprecated and removed.\ntrack = size(\">10M\")\n\n# how many times to retry before giving up on transferring an object\nretry = 5\n\n# the local directory to store lfs files for sharing across local clones.\n# If not set, the cache is located in an OS specific cache location.\nusercache = /path/to/global/cache\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Uncategorized commands",
                    "content": ""
                },
                {
                    "name": "logtoprocess",
                    "content": "send ui.log() data to a subprocess (EXPERIMENTAL)\n\nThis extension lets you specify a shell command per ui.log() event, sending all remaining ar‐\nguments to as environment variables to that command.\n\nPositional  arguments  construct a log message, which is passed in the MSG1 environment vari‐\nables. Each keyword argument is set as a OPTUPPERCASEKEY variable (so  the  key  is  upper‐\ncased,  and  prefixed  with OPT). The original event name is passed in the EVENT environment\nvariable, and the process ID of mercurial is given in HGPID.\n\nSo given a call ui.log('foo', 'bar %s ', 'baz', spam='eggs'), a  script  configured  for  the\n`foo event can expect an environment with MSG1=bar baz, and OPTSPAM=eggs.\n\nScripts are configured in the [logtoprocess] section, each key an event name.  For example:\n\n[logtoprocess]\ncommandexception = echo \"$MSG1\" > /var/log/mercurialexceptions.log\n\nwould log the warning message and traceback of any failed command dispatch.\n\nScripts  are  run asynchronously as detached daemon processes; mercurial will not ensure that\nthey exit cleanly.\n\nmq\nmanage a stack of patches\n\nThis extension lets you work with a stack of patches in a Mercurial  repository.  It  manages\ntwo stacks of patches - all known patches, and applied patches (subset of known patches).\n\nKnown  patches  are  represented as patch files in the .hg/patches directory. Applied patches\nare both patch files and changesets.\n\nCommon tasks (use hg help COMMAND for more details):\n\ncreate new patch                          qnew\nimport existing patch                     qimport\n\nprint patch series                        qseries\nprint applied patches                     qapplied\n\nadd known patch to applied stack          qpush\nremove patch from applied stack           qpop\nrefresh contents of top applied patch     qrefresh\n\nBy default, mq will automatically use git patches when required to  avoid  losing  file  mode\nchanges,  copy records, binary files or empty files creations or deletions. This behavior can\nbe configured with:\n\n[mq]\ngit = auto/keep/yes/no\n\nIf set to 'keep', mq will obey the [diff] section configuration while preserving existing git\npatches upon qrefresh. If set to 'yes' or 'no', mq will override the [diff] section  and  al‐\nways generate git or regular patches, possibly losing data in the second case.\n\nIt  may  be  desirable for mq changesets to be kept in the secret phase (see hg help phases),\nwhich can be enabled with the following setting:\n\n[mq]\nsecret = True\n\nYou will by default be managing a patch queue named \"patches\". You can create other, indepen‐\ndent patch queues with the hg qqueue command.\n\nIf the working directory contains uncommitted files, qpush, qpop and qgoto abort immediately.\nIf -f/--force is used, the changes are discarded. Setting:\n\n[mq]\nkeepchanges = True\n\nmake them behave as if --keep-changes were passed, and non-conflicting local changes will  be\ntolerated  and  preserved.  If incompatible options such as -f/--force or --exact are passed,\nthis setting is ignored.\n\nThis extension used to provide a strip command. This command now lives in  the  strip  exten‐\nsion.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Repository creation",
                    "content": ""
                },
                {
                    "name": "qclone",
                    "content": "clone main and patch repository at same time:\n\nhg qclone [OPTION]... SOURCE [DEST]\n\nIf  source is local, destination will have no patches applied. If source is remote, this com‐\nmand can not check if patches are applied in source, so cannot guarantee that patches are not\napplied in destination. If you clone remote repository, be sure before that it has no patches\napplied.\n\nSource patch repository is looked for in  <src>/.hg/patches  by  default.  Use  -p  <url>  to\nchange.\n\nThe  patch  directory  must  be a nested Mercurial repository, as would be created by hg init\n--mq.\n\nReturn 0 on success.\n\nOptions:\n\n--pull use pull protocol to copy metadata\n"
                },
                {
                    "name": "-U, --noupdate",
                    "content": "do not update the new working directories\n",
                    "flag": "-U",
                    "long": "--noupdate"
                },
                {
                    "name": "--uncompressed",
                    "content": "use uncompressed transfer (fast over LAN)\n",
                    "long": "--uncompressed"
                },
                {
                    "name": "-p,_",
                    "content": "location of source patch repository\n"
                },
                {
                    "name": "-e,_",
                    "content": "specify ssh command to use\n\n--remotecmd <CMD>\nspecify hg command to run on the remote side\n"
                },
                {
                    "name": "--insecure",
                    "content": "do not verify server certificate (ignoring web.cacerts config)\n",
                    "long": "--insecure"
                },
                {
                    "name": "qinit",
                    "content": "init a new queue repository (DEPRECATED):\n\nhg qinit [-c]\n\nThe queue repository is unversioned by default. If -c/--create-repo is specified, qinit  will\ncreate a separate nested repository for patches (qinit -c may also be run later to convert an\nunversioned  patch repository into a versioned one). You can use qcommit to commit changes to\nthis queue repository.\n\nThis command is deprecated. Without -c, it's implied by other relevant commands. With -c, use\nhg init --mq instead.\n\nOptions:\n"
                },
                {
                    "name": "-c, --create-repo",
                    "content": "create queue repository\n",
                    "flag": "-c",
                    "long": "--create-repo"
                },
                {
                    "name": "Change creation",
                    "content": ""
                },
                {
                    "name": "qcommit",
                    "content": "commit changes in the queue repository (DEPRECATED):\n\nhg qcommit [OPTION]... [FILE]...\n\nThis command is deprecated; use hg commit --mq instead.\n\nOptions:\n"
                },
                {
                    "name": "-A, --addremove",
                    "content": "mark new/missing files as added/removed before committing\n",
                    "flag": "-A",
                    "long": "--addremove"
                },
                {
                    "name": "--close-branch",
                    "content": "mark a branch head as closed\n",
                    "long": "--close-branch"
                },
                {
                    "name": "--amend",
                    "content": "amend the parent of the working directory\n",
                    "long": "--amend"
                },
                {
                    "name": "-s, --secret",
                    "content": "use the secret phase for committing\n",
                    "flag": "-s",
                    "long": "--secret"
                },
                {
                    "name": "--draft",
                    "content": "use the draft phase for committing\n",
                    "long": "--draft"
                },
                {
                    "name": "-e, --edit",
                    "content": "invoke editor on commit messages\n",
                    "flag": "-e",
                    "long": "--edit"
                },
                {
                    "name": "--force-close-branch",
                    "content": "forcibly close branch from a non-head changeset (ADVANCED)\n",
                    "long": "--force-close-branch"
                },
                {
                    "name": "-i, --interactive",
                    "content": "use interactive mode\n",
                    "flag": "-i",
                    "long": "--interactive"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-m,_",
                    "content": "use text as commit message\n"
                },
                {
                    "name": "-l,_",
                    "content": "read commit message from file\n"
                },
                {
                    "name": "-d,_",
                    "content": "record the specified date as commit date\n"
                },
                {
                    "name": "-u,_",
                    "content": "record the specified user as committer\n"
                },
                {
                    "name": "-S, --subrepos",
                    "content": "recurse into subrepositories\n\n[+] marked option can be specified multiple times\n\naliases: qci\n",
                    "flag": "-S",
                    "long": "--subrepos"
                },
                {
                    "name": "qnew",
                    "content": "create a new patch:\n\nhg qnew [-e] [-m TEXT] [-l FILE] PATCH [FILE]...\n\nqnew creates a new patch on top of the currently-applied patch (if any). The  patch  will  be\ninitialized  with any outstanding changes in the working directory. You may also use -I/--in‐\nclude, -X/--exclude, and/or a list of files after the patch  name  to  add  only  changes  to\nmatching files to the new patch, leaving the rest as uncommitted modifications.\n\n-u/--user and -d/--date can be used to set the (given) user and date, respectively. -U/--cur‐\nrentuser and -D/--currentdate set user to current user and date to current date.\n\n-e/--edit,  -m/--message  or -l/--logfile set the patch header as well as the commit message.\nIf none is specified, the header is empty and the commit message is '[mq]: PATCH'.\n\nUse the -g/--git option to keep the patch in the git extended diff  format.  Read  the  diffs\nhelp  topic  for  more information on why this is important for preserving permission changes\nand copy/rename information.\n\nReturns 0 on successful creation of a new patch.\n\nOptions:\n"
                },
                {
                    "name": "-e, --edit",
                    "content": "invoke editor on commit messages\n",
                    "flag": "-e",
                    "long": "--edit"
                },
                {
                    "name": "-f, --force",
                    "content": "import uncommitted changes (DEPRECATED)\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-g, --git",
                    "content": "use git extended diff format\n",
                    "flag": "-g",
                    "long": "--git"
                },
                {
                    "name": "-U, --currentuser",
                    "content": "add \"From: <current user>\" to patch\n",
                    "flag": "-U",
                    "long": "--currentuser"
                },
                {
                    "name": "-u,_",
                    "content": "add \"From: <USER>\" to patch\n"
                },
                {
                    "name": "-D, --currentdate",
                    "content": "add \"Date: <current date>\" to patch\n",
                    "flag": "-D",
                    "long": "--currentdate"
                },
                {
                    "name": "-d,_",
                    "content": "add \"Date: <DATE>\" to patch\n"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-m,_",
                    "content": "use text as commit message\n"
                },
                {
                    "name": "-l,_",
                    "content": "read commit message from file\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "qrefresh",
                    "content": "update the current patch:\n\nhg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]...\n\nIf any file patterns are provided, the refreshed patch will contain  only  the  modifications\nthat match those patterns; the remaining modifications will remain in the working directory.\n\nIf -s/--short is specified, files currently included in the patch will be refreshed just like\nmatched files and remain in the patch.\n\nIf  -e/--edit  is  specified,  Mercurial will start your configured editor for you to enter a\nmessage. In case qrefresh fails, you will find a backup  of  your  message  in  .hg/last-mes‐\nsage.txt.\n\nhg  add/remove/copy/rename  work  as  usual,  though  you might want to use git-style patches\n(-g/--git or [diff] git=1) to track copies and renames. See the diffs help topic for more in‐\nformation on the git diff format.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-e, --edit",
                    "content": "invoke editor on commit messages\n",
                    "flag": "-e",
                    "long": "--edit"
                },
                {
                    "name": "-g, --git",
                    "content": "use git extended diff format\n",
                    "flag": "-g",
                    "long": "--git"
                },
                {
                    "name": "-s, --short",
                    "content": "refresh only files already in the patch and specified files\n",
                    "flag": "-s",
                    "long": "--short"
                },
                {
                    "name": "-U, --currentuser",
                    "content": "add/update author field in patch with current user\n",
                    "flag": "-U",
                    "long": "--currentuser"
                },
                {
                    "name": "-u,_",
                    "content": "add/update author field in patch with given user\n"
                },
                {
                    "name": "-D, --currentdate",
                    "content": "add/update date field in patch with current date\n",
                    "flag": "-D",
                    "long": "--currentdate"
                },
                {
                    "name": "-d,_",
                    "content": "add/update date field in patch with given date\n"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-m,_",
                    "content": "use text as commit message\n"
                },
                {
                    "name": "-l,_",
                    "content": "read commit message from file\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "Change manipulation",
                    "content": ""
                },
                {
                    "name": "qfold",
                    "content": "fold the named patches into the current patch:\n\nhg qfold [-e] [-k] [-m TEXT] [-l FILE] PATCH...\n\nPatches must not yet be applied. Each patch will be successively applied to the current patch\nin the order given. If all the patches apply successfully, the  current  patch  will  be  re‐\nfreshed  with  the  new  cumulative  patch,  and  the  folded  patches  will be deleted. With\n-k/--keep, the folded patch files will not be removed afterwards.\n\nThe header for each folded patch will be concatenated with the current  patch  header,  sepa‐\nrated by a line of * * *.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-e, --edit",
                    "content": "invoke editor on commit messages\n",
                    "flag": "-e",
                    "long": "--edit"
                },
                {
                    "name": "-k, --keep",
                    "content": "keep folded patch files\n",
                    "flag": "-k",
                    "long": "--keep"
                },
                {
                    "name": "-m,_",
                    "content": "use text as commit message\n"
                },
                {
                    "name": "-l,_",
                    "content": "read commit message from file\n"
                },
                {
                    "name": "Change organization",
                    "content": ""
                },
                {
                    "name": "qapplied",
                    "content": "print the patches already applied:\n\nhg qapplied [-1] [-s] [PATCH]\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-1, --last",
                    "content": "show only the preceding applied patch\n",
                    "flag": "-1",
                    "long": "--last"
                },
                {
                    "name": "-s, --summary",
                    "content": "print first line of patch header\n",
                    "flag": "-s",
                    "long": "--summary"
                },
                {
                    "name": "qdelete",
                    "content": "remove patches from queue:\n\nhg qdelete [-k] [PATCH]...\n\nThe  patches must not be applied, and at least one patch is required. Exact patch identifiers\nmust be given. With -k/--keep, the patch files are preserved in the patch directory.\n\nTo stop managing a patch and move it into permanent history, use the hg qfinish command.\n\nOptions:\n"
                },
                {
                    "name": "-k, --keep",
                    "content": "keep patch file\n",
                    "flag": "-k",
                    "long": "--keep"
                },
                {
                    "name": "-r,_",
                    "content": "stop managing a revision (DEPRECATED)\n\n[+] marked option can be specified multiple times\n\naliases: qremove qrm\n"
                },
                {
                    "name": "qfinish",
                    "content": "move applied patches into repository history:\n\nhg qfinish [-a] [REV]...\n\nFinishes the specified revisions (corresponding to applied patches) by moving them out of  mq\ncontrol into regular repository history.\n\nAccepts  a  revision range or the -a/--applied option. If --applied is specified, all applied\nmq revisions are removed from mq control. Otherwise, the given revisions must be at the  base\nof the stack of applied patches.\n\nThis can be especially useful if your changes have been applied to an upstream repository, or\nif you are about to push your changes to upstream.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-a, --applied",
                    "content": "finish all applied changesets\n",
                    "flag": "-a",
                    "long": "--applied"
                },
                {
                    "name": "qgoto",
                    "content": "push or pop patches until named patch is at top of stack:\n\nhg qgoto [OPTION]... PATCH\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "--keep-changes",
                    "content": "tolerate non-conflicting local changes\n",
                    "long": "--keep-changes"
                },
                {
                    "name": "-f, --force",
                    "content": "overwrite any local changes\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "--no-backup",
                    "content": "do not save backup copies of files\n",
                    "long": "--no-backup"
                },
                {
                    "name": "qguard",
                    "content": "set or print guards for a patch:\n\nhg qguard [-l] [-n] [PATCH] [-- [+GUARD]... [-GUARD]...]\n\nGuards  control  whether  a  patch  can be pushed. A patch with no guards is always pushed. A\npatch with a positive guard (\"+foo\") is pushed only if the hg qselect command  has  activated\nit.  A patch with a negative guard (\"-foo\") is never pushed if the hg qselect command has ac‐\ntivated it.\n\nWith no arguments, print the currently active guards.  With arguments,  set  guards  for  the\nnamed patch.\n\nNote   Specifying negative guards now requires '--'.\n\nTo set guards on another patch:\n\nhg qguard other.patch -- +2.6.17 -stable\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-l, --list",
                    "content": "list all patches and guards\n",
                    "flag": "-l",
                    "long": "--list"
                },
                {
                    "name": "-n, --none",
                    "content": "drop all guards\n",
                    "flag": "-n",
                    "long": "--none"
                },
                {
                    "name": "qheader",
                    "content": "print the header of the topmost or specified patch:\n\nhg qheader [PATCH]\n\nReturns 0 on success.\n"
                },
                {
                    "name": "qnext",
                    "content": "print the name of the next pushable patch:\n\nhg qnext [-s]\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-s, --summary",
                    "content": "print first line of patch header\n",
                    "flag": "-s",
                    "long": "--summary"
                },
                {
                    "name": "qpop",
                    "content": "pop the current patch off the stack:\n\nhg qpop [-a] [-f] [PATCH | INDEX]\n\nWithout  argument,  pops off the top of the patch stack. If given a patch name, keeps popping\noff patches until the named patch is at the top of the stack.\n\nBy default, abort if the working directory contains uncommitted changes. With --keep-changes,\nabort only if the uncommitted files overlap with patched files. With -f/--force,  backup  and\ndiscard changes made to such files.\n\nReturn 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-a, --all",
                    "content": "pop all patches\n",
                    "flag": "-a",
                    "long": "--all"
                },
                {
                    "name": "-n,_",
                    "content": "queue name to pop (DEPRECATED)\n"
                },
                {
                    "name": "--keep-changes",
                    "content": "tolerate non-conflicting local changes\n",
                    "long": "--keep-changes"
                },
                {
                    "name": "-f, --force",
                    "content": "forget any local changes to patched files\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "--no-backup",
                    "content": "do not save backup copies of files\n",
                    "long": "--no-backup"
                },
                {
                    "name": "qprev",
                    "content": "print the name of the preceding applied patch:\n\nhg qprev [-s]\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-s, --summary",
                    "content": "print first line of patch header\n",
                    "flag": "-s",
                    "long": "--summary"
                },
                {
                    "name": "qpush",
                    "content": "push the next patch onto the stack:\n\nhg qpush [-f] [-l] [-a] [--move] [PATCH | INDEX]\n\nBy default, abort if the working directory contains uncommitted changes. With --keep-changes,\nabort  only  if the uncommitted files overlap with patched files. With -f/--force, backup and\npatch over uncommitted changes.\n\nReturn 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "--keep-changes",
                    "content": "tolerate non-conflicting local changes\n",
                    "long": "--keep-changes"
                },
                {
                    "name": "-f, --force",
                    "content": "apply on top of local changes\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-e, --exact",
                    "content": "apply the target patch to its recorded parent\n",
                    "flag": "-e",
                    "long": "--exact"
                },
                {
                    "name": "-l, --list",
                    "content": "list patch name in commit text\n",
                    "flag": "-l",
                    "long": "--list"
                },
                {
                    "name": "-a, --all",
                    "content": "apply all patches\n",
                    "flag": "-a",
                    "long": "--all"
                },
                {
                    "name": "-m, --merge",
                    "content": "merge from another queue (DEPRECATED)\n",
                    "flag": "-m",
                    "long": "--merge"
                },
                {
                    "name": "-n,_",
                    "content": "merge queue name (DEPRECATED)\n\n--move reorder patch series and apply only the patch\n"
                },
                {
                    "name": "--no-backup",
                    "content": "do not save backup copies of files\n",
                    "long": "--no-backup"
                },
                {
                    "name": "qqueue",
                    "content": "manage multiple patch queues:\n\nhg qqueue [OPTION] [QUEUE]\n\nSupports switching between different patch queues, as well as creating new patch  queues  and\ndeleting existing ones.\n\nOmitting  a  queue  name or specifying -l/--list will show you the registered queues - by de‐\nfault the \"normal\" patches queue is registered. The currently active  queue  will  be  marked\nwith \"(active)\". Specifying --active will print only the name of the active queue.\n\nTo create a new queue, use -c/--create. The queue is automatically made active, except in the\ncase  where there are applied patches from the currently active queue in the repository. Then\nthe queue will only be created and switching will fail.\n\nTo delete an existing queue, use --delete. You cannot delete the currently active queue.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-l, --list",
                    "content": "list all available queues\n",
                    "flag": "-l",
                    "long": "--list"
                },
                {
                    "name": "--active",
                    "content": "print name of active queue\n",
                    "long": "--active"
                },
                {
                    "name": "-c, --create",
                    "content": "create new queue\n",
                    "flag": "-c",
                    "long": "--create"
                },
                {
                    "name": "--rename",
                    "content": "rename active queue\n",
                    "long": "--rename"
                },
                {
                    "name": "--delete",
                    "content": "delete reference to queue\n",
                    "long": "--delete"
                },
                {
                    "name": "--purge",
                    "content": "delete queue, and remove patch dir\n",
                    "long": "--purge"
                },
                {
                    "name": "qrename",
                    "content": "rename a patch:\n\nhg qrename PATCH1 [PATCH2]\n\nWith one argument, renames the current patch to PATCH1.  With two arguments,  renames  PATCH1\nto PATCH2.\n\nReturns 0 on success.\n\naliases: qmv\n"
                },
                {
                    "name": "qrestore",
                    "content": "restore the queue state saved by a revision (DEPRECATED):\n\nhg qrestore [-d] [-u] REV\n\nThis command is deprecated, use hg rebase instead.\n\nOptions:\n"
                },
                {
                    "name": "-d, --delete",
                    "content": "delete save entry\n",
                    "flag": "-d",
                    "long": "--delete"
                },
                {
                    "name": "-u, --update",
                    "content": "update queue working directory\n",
                    "flag": "-u",
                    "long": "--update"
                },
                {
                    "name": "qsave",
                    "content": "save current queue state (DEPRECATED):\n\nhg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]\n\nThis command is deprecated, use hg rebase instead.\n\nOptions:\n"
                },
                {
                    "name": "-c, --copy",
                    "content": "copy patch directory\n",
                    "flag": "-c",
                    "long": "--copy"
                },
                {
                    "name": "-n,_",
                    "content": "copy directory name\n"
                },
                {
                    "name": "-e, --empty",
                    "content": "clear queue status file\n",
                    "flag": "-e",
                    "long": "--empty"
                },
                {
                    "name": "-f, --force",
                    "content": "force copy\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-m,_",
                    "content": "use text as commit message\n"
                },
                {
                    "name": "-l,_",
                    "content": "read commit message from file\n"
                },
                {
                    "name": "qselect",
                    "content": "set or print guarded patches to push:\n\nhg qselect [OPTION]... [GUARD]...\n\nUse  the hg qguard command to set or print guards on patch, then use qselect to tell mq which\nguards to use. A patch will be pushed if it has no guards or any positive  guards  match  the\ncurrently  selected  guard,  but  will not be pushed if any negative guards match the current\nguard. For example:\n\nqguard foo.patch -- -stable    (negative guard)\nqguard bar.patch    +stable    (positive guard)\nqselect stable\n\nThis activates the \"stable\" guard. mq will skip foo.patch (because it has a  negative  match)\nbut push bar.patch (because it has a positive match).\n\nWith  no  arguments,  prints the currently active guards.  With one argument, sets the active\nguard.\n\nUse -n/--none to deactivate guards (no other arguments needed).  When no guards  are  active,\npatches with positive guards are skipped and patches with negative guards are pushed.\n\nqselect can change the guards on applied patches. It does not pop guarded patches by default.\nUse --pop to pop back to the last applied patch that is not guarded. Use --reapply (which im‐\nplies --pop) to push back to the current patch afterwards, but skip guarded patches.\n\nUse -s/--series to print a list of all guards in the series file (no other arguments needed).\nUse -v for more information.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-n, --none",
                    "content": "disable all guards\n",
                    "flag": "-n",
                    "long": "--none"
                },
                {
                    "name": "-s, --series",
                    "content": "list all guards in series file\n\n--pop  pop to before first guarded applied patch\n",
                    "flag": "-s",
                    "long": "--series"
                },
                {
                    "name": "--reapply",
                    "content": "pop, then reapply patches\n",
                    "long": "--reapply"
                },
                {
                    "name": "qseries",
                    "content": "print the entire series file:\n\nhg qseries [-ms]\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-m, --missing",
                    "content": "print patches not in series\n",
                    "flag": "-m",
                    "long": "--missing"
                },
                {
                    "name": "-s, --summary",
                    "content": "print first line of patch header\n",
                    "flag": "-s",
                    "long": "--summary"
                },
                {
                    "name": "qtop",
                    "content": "print the name of the current patch:\n\nhg qtop [-s]\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-s, --summary",
                    "content": "print first line of patch header\n",
                    "flag": "-s",
                    "long": "--summary"
                },
                {
                    "name": "qunapplied",
                    "content": "print the patches not yet applied:\n\nhg qunapplied [-1] [-s] [PATCH]\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-1, --first",
                    "content": "show only the first patch\n",
                    "flag": "-1",
                    "long": "--first"
                },
                {
                    "name": "-s, --summary",
                    "content": "print first line of patch header\n",
                    "flag": "-s",
                    "long": "--summary"
                },
                {
                    "name": "File content management",
                    "content": ""
                },
                {
                    "name": "qdiff",
                    "content": "diff of the current patch and subsequent modifications:\n\nhg qdiff [OPTION]... [FILE]...\n\nShows  a diff which includes the current patch as well as any changes which have been made in\nthe working directory since the last refresh (thus showing what the current patch  would  be‐\ncome after a qrefresh).\n\nUse  hg  diff if  you only want to see the changes made since the last qrefresh, or hg export\nqtip if you want to see changes made by the current  patch  without  including  changes  made\nsince the qrefresh.\n\nReturns 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-a, --text",
                    "content": "treat all files as text\n",
                    "flag": "-a",
                    "long": "--text"
                },
                {
                    "name": "-g, --git",
                    "content": "use git extended diff format (DEFAULT: diff.git)\n",
                    "flag": "-g",
                    "long": "--git"
                },
                {
                    "name": "--binary",
                    "content": "generate binary diffs in git mode (default)\n",
                    "long": "--binary"
                },
                {
                    "name": "--nodates",
                    "content": "omit dates from diff headers\n",
                    "long": "--nodates"
                },
                {
                    "name": "--noprefix",
                    "content": "omit a/ and b/ prefixes from filenames\n",
                    "long": "--noprefix"
                },
                {
                    "name": "-p, --show-function",
                    "content": "show which function each change is in (DEFAULT: diff.showfunc)\n",
                    "flag": "-p",
                    "long": "--show-function"
                },
                {
                    "name": "--reverse",
                    "content": "produce a diff that undoes the changes\n",
                    "long": "--reverse"
                },
                {
                    "name": "-w, --ignore-all-space",
                    "content": "ignore white space when comparing lines\n",
                    "flag": "-w",
                    "long": "--ignore-all-space"
                },
                {
                    "name": "-b, --ignore-space-change",
                    "content": "ignore changes in the amount of white space\n",
                    "flag": "-b",
                    "long": "--ignore-space-change"
                },
                {
                    "name": "-B, --ignore-blank-lines",
                    "content": "ignore changes whose lines are all blank\n",
                    "flag": "-B",
                    "long": "--ignore-blank-lines"
                },
                {
                    "name": "-Z, --ignore-space-at-eol",
                    "content": "ignore changes in whitespace at EOL\n",
                    "flag": "-Z",
                    "long": "--ignore-space-at-eol"
                },
                {
                    "name": "-U,_",
                    "content": "number of lines of context to show\n\n--stat output diffstat-style summary of changes\n\n--root <DIR>\nproduce diffs relative to subdirectory\n"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "Change import/export",
                    "content": ""
                },
                {
                    "name": "qimport",
                    "content": "import a patch or existing changeset:\n\nhg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... [FILE]...\n\nThe  patch  is inserted into the series after the last applied patch. If no patches have been\napplied, qimport prepends the patch to the series.\n\nThe patch will have the same name as its source file unless  you  give  it  a  new  one  with\n-n/--name.\n\nYou can register an existing patch inside the patch directory with the -e/--existing flag.\n\nWith -f/--force, an existing patch of the same name will be overwritten.\n\nAn  existing  changeset may be placed under mq control with -r/--rev (e.g. qimport --rev . -n\npatch will place the current revision under mq control). With -g/--git, patches imported with\n--rev will use the git diff format. See the diffs help topic for information on why  this  is\nimportant  for  preserving  rename/copy information and permission changes. Use hg qfinish to\nremove changesets from mq control.\n\nTo import a patch from standard input, pass - as the patch file.  When importing  from  stan‐\ndard input, a patch name must be specified using the --name flag.\n\nTo import an existing patch while renaming it:\n\nhg qimport -e existing-patch -n new-name\n\nReturns 0 if import succeeded.\n\nOptions:\n"
                },
                {
                    "name": "-e, --existing",
                    "content": "import file in patch directory\n",
                    "flag": "-e",
                    "long": "--existing"
                },
                {
                    "name": "-n,_",
                    "content": "name of patch file\n"
                },
                {
                    "name": "-f, --force",
                    "content": "overwrite existing files\n",
                    "flag": "-f",
                    "long": "--force"
                },
                {
                    "name": "-r,_",
                    "content": "place existing revisions under mq control\n"
                },
                {
                    "name": "-g, --git",
                    "content": "use git extended diff format\n",
                    "flag": "-g",
                    "long": "--git"
                },
                {
                    "name": "-P, --push",
                    "content": "qpush after importing\n\n[+] marked option can be specified multiple times\n",
                    "flag": "-P",
                    "long": "--push"
                },
                {
                    "name": "narrow",
                    "content": "create clones which fetch history data for subset of files (EXPERIMENTAL)\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Repository maintenance",
                    "content": ""
                },
                {
                    "name": "tracked",
                    "content": "show or change the current narrowspec:\n\nhg tracked [OPTIONS]... [REMOTE]\n\nWith  no argument, shows the current narrowspec entries, one per line. Each line will be pre‐\nfixed with 'I' or 'X' for included or excluded patterns, respectively.\n\nThe narrowspec is comprised of expressions to match  remote  files  and/or  directories  that\nshould  be pulled into your client.  The narrowspec has include and exclude expressions, with\nexcludes always trumping includes: that is, if a file matches an exclude expression, it  will\nbe  excluded  even if it also matches an include expression.  Excluding files that were never\nincluded has no effect.\n\nEach included or excluded entry is in the format described by 'hg help patterns'.\n\nThe options allow you to add or remove included and excluded expressions.\n\nIf --clear is specified, then all previous includes and excludes are DROPPED and replaced  by\nthe new ones specified to --addinclude and --addexclude.  If --clear is specified without any\nfurther options, the narrowspec will be empty and will not match any files.\n\nIf  --auto-remove-includes is specified, then those includes that don't match any files modi‐\nfied by currently visible local commits (those not shared by the remote) will be added to the\nset of explicitly specified includes to remove.\n\n--import-rules accepts a path to a file containing rules, allowing you to  add  --addinclude,\n--addexclude  rules in bulk. Like the other include and exclude switches, the changes are ap‐\nplied immediately.\n\nOptions:\n\n--addinclude <VALUE[+]>\nnew paths to include\n\n--removeinclude <VALUE[+]>\nold paths to no longer include\n"
                },
                {
                    "name": "--auto-remove-includes",
                    "content": "automatically choose unused includes to remove\n\n--addexclude <VALUE[+]>\nnew paths to exclude\n\n--import-rules <VALUE>\nimport narrowspecs from a file\n\n--removeexclude <VALUE[+]>\nold paths to no longer exclude\n",
                    "long": "--auto-remove-includes"
                },
                {
                    "name": "--clear",
                    "content": "whether to replace the existing narrowspec\n",
                    "long": "--clear"
                },
                {
                    "name": "--force-delete-local-changes",
                    "content": "forces deletion of local changes when narrowing\n",
                    "long": "--force-delete-local-changes"
                },
                {
                    "name": "--backup",
                    "content": "back up local changes when narrowing (default: True)\n",
                    "long": "--backup"
                },
                {
                    "name": "--update-working-copy",
                    "content": "update working copy when the store has changed\n",
                    "long": "--update-working-copy"
                },
                {
                    "name": "-e,_",
                    "content": "specify ssh command to use\n\n--remotecmd <CMD>\nspecify hg command to run on the remote side\n"
                },
                {
                    "name": "--insecure",
                    "content": "do not verify server certificate (ignoring web.cacerts config)\n\n[+] marked option can be specified multiple times\n",
                    "long": "--insecure"
                },
                {
                    "name": "notify",
                    "content": "hooks for sending email push notifications\n\nThis extension implements hooks to send email notifications when changesets are sent from  or\nreceived by the local repository.\n\nFirst,  enable  the  extension  as explained in hg help extensions, and register the hook you\nwant to run. incoming and changegroup hooks are run when changesets are received, while  out‐\ngoing hooks are for changesets sent to another repository:\n\n[hooks]\n# one email for each incoming changeset\nincoming.notify = python:hgext.notify.hook\n# one email for all incoming changesets\nchangegroup.notify = python:hgext.notify.hook\n\n# one email for all outgoing changesets\noutgoing.notify = python:hgext.notify.hook\n\nThis  registers  the hooks. To enable notification, subscribers must be assigned to reposito‐\nries. The [usersubs] section maps multiple repositories to a given recipient. The  [reposubs]\nsection maps multiple recipients to a single repository:\n\n[usersubs]\n# key is subscriber email, value is a comma-separated list of repo patterns\nuser@host = pattern\n\n[reposubs]\n# key is repo pattern, value is a comma-separated list of subscriber emails\npattern = user@host\n\nA  pattern  is  a glob matching the absolute path to a repository, optionally combined with a\nrevset expression. A revset expression, if present, is separated from the glob by a hash. Ex‐\nample:\n\n[reposubs]\n*/widgets#branch(release) = qa-team@example.com\n\nThis sends to qa-team@example.com whenever a changeset on the release branch triggers a noti‐\nfication in any repository ending in widgets.\n\nIn order to place them under direct user management, [usersubs] and [reposubs]  sections  may\nbe placed in a separate hgrc file and incorporated by reference:\n\n[notify]\nconfig = /path/to/subscriptionsfile\n\nNotifications will not be sent until the notify.test value is set to False; see below.\n\nNotifications content can be tweaked with the following configuration entries:\n"
                },
                {
                    "name": "notify.test",
                    "content": "If True, print messages to stdout instead of sending them. Default: True.\n"
                },
                {
                    "name": "notify.sources",
                    "content": "Space-separated  list  of  change  sources.  Notifications  are  activated only when a\nchangeset's source is in this list. Sources may be:\n\nserve\n\nchangesets received via http or ssh\n\npull\n\nchangesets received via hg pull\n\nunbundle\n\nchangesets received via hg unbundle\n\npush\n\nchangesets sent or received via hg push\n\nbundle\n\nchangesets sent via hg unbundle\n\nDefault: serve.\n"
                },
                {
                    "name": "notify.strip",
                    "content": "Number of leading slashes to strip from url paths. By default, notifications reference\nrepositories with their absolute path. notify.strip lets you turn them  into  relative\npaths.  For example, notify.strip=3 will change /long/path/repository into repository.\nDefault: 0.\n"
                },
                {
                    "name": "notify.domain",
                    "content": "Default email domain for sender or recipients with no explicit  domain.   It  is  also\nused for the domain part of the Message-Id when using notify.messageidseed.\n"
                },
                {
                    "name": "notify.messageidseed",
                    "content": "Create  deterministic Message-Id headers for the mails based on the seed and the revi‐\nsion identifier of the first commit in the changeset.\n"
                },
                {
                    "name": "notify.style",
                    "content": "Style file to use when formatting emails.\n"
                },
                {
                    "name": "notify.template",
                    "content": "Template to use when formatting emails.\n"
                },
                {
                    "name": "notify.incoming",
                    "content": "Template to use when run as an incoming hook, overriding notify.template.\n"
                },
                {
                    "name": "notify.outgoing",
                    "content": "Template to use when run as an outgoing hook, overriding notify.template.\n"
                },
                {
                    "name": "notify.changegroup",
                    "content": "Template to use when running as a changegroup hook, overriding notify.template.\n"
                },
                {
                    "name": "notify.maxdiff",
                    "content": "Maximum number of diff lines to include in notification email. Set to 0 to disable the\ndiff, or -1 to include all of it. Default: 300.\n"
                },
                {
                    "name": "notify.maxdiffstat",
                    "content": "Maximum number of diffstat lines to include in notification email. Set to  -1  to  in‐\nclude all of it. Default: -1.\n"
                },
                {
                    "name": "notify.maxsubject",
                    "content": "Maximum number of characters in email's subject line. Default: 67.\n"
                },
                {
                    "name": "notify.diffstat",
                    "content": "Set to True to include a diffstat before diff content. Default: True.\n"
                },
                {
                    "name": "notify.showfunc",
                    "content": "If set, override diff.showfunc for the diff content. Default: None.\n"
                },
                {
                    "name": "notify.merge",
                    "content": "If True, send notifications for merge changesets. Default: True.\n"
                },
                {
                    "name": "notify.mbox",
                    "content": "If set, append mails to this mbox file instead of sending. Default: None.\n"
                },
                {
                    "name": "notify.fromauthor",
                    "content": "If set, use the committer of the first changeset in a changegroup for the \"From\" field\nof  the  notification mail. If not set, take the user from the pushing repo.  Default:\nFalse.\n"
                },
                {
                    "name": "notify.reply-to-predecessor (EXPERIMENTAL)",
                    "content": "If set and the changeset has a predecessor in the repository, try to thread the  noti‐\nfication  mail with the predecessor. This adds the \"In-Reply-To\" header to the notifi‐\ncation mail with a reference to the predecessor with  the  smallest  revision  number.\nMail threads can still be torn, especially when changesets are folded.\n\nThis option must  be used in combination with notify.messageidseed.\n\nIf set, the following entries will also be used to customize the notifications:\n"
                },
                {
                    "name": "email.from",
                    "content": "Email From address to use if none can be found in the generated email content.\n"
                },
                {
                    "name": "web.baseurl",
                    "content": "Root  repository URL to combine with repository paths when making references. See also\nnotify.strip.\n"
                },
                {
                    "name": "pager",
                    "content": "browse command output with an external pager (DEPRECATED)\n\nForcibly enable paging for individual commands that don't typically request  pagination  with\nthe attend-<command> option. This setting takes precedence over ignore options and defaults:\n\n[pager]\nattend-cat = false\n"
                },
                {
                    "name": "patchbomb",
                    "content": "command to send changesets as (a series of) patch emails\n\nThe series is started off with a \"[PATCH 0 of N]\" introduction, which describes the series as\na whole.\n\nEach  patch  email  has  a  Subject line of \"[PATCH M of N] ...\", using the first line of the\nchangeset description as the subject text. The message contains two or three body parts:\n\n• The changeset description.\n\n• [Optional] The result of running diffstat on the patch.\n\n• The patch itself, as generated by hg export.\n\nEach message refers to the first in the series using the In-Reply-To and References  headers,\nso they will show up as a sequence in threaded mail and news readers, and in mail archives.\n\nTo configure other defaults, add a section like this to your configuration file:\n\n[email]\nfrom = My Name <my@email>\nto = recipient1, recipient2, ...\ncc = cc1, cc2, ...\nbcc = bcc1, bcc2, ...\nreply-to = address1, address2, ...\n\nUse  [patchbomb] as configuration section name if you need to override global [email] address\nsettings.\n\nThen you can use the hg email command to mail a series of changesets as a patchbomb.\n\nYou can also either configure the method option in the email section to be a sendmail compat‐\nible mailer or fill out the [smtp] section so that the patchbomb extension can  automatically\nsend patchbombs directly from the commandline. See the [email] and [smtp] sections in hgrc(5)\nfor details.\n\nBy  default, hg email will prompt for a To or CC header if you do not supply one via configu‐\nration or the command line.  You can override this to never prompt by  configuring  an  empty\nvalue:\n\n[email]\ncc =\n\nYou  can  control  the  default inclusion of an introduction message with the patchbomb.intro\nconfiguration option. The configuration is always overwritten  by  command  line  flags  like\n--intro and --desc:\n\n[patchbomb]\nintro=auto   # include introduction message if more than 1 patch (default)\nintro=never  # never include an introduction message\nintro=always # always include an introduction message\n\nYou  can  specify  a  template  for flags to be added in subject prefixes. Flags specified by\n--flag option are exported as {flags} keyword:\n\n[patchbomb]\nflagtemplate = \"{separate(' ',\nifeq(branch, 'default', '', branch|upper),\nflags)}\"\n\nYou can set patchbomb to always ask for confirmation by setting patchbomb.confirm to true.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change import/export",
                    "content": ""
                },
                {
                    "name": "email",
                    "content": "send changesets by email:\n\nhg email [OPTION]... [DEST]...\n\nBy default, diffs are sent in the format generated by hg export, one per message. The  series\nstarts with a \"[PATCH 0 of N]\" introduction, which describes the series as a whole.\n\nEach  patch  email  has  a  Subject line of \"[PATCH M of N] ...\", using the first line of the\nchangeset description as the subject text.  The message contains two or three  parts.  First,\nthe changeset description.\n\nWith  the  -d/--diffstat  option, if the diffstat program is installed, the result of running\ndiffstat on the patch is inserted.\n\nFinally, the patch itself, as generated by hg export.\n\nWith the -d/--diffstat or --confirm options, you will be presented with a  final  summary  of\nall messages and asked for confirmation before the messages are sent.\n\nBy  default  the  patch  is  included as text in the email body for easy reviewing. Using the\n-a/--attach option will instead create an attachment for the patch. With -i/--inline  an  in‐\nline  attachment  will be created. You can include a patch both as text in the email body and\nas a regular or an inline attachment by combining the -a/--attach  or  -i/--inline  with  the\n--body option.\n\nWith -B/--bookmark changesets reachable by the given bookmark are selected.\n\nWith -o/--outgoing, emails will be generated for patches not found in the destination reposi‐\ntory (or only those which are ancestors of the specified revisions if any are provided)\n\nWith  -b/--bundle, changesets are selected as for --outgoing, but a single email containing a\nbinary Mercurial bundle as an attachment will be sent. Use  the  patchbomb.bundletype  config\noption to control the bundle type as with hg bundle --type.\n\nWith  -m/--mbox,  instead of previewing each patchbomb message in a pager or sending the mes‐\nsages directly, it will create a UNIX mailbox file with the patch emails. This  mailbox  file\ncan be previewed with any mail user agent which supports UNIX mbox files.\n\nWith  -n/--test,  all steps will run, but mail will not be sent.  You will be prompted for an\nemail recipient address, a subject and an introductory message describing the patches of your\npatchbomb.  Then when all is done, patchbomb messages are displayed.\n\nIn case email sending fails, you will find a backup of your series  introductory  message  in\n.hg/last-email.txt.\n\nThe  default  behavior  of this command can be customized through configuration. (See hg help\npatchbomb for details)\n\nExamples:\n\nhg email -r 3000          # send patch 3000 only\nhg email -r 3000 -r 3001  # send patches 3000 and 3001\nhg email -r 3000:3005     # send patches 3000 through 3005\nhg email 3000             # send patch 3000 (deprecated)\n\nhg email -o               # send all patches not in default\nhg email -o DEST          # send all patches not in DEST\nhg email -o -r 3000       # send all ancestors of 3000 not in default\nhg email -o -r 3000 DEST  # send all ancestors of 3000 not in DEST\n\nhg email -B feature       # send all ancestors of feature bookmark\n\nhg email -b               # send bundle of all patches not in default\nhg email -b DEST          # send bundle of all patches not in DEST\nhg email -b -r 3000       # bundle of all ancestors of 3000 not in default\nhg email -b -r 3000 DEST  # bundle of all ancestors of 3000 not in DEST\n\nhg email -o -m mbox &&    # generate an mbox file...\nmutt -R -f mbox         # ... and view it with mutt\nhg email -o -m mbox &&    # generate an mbox file ...\nformail -s sendmail \\   # ... and use formail to send from the mbox\n-bm -t < mbox         # ... using sendmail\n\nBefore using this command, you will need to enable email in your hgrc. See the  [email]  sec‐\ntion in hgrc(5) for details.\n\nOptions:\n"
                },
                {
                    "name": "-g, --git",
                    "content": "use git extended diff format\n",
                    "flag": "-g",
                    "long": "--git"
                },
                {
                    "name": "--plain",
                    "content": "omit hg patch header\n",
                    "long": "--plain"
                },
                {
                    "name": "-o, --outgoing",
                    "content": "send changes not found in the target repository\n",
                    "flag": "-o",
                    "long": "--outgoing"
                },
                {
                    "name": "-b, --bundle",
                    "content": "send changes not in target as a binary bundle\n",
                    "flag": "-b",
                    "long": "--bundle"
                },
                {
                    "name": "-B,_",
                    "content": "send changes only reachable by given bookmark\n\n--bundlename <NAME>\nname of the bundle attachment file (default: bundle)\n"
                },
                {
                    "name": "-r,_",
                    "content": "a revision to send\n"
                },
                {
                    "name": "--force",
                    "content": "run even when remote repository is unrelated (with -b/--bundle)\n\n--base <REV[+]>\na base changeset to specify instead of a destination (with -b/--bundle)\n",
                    "long": "--force"
                },
                {
                    "name": "--intro",
                    "content": "send an introduction email for a single patch\n\n--body send patches as inline message text (default)\n",
                    "long": "--intro"
                },
                {
                    "name": "-a, --attach",
                    "content": "send patches as attachments\n",
                    "flag": "-a",
                    "long": "--attach"
                },
                {
                    "name": "-i, --inline",
                    "content": "send patches as inline attachments\n\n--bcc <EMAIL[+]>\nemail addresses of blind carbon copy recipients\n",
                    "flag": "-i",
                    "long": "--inline"
                },
                {
                    "name": "-c,_",
                    "content": "email addresses of copy recipients\n"
                },
                {
                    "name": "--confirm",
                    "content": "ask for confirmation before sending\n",
                    "long": "--confirm"
                },
                {
                    "name": "-d, --diffstat",
                    "content": "add diffstat output to messages\n\n--date <DATE>\nuse the given date as the sending date\n\n--desc <FILE>\nuse the given file as the series description\n",
                    "flag": "-d",
                    "long": "--diffstat"
                },
                {
                    "name": "-f,_",
                    "content": "email address of sender\n"
                },
                {
                    "name": "-n, --test",
                    "content": "print messages that would be sent\n",
                    "flag": "-n",
                    "long": "--test"
                },
                {
                    "name": "-m,_",
                    "content": "write messages to mbox file instead of sending them\n\n--reply-to <EMAIL[+]>\nemail addresses replies should be sent to\n"
                },
                {
                    "name": "-s,_",
                    "content": "subject of first message (intro or single patch)\n\n--in-reply-to <MSGID>\nmessage identifier to reply to\n\n--flag <FLAG[+]>\nflags to add in subject prefixes\n"
                },
                {
                    "name": "-t,_",
                    "content": "email addresses of recipients\n"
                },
                {
                    "name": "-e,_",
                    "content": "specify ssh command to use\n\n--remotecmd <CMD>\nspecify hg command to run on the remote side\n"
                },
                {
                    "name": "--insecure",
                    "content": "do not verify server certificate (ignoring web.cacerts config)\n\n[+] marked option can be specified multiple times\n",
                    "long": "--insecure"
                },
                {
                    "name": "phabricator",
                    "content": "simple Phabricator integration (EXPERIMENTAL)\n\nThis  extension provides a phabsend command which sends a stack of changesets to Phabricator,\nand a phabread command which prints a stack of revisions in a format suitable for hg  import,\nand a phabupdate command to update statuses in batch.\n\nA \"phabstatus\" view for hg show is also provided; it displays status information of Phabrica‐\ntor differentials associated with unfinished changesets.\n\nBy  default,  Phabricator  requires  Test  Plan which might prevent some changeset from being\nsent. The requirement could be disabled by changing differential.require-test-plan-field con‐\nfig server side.\n\nConfig:\n\n[phabricator]\n# Phabricator URL\nurl = https://phab.example.com/\n\n# Repo callsign. If a repo has a URL https://$HOST/diffusion/FOO, then its\n# callsign is \"FOO\".\ncallsign = FOO\n\n# curl command to use. If not set (default), use builtin HTTP library to\n# communicate. If set, use the specified curl command. This could be useful\n# if you need to specify advanced options that is not easily supported by\n# the internal library.\ncurlcmd = curl --connect-timeout 2 --retry 3 --silent\n\n# retry failed command N time (default 0). Useful when using the extension\n# over flakly connection.\n#\n# We wait `retry.interval` between each retry, in seconds.\n# (default 1 second).\nretry = 3\nretry.interval = 10\n\n# the retry option can combine well with the http.timeout one.\n#\n# For example to give up on http request after 20 seconds:\n[http]\ntimeout=20\n\n[auth]\nexample.schemes = https\nexample.prefix = phab.example.com\n\n# API token. Get it from https://$HOST/conduit/login/\nexample.phabtoken = cli-xxxxxxxxxxxxxxxxxxxxxxxxxxxx\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change import/export",
                    "content": ""
                },
                {
                    "name": "phabimport",
                    "content": "import patches from Phabricator for the specified Differential Revisions:\n\nhg phabimport DREVSPEC... [OPTIONS]\n\nThe patches are read and applied starting at the parent of the working directory.\n\nSee hg help phabread for how to specify DREVSPEC.\n\nOptions:\n"
                },
                {
                    "name": "--stack",
                    "content": "import dependencies as well\n\n--test-vcr <VALUE>\nPath to a vcr file. If nonexistent, will record a new vcr transcript,  otherwise  will\nmock all http requests using the specified vcr file. (ADVANCED)\n",
                    "long": "--stack"
                },
                {
                    "name": "phabread",
                    "content": "print patches from Phabricator suitable for importing:\n\nhg phabread DREVSPEC... [OPTIONS]\n\nDREVSPEC  could  be  a  Differential Revision identity, like D123, or just the number 123. It\ncould also have common operators like +, -, &, (, ) for complex queries. Prefix  :  could  be\nused  to  select  a stack.  If multiple DREVSPEC values are given, the result is the union of\neach individually evaluated value.  No attempt is currently made to reorder the values to run\nfrom parent to child.\n\nabandoned, accepted, closed, needsreview, needsrevision could be used to  filter  patches  by\nstatus.  For  performance  reason,  they only represent a subset of non-status selections and\ncannot be used alone.\n\nFor example, :D6+8-(2+D4) selects a stack up to D6, plus D8 and exclude  D2  and  D4.  :D9  &\nneedsreview selects \"Needs Review\" revisions in a stack up to D9.\n\nIf  --stack is given, follow dependencies information and read all patches.  It is equivalent\nto the : operator.\n\nOptions:\n"
                },
                {
                    "name": "--stack",
                    "content": "read dependencies\n\n--test-vcr <VALUE>\nPath to a vcr file. If nonexistent, will record a new vcr transcript,  otherwise  will\nmock all http requests using the specified vcr file. (ADVANCED)\n",
                    "long": "--stack"
                },
                {
                    "name": "phabsend",
                    "content": "upload changesets to Phabricator:\n\nhg phabsend REV [OPTIONS]\n\nIf  there are multiple revisions specified, they will be send as a stack with a linear depen‐\ndencies relationship using the order specified by the revset.\n\nFor the first time uploading changesets, local tags will be created to maintain the  associa‐\ntion.  After the first time, phabsend will check obsstore and tags information so it can fig‐\nure out whether to update an existing Differential Revision, or create a new one.\n\nIf --amend is set, update commit messages so they have the Differential Revision URL,  remove\nrelated  tags.  This  is similar to what arcanist will do, and is more desired in author-push\nworkflows. Otherwise, use local tags to record the Differential Revision association.\n\nThe --confirm option lets you confirm changesets before sending them. You can also  add  fol‐\nlowing to your configuration file to make it default behaviour:\n\n[phabsend]\nconfirm = true\n\nBy default, a separate review will be created for each commit that is selected, and will have\nthe  same  parent/child  relationship in Phabricator.  If --fold is set, multiple commits are\nrolled up into a single review as if diffed from the parent of  the  first  revision  to  the\nlast.  The commit messages are concatenated in the summary field on Phabricator.\n\nphabsend  will check obsstore and the above association to decide whether to update an exist‐\ning Differential Revision, or create a new one.\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "revisions to send\n"
                },
                {
                    "name": "--amend",
                    "content": "update commit messages (default: True)\n\n--reviewer <VALUE[+]>\nspecify reviewers\n\n--blocker <VALUE[+]>\nspecify blocking reviewers\n",
                    "long": "--amend"
                },
                {
                    "name": "-m,_",
                    "content": "add a comment to Revisions with new/updated Diffs\n"
                },
                {
                    "name": "--confirm",
                    "content": "ask for confirmation before sending\n\n--fold combine the revisions into one review\n\n--test-vcr <VALUE>\nPath to a vcr file. If nonexistent, will record a new vcr transcript,  otherwise  will\nmock all http requests using the specified vcr file. (ADVANCED)\n\n[+] marked option can be specified multiple times\n",
                    "long": "--confirm"
                },
                {
                    "name": "phabupdate",
                    "content": "update Differential Revision in batch:\n\nhg phabupdate [DREVSPEC...| -r REV...] [OPTIONS]\n\nDREVSPEC selects revisions. See hg help phabread for its usage.\n\nOptions:\n"
                },
                {
                    "name": "--accept",
                    "content": "accept revisions\n",
                    "long": "--accept"
                },
                {
                    "name": "--reject",
                    "content": "reject revisions\n",
                    "long": "--reject"
                },
                {
                    "name": "--request-review",
                    "content": "request review on revisions\n",
                    "long": "--request-review"
                },
                {
                    "name": "--abandon",
                    "content": "abandon revisions\n",
                    "long": "--abandon"
                },
                {
                    "name": "--reclaim",
                    "content": "reclaim revisions\n",
                    "long": "--reclaim"
                },
                {
                    "name": "--close",
                    "content": "close revisions\n",
                    "long": "--close"
                },
                {
                    "name": "--reopen",
                    "content": "reopen revisions\n",
                    "long": "--reopen"
                },
                {
                    "name": "--plan-changes",
                    "content": "plan changes for revisions\n",
                    "long": "--plan-changes"
                },
                {
                    "name": "--resign",
                    "content": "resign as a reviewer from revisions\n",
                    "long": "--resign"
                },
                {
                    "name": "--commandeer",
                    "content": "commandeer revisions\n",
                    "long": "--commandeer"
                },
                {
                    "name": "-m,_",
                    "content": "comment on the last revision\n"
                },
                {
                    "name": "-r,_",
                    "content": "local revision to update\n\n--test-vcr <VALUE>\nPath  to  a vcr file. If nonexistent, will record a new vcr transcript, otherwise will\nmock all http requests using the specified vcr file. (ADVANCED)\n"
                },
                {
                    "name": "Uncategorized commands",
                    "content": ""
                },
                {
                    "name": "purge",
                    "content": "command to delete untracked files from the working directory (DEPRECATED)\n\nThe functionality of this extension has been included in core Mercurial  since  version  5.7.\nPlease  use hg purge ... instead. hg purge --confirm is now the default, unless the extension\nis enabled for backward compatibility.\n"
                },
                {
                    "name": "rebase",
                    "content": "command to move sets of revisions to a different ancestor\n\nThis extension lets you rebase changesets in an existing Mercurial repository.\n\nFor more information: https://mercurial-scm.org/wiki/RebaseExtension\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change manipulation",
                    "content": ""
                },
                {
                    "name": "rebase",
                    "content": "move changeset (and descendants) to a different branch:\n\nhg rebase [[-s REV]... | [-b REV]... | [-r REV]...] [-d REV] [OPTION]...\n\nRebase uses repeated merging to graft changesets from one part of history (the  source)  onto\nanother  (the  destination).  This  can be useful for linearizing local changes relative to a\nmaster development tree.\n\nPublished commits cannot be rebased (see hg help phases).  To copy commits, see hg help graft\n.\n\nIf you don't specify a destination changeset (-d/--dest), rebase will use the same  logic  as\nhg  merge to  pick a destination.  if the current branch contains exactly one other head, the\nother head is merged with by default.  Otherwise, an explicit revision with  which  to  merge\nwith  must  be provided.  (destination changeset is not modified by rebasing, but new change‐\nsets are added as its descendants.)\n\nHere are the ways to select changesets:\n\n1. Explicitly select them using --rev.\n\n2. Use --source to select a root changeset and include all of its descendants.\n\n3. Use --base to select a changeset; rebase will  find  ancestors  and  their  descendants\nwhich are not also ancestors of the destination.\n\n4. If  you  do  not specify any of --rev, --source, or --base, rebase will use --base . as\nabove.\n\nIf --source or --rev is used, special names SRC and ALLSRC can be used in --dest. Destination\nwould be calculated per source revision with SRC substituted by that single  source  revision\nand ALLSRC substituted by all source revisions.\n\nRebase  will destroy original changesets unless you use --keep.  It will also move your book‐\nmarks (even if you do).\n\nSome changesets may be dropped if they do not contribute changes (e.g. merges from the desti‐\nnation branch).\n\nUnlike merge, rebase will do nothing if you are at the branch tip of a named branch with  two\nheads. You will need to explicitly specify source and/or destination.\n\nIf  you  need  to  use  a tool to automate merge/conflict decisions, you can specify one with\n--tool, see hg help merge-tools.  As a caveat: the tool will not be used to  mediate  when  a\nfile was deleted, there is no hook presently available for this.\n\nIf  a  rebase  is interrupted to manually resolve a conflict, it can be continued with --con‐\ntinue/-c, aborted with --abort/-a, or stopped with --stop.\n\nExamples:\n\n• move \"local changes\" (current commit back to branching point) to the current branch tip af‐\nter a pull:\n\nhg rebase\n\n• move a single changeset to the stable branch:\n\nhg rebase -r 5f493448 -d stable\n\n• splice a commit and all its descendants onto another part of history:\n\nhg rebase --source c0c3 --dest 4cf9\n\n• rebase everything on a branch marked by a bookmark onto the default branch:\n\nhg rebase --base myfeature --dest default\n\n• collapse a sequence of changes into a single commit:\n\nhg rebase --collapse -r 1520:1525 -d .\n\n• move a named branch while preserving its name:\n\nhg rebase -r \"branch(featureX)\" -d 1.3 --keepbranches\n\n• stabilize orphaned changesets so history looks linear:\n\nhg rebase -r 'orphan()-obsolete()' -d 'first(max((successors(max(roots(ALLSRC) & ::SRC)^)-obsolete())::) + max(::((roots(ALLSRC) & ::SRC)^)-obsolete()))'\n\nConfiguration Options:\n\nYou can make rebase require a destination if you set the following config option:\n\n[commands]\nrebase.requiredest = True\n\nBy default, rebase will close the transaction after each commit.  For  performance  purposes,\nyou  can configure rebase to use a single transaction across the entire rebase. WARNING: This\nsetting introduces a significant risk of losing the work you've done in a rebase if  the  re‐\nbase aborts unexpectedly:\n\n[rebase]\nsingletransaction = True\n\nBy  default, rebase writes to the working copy, but you can configure it to run in-memory for\nbetter performance. When the rebase is not moving the parent(s) of the working copy (AKA  the\n\"currently  checked  out changesets\"), this may also allow it to run even if the working copy\nis dirty:\n\n[rebase]\nexperimental.inmemory = True\n\nReturn Values:\n\nReturns 0 on success, 1 if nothing to rebase or there are unresolved conflicts.\n\nOptions:\n"
                },
                {
                    "name": "-s,_",
                    "content": "rebase the specified changesets and their descendants\n"
                },
                {
                    "name": "-b,_",
                    "content": "rebase everything from branching point of specified changeset\n"
                },
                {
                    "name": "-r,_",
                    "content": "rebase these revisions\n"
                },
                {
                    "name": "-d,_",
                    "content": "rebase onto the specified changeset\n"
                },
                {
                    "name": "--collapse",
                    "content": "collapse the rebased changesets\n",
                    "long": "--collapse"
                },
                {
                    "name": "-m,_",
                    "content": "use text as collapse commit message\n"
                },
                {
                    "name": "-e, --edit",
                    "content": "invoke editor on commit messages\n",
                    "flag": "-e",
                    "long": "--edit"
                },
                {
                    "name": "-l,_",
                    "content": "read collapse commit message from file\n"
                },
                {
                    "name": "-k, --keep",
                    "content": "keep original changesets\n",
                    "flag": "-k",
                    "long": "--keep"
                },
                {
                    "name": "--keepbranches",
                    "content": "keep original branch names\n",
                    "long": "--keepbranches"
                },
                {
                    "name": "-D, --detach",
                    "content": "(DEPRECATED)\n",
                    "flag": "-D",
                    "long": "--detach"
                },
                {
                    "name": "-i, --interactive",
                    "content": "(DEPRECATED)\n",
                    "flag": "-i",
                    "long": "--interactive"
                },
                {
                    "name": "-t,_",
                    "content": "specify merge tool\n\n--stop stop interrupted rebase\n"
                },
                {
                    "name": "-c, --continue",
                    "content": "continue an interrupted rebase\n",
                    "flag": "-c",
                    "long": "--continue"
                },
                {
                    "name": "-a, --abort",
                    "content": "abort an interrupted rebase\n\n--auto-orphans <VALUE>\nautomatically rebase orphan revisions in the specified revset (EXPERIMENTAL)\n",
                    "flag": "-a",
                    "long": "--abort"
                },
                {
                    "name": "-n, --dry-run",
                    "content": "do not perform actions, just print output\n",
                    "flag": "-n",
                    "long": "--dry-run"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "--confirm",
                    "content": "ask before applying actions\n\n[+] marked option can be specified multiple times\n",
                    "long": "--confirm"
                },
                {
                    "name": "record",
                    "content": "commands to interactively select changes for commit/qrefresh (DEPRECATED)\n\nThe feature provided by this extension has been moved into core Mercurial as hg commit  --in‐\nteractive.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change creation",
                    "content": ""
                },
                {
                    "name": "qrecord",
                    "content": "interactively record a new patch:\n\nhg qrecord [OPTION]... PATCH [FILE]...\n\nSee hg help qnew & hg help record for more information and usage.\n"
                },
                {
                    "name": "record",
                    "content": "interactively select changes to commit:\n\nhg record [OPTION]... [FILE]...\n\nIf  a  list  of  files  is  omitted, all changes reported by hg status will be candidates for\nrecording.\n\nSee hg help dates for a list of formats valid for -d/--date.\n\nIf using the text interface (see hg help config), you will be prompted for whether to  record\nchanges  to  each modified file, and for files with multiple changes, for each change to use.\nFor each query, the following responses are possible:\n\ny - record this change\nn - skip this change\ne - edit this change manually\n\ns - skip remaining changes to this file\nf - record remaining changes to this file\n\nd - done, skip remaining changes and files\na - record all changes to all remaining files\nq - quit, recording no changes\n\n? - display help\n\nThis command is not available when committing a merge.\n\nOptions:\n"
                },
                {
                    "name": "-A, --addremove",
                    "content": "mark new/missing files as added/removed before committing\n",
                    "flag": "-A",
                    "long": "--addremove"
                },
                {
                    "name": "--close-branch",
                    "content": "mark a branch head as closed\n",
                    "long": "--close-branch"
                },
                {
                    "name": "--amend",
                    "content": "amend the parent of the working directory\n",
                    "long": "--amend"
                },
                {
                    "name": "-s, --secret",
                    "content": "use the secret phase for committing\n",
                    "flag": "-s",
                    "long": "--secret"
                },
                {
                    "name": "--draft",
                    "content": "use the draft phase for committing\n",
                    "long": "--draft"
                },
                {
                    "name": "-e, --edit",
                    "content": "invoke editor on commit messages\n",
                    "flag": "-e",
                    "long": "--edit"
                },
                {
                    "name": "--force-close-branch",
                    "content": "forcibly close branch from a non-head changeset (ADVANCED)\n",
                    "long": "--force-close-branch"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-m,_",
                    "content": "use text as commit message\n"
                },
                {
                    "name": "-l,_",
                    "content": "read commit message from file\n"
                },
                {
                    "name": "-d,_",
                    "content": "record the specified date as commit date\n"
                },
                {
                    "name": "-u,_",
                    "content": "record the specified user as committer\n"
                },
                {
                    "name": "-S, --subrepos",
                    "content": "recurse into subrepositories\n",
                    "flag": "-S",
                    "long": "--subrepos"
                },
                {
                    "name": "-w, --ignore-all-space",
                    "content": "ignore white space when comparing lines\n",
                    "flag": "-w",
                    "long": "--ignore-all-space"
                },
                {
                    "name": "-b, --ignore-space-change",
                    "content": "ignore changes in the amount of white space\n",
                    "flag": "-b",
                    "long": "--ignore-space-change"
                },
                {
                    "name": "-B, --ignore-blank-lines",
                    "content": "ignore changes whose lines are all blank\n",
                    "flag": "-B",
                    "long": "--ignore-blank-lines"
                },
                {
                    "name": "-Z, --ignore-space-at-eol",
                    "content": "ignore changes in whitespace at EOL\n\n[+] marked option can be specified multiple times\n",
                    "flag": "-Z",
                    "long": "--ignore-space-at-eol"
                },
                {
                    "name": "releasenotes",
                    "content": "generate release notes from commit messages (EXPERIMENTAL)\n\nIt is common to maintain files detailing changes in a project between  releases.  Maintaining\nthese  files  can  be  difficult and time consuming.  The hg releasenotes command provided by\nthis extension makes the process simpler by automating it.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change navigation",
                    "content": ""
                },
                {
                    "name": "releasenotes",
                    "content": "parse release notes from commit messages into an output file:\n\nhg releasenotes [-r REV] [-c] FILE\n\nGiven an output file and set of revisions, this command will parse commit  messages  for  re‐\nlease notes then add them to the output file.\n\nRelease  notes  are defined in commit messages as ReStructuredText directives. These have the\nform:\n\n.. directive:: title\n\ncontent\n\nEach directive maps to an output section in a generated release notes file, which  itself  is\nReStructuredText.  For  example,  the .. feature:: directive would map to a New Features sec‐\ntion.\n\nRelease note directives can be either short-form or long-form. In short- form, title is omit‐\nted and the release note is rendered as a bullet list. In long form, a sub-section  with  the\ntitle title is added to the section.\n\nThe  FILE argument controls the output file to write gathered release notes to. The format of\nthe file is:\n\nSection 1\n=========\n\n...\n\nSection 2\n=========\n\n...\n\nOnly sections with defined release notes are emitted.\n\nIf a section only has short-form notes, it will consist of bullet list:\n\nSection\n=======\n\n* Release note 1\n* Release note 2\n\nIf a section has long-form notes, sub-sections will be emitted:\n\nSection\n=======\n\nNote 1 Title\n------------\n\nDescription of the first long-form note.\n\nNote 2 Title\n------------\n\nDescription of the second long-form note.\n\nIf the FILE argument points to an existing file, that file will be parsed for  release  notes\nhaving  the format that would be generated by this command. The notes from the processed com‐\nmit messages will be merged into this parsed set.\n\nDuring release notes merging:\n\n• Duplicate items are automatically ignored\n\n• Items that are different are automatically ignored if the  similarity  is  greater  than  a\nthreshold.\n\nThis  means  that  the  release notes file can be updated independently from this command and\nchanges should not be lost when running this command on that file. A particular use case  for\nthis  is  to tweak the wording of a release note after it has been added to the release notes\nfile.\n\nThe -c/--check option checks the commit message for invalid admonitions.\n\nThe -l/--list option, presents the user with a list of existing available  admonitions  along\nwith their title. This also includes the custom admonitions (if any).\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "revisions to process for release notes\n"
                },
                {
                    "name": "-c, --check",
                    "content": "checks for validity of admonitions (if any)\n",
                    "flag": "-c",
                    "long": "--check"
                },
                {
                    "name": "-l, --list",
                    "content": "list the available admonitions with their title\n",
                    "flag": "-l",
                    "long": "--list"
                },
                {
                    "name": "Uncategorized commands",
                    "content": ""
                },
                {
                    "name": "relink",
                    "content": "recreates hardlinks between repository clones\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Repository maintenance",
                    "content": ""
                },
                {
                    "name": "relink",
                    "content": "recreate hardlinks between two repositories:\n\nhg relink [ORIGIN]\n\nWhen  repositories  are cloned locally, their data files will be hardlinked so that they only\nuse the space of a single repository.\n\nUnfortunately, subsequent pulls into either repository will break  hardlinks  for  any  files\ntouched by the new changesets, even if both repositories end up pulling the same changes.\n\nSimilarly, passing --rev to \"hg clone\" will fail to use any hardlinks, falling back to a com‐\nplete copy of the source repository.\n\nThis command lets you recreate those hardlinks and reclaim that wasted space.\n\nThis  repository will be relinked to share space with ORIGIN, which must be on the same local\ndisk. If ORIGIN is omitted, looks for \"default-relink\", then \"default\", in [paths].\n\nDo not attempt any read operations on this repository while the  command  is  running.  (Both\nrepositories will be locked against writes.)\n"
                },
                {
                    "name": "remotefilelog",
                    "content": "remotefilelog causes Mercurial to lazilly fetch file contents (EXPERIMENTAL)\n\nThis  extension is HIGHLY EXPERIMENTAL. There are NO BACKWARDS COMPATIBILITY GUARANTEES. This\nmeans that repositories created with this extension may only be usable with the exact version\nof this extension/Mercurial that was used. The extension attempts to enforce this in order to\nprevent repository corruption.\n\nremotefilelog works by fetching file contents lazily and storing  them  in  a  cache  on  the\nclient  rather  than  in  revlogs. This allows enormous histories to be transferred only par‐\ntially, making them easier to operate on.\n\nConfigs:\n\npacks.maxchainlen specifies the maximum delta chain length in pack files\n\npacks.maxpacksize specifies the maximum pack file size\n\npacks.maxpackfilecount specifies the maximum number of packs in the\n\nshared cache (trees only for now)\n\nremotefilelog.backgroundprefetch runs prefetch in background when True\n\nremotefilelog.bgprefetchrevs specifies revisions to fetch on commit and\n\nupdate, and on other commands that use them. Different from pullprefetch.\n\nremotefilelog.gcrepack does garbage collection during repack when True\n\nremotefilelog.nodettl specifies maximum TTL of a node in seconds before\n\nit is garbage collected\n\nremotefilelog.repackonhggc runs repack on hg gc when True\n\nremotefilelog.prefetchdays specifies the maximum age of a commit in\n\ndays after which it is no longer prefetched.\n\nremotefilelog.prefetchdelay specifies delay between background\n\nprefetches in seconds after operations that change the working copy parent\n\nremotefilelog.data.gencountlimit constraints the minimum number of data\n\npack files required to be considered part of a generation. In  particular,  minimum\nnumber of packs files > gencountlimit.\n\nremotefilelog.data.generations list for specifying the lower bound of\n\neach  generation  of  the  data  pack  files.  For example, list ['100MB','1MB'] or\n['1MB', '100MB'] will lead to three  generations:  [0,  1MB),  [  1MB,  100MB)  and\n[100MB, infinity).\n\nremotefilelog.data.maxrepackpacks the maximum number of pack files to\n\ninclude in an incremental data repack.\n\nremotefilelog.data.repackmaxpacksize the maximum size of a pack file for\n\nit to be considered for an incremental data repack.\n\nremotefilelog.data.repacksizelimit the maximum total size of pack files\n\nto include in an incremental data repack.\n\nremotefilelog.history.gencountlimit constraints the minimum number of\n\nhistory  pack  files required to be considered part of a generation. In particular,\nminimum number of packs files > gencountlimit.\n\nremotefilelog.history.generations list for specifying the lower bound of\n\neach generation of the history pack files. For example, list [ '100MB',  '1MB']  or\n['1MB',  '100MB']  will  lead  to  three  generations:  [ 0, 1MB), [1MB, 100MB) and\n[100MB, infinity).\n\nremotefilelog.history.maxrepackpacks the maximum number of pack files to\n\ninclude in an incremental history repack.\n\nremotefilelog.history.repackmaxpacksize the maximum size of a pack file\n\nfor it to be considered for an incremental history repack.\n\nremotefilelog.history.repacksizelimit the maximum total size of pack\n\nfiles to include in an incremental history repack.\n\nremotefilelog.backgroundrepack automatically consolidate packs in the\n\nbackground\n\nremotefilelog.cachepath path to cache\n\nremotefilelog.cachegroup if set, make cache directory sgid to this\n\ngroup\n\nremotefilelog.cacheprocess binary to invoke for fetching file data\n\nremotefilelog.debug turn on remotefilelog-specific debug output\n\nremotefilelog.excludepattern pattern of files to exclude from pulls\n\nremotefilelog.includepattern pattern of files to include in pulls\n\nremotefilelog.fetchwarning: message to print when too many\n\nsingle-file fetches occur\n\nremotefilelog.getfilesstep number of files to request in a single RPC\n\nremotefilelog.getfilestype if set to 'threaded' use threads to fetch\n\nfiles, otherwise use optimistic fetching\n\nremotefilelog.pullprefetch revset for selecting files that should be\n\neagerly downloaded rather than lazily\n\nremotefilelog.reponame name of the repo. If set, used to partition\n\ndata from other repos in a shared store.\n\nremotefilelog.server if true, enable server-side functionality\n\nremotefilelog.servercachepath path for caching blobs on the server\n\nremotefilelog.serverexpiration number of days to keep cached server\n\nblobs\n\nremotefilelog.validatecache if set, check cache entries for corruption\n\nbefore returning blobs\n\nremotefilelog.validatecachelog if set, check cache entries for\n\ncorruption before returning metadata\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Repository maintenance",
                    "content": ""
                },
                {
                    "name": "prefetch",
                    "content": "prefetch file revisions from the server:\n\nhg prefetch [OPTIONS] [FILE...]\n\nPrefetchs file revisions for the specified revs and stores them in  the  local  remotefilelog\ncache.   If  no  rev  is specified, the default rev is used which is the union of dot, draft,\npullprefetch and bgprefetchrev.  File names or patterns can be used to limit which files  are\ndownloaded.\n\nReturn 0 on success.\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "prefetch the specified revisions\n"
                },
                {
                    "name": "--repack",
                    "content": "run repack after prefetch\n",
                    "long": "--repack"
                },
                {
                    "name": "-b,_",
                    "content": "rev that is assumed to already be local\n"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n\n[+] marked option can be specified multiple times\n"
                },
                {
                    "name": "Uncategorized commands",
                    "content": "gc\ngarbage collect the client and server filelog caches:\n\nhg gc [REPO...]\n\ngarbage collect the client and server filelog caches\n"
                },
                {
                    "name": "repack",
                    "content": "hg repack [OPTIONS]\n\nOptions:\n"
                },
                {
                    "name": "--background",
                    "content": "run in a background process\n",
                    "long": "--background"
                },
                {
                    "name": "--incremental",
                    "content": "do an incremental repack\n",
                    "long": "--incremental"
                },
                {
                    "name": "--packsonly",
                    "content": "only repack packs (skip loose objects)\n",
                    "long": "--packsonly"
                },
                {
                    "name": "verifyremotefilelog",
                    "content": "hg verifyremotefilelogs <directory>\n\nOptions:\n"
                },
                {
                    "name": "-d, --decompress",
                    "content": "decompress the filelogs first\n",
                    "flag": "-d",
                    "long": "--decompress"
                },
                {
                    "name": "remotenames",
                    "content": "showing remotebookmarks and remotebranches in UI (EXPERIMENTAL)\n\nBy  default both remotebookmarks and remotebranches are turned on. Config knob to control the\nindividually are as follows.\n\nConfig options to tweak the default behaviour:\n"
                },
                {
                    "name": "remotenames.bookmarks",
                    "content": "Boolean value to enable or disable showing of remotebookmarks (default: True)\n"
                },
                {
                    "name": "remotenames.branches",
                    "content": "Boolean value to enable or disable showing of remotebranches (default: True)\n"
                },
                {
                    "name": "remotenames.hoistedpeer",
                    "content": "Name of the peer whose remotebookmarks should be hoisted into the top-level  namespace\n(default: 'default')\n"
                },
                {
                    "name": "schemes",
                    "content": "extend schemes with shortcuts to repository swarms\n\nThis  extension allows you to specify shortcuts for parent URLs with a lot of repositories to\nact like a scheme, for example:\n\n[schemes]\npy = http://code.python.org/hg/\n\nAfter that you can use it like:\n\nhg clone py://trunk/\n\nAdditionally there is support for some more complex schemas, for example used by Google Code:\n\n[schemes]\ngcode = http://{1}.googlecode.com/hg/\n\nThe syntax is taken from Mercurial templates, and you have  unlimited  number  of  variables,\nstarting  with  {1} and continuing with {2}, {3} and so on. This variables will receive parts\nof URL supplied, split by /. Anything not specified as {part} will be  just  appended  to  an\nURL.\n\nFor convenience, the extension adds these schemes by default:\n\n[schemes]\npy = http://hg.python.org/\nbb = https://bitbucket.org/\nbb+ssh = ssh://hg@bitbucket.org/\ngcode = https://{1}.googlecode.com/hg/\nkiln = https://{1}.kilnhg.com/Repo/\n\nYou can override a predefined scheme by defining a new scheme with the same name.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Uncategorized commands",
                    "content": ""
                },
                {
                    "name": "share",
                    "content": "share a common history between several working directories\n\nThe share extension introduces a new command hg share to create a new working directory. This\nis similar to hg clone, but doesn't involve copying or linking the storage of the repository.\nThis  allows working on different branches or changes in parallel without the associated cost\nin terms of disk space.\n\nNote: destructive operations or extensions like hg rollback should be used with care as  they\ncan result in confusing problems.\n"
                },
                {
                    "name": "Automatic Pooled Storage for Clones",
                    "content": "When this extension is active, hg clone can be configured to automatically share/pool storage\nacross  multiple clones. This mode effectively converts hg clone to hg clone + hg share.  The\nbenefit of using this mode is the automatic management of store paths and intelligent pooling\nof related repositories.\n\nThe following share. config options influence this feature:\n"
                },
                {
                    "name": "share.pool",
                    "content": "Filesystem path where shared repository data will be stored. When  defined,  hg  clone\nwill  automatically  use  shared repository storage instead of creating a store inside\neach clone.\n"
                },
                {
                    "name": "share.poolnaming",
                    "content": "How directory names in share.pool are constructed.\n\n\"identity\" means the name is derived from the first changeset in  the  repository.  In\nthis  mode, different remotes share storage if their root/initial changeset is identi‐\ncal. In this mode, the local shared repository is an aggregate of all encountered  re‐\nmote repositories.\n\n\"remote\"  means  the name is derived from the source repository's path or URL. In this\nmode, storage is only shared if the path or URL  requested  in  the  hg  clone command\nmatches exactly to a repository that was cloned before.\n\nThe default naming mode is \"identity\".\n\nSharing requirements and configs of source repository with shares:\n\nBy  default  creating  a shared repository only enables sharing a common history and does not\nshare requirements and configs between them. This may lead to problems in some cases, for ex‐\nample when you upgrade the storage format from one repository but does not set  related  con‐\nfigs in the shares.\n\nSetting  format.exp-share-safe = True enables sharing configs and requirements. This only ap‐\nplies to shares which are done after enabling the config option.\n\nFor enabling this in existing shares, enable the config option and reshare.\n\nFor resharing existing shares, make sure your working directory is clean and there are no un‐\ntracked files, delete that share and create a new share.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Repository creation",
                    "content": ""
                },
                {
                    "name": "share",
                    "content": "create a new shared repository:\n\nhg share [-U] [-B] SOURCE [DEST]\n\nInitialize a new repository and working directory that shares  its  history  (and  optionally\nbookmarks) with another repository.\n\nNote   using  rollback or extensions that destroy/modify history (mq, rebase, etc.) can cause\nconsiderable confusion with shared clones. In particular, if  two  shared  clones  are\nboth updated to the same changeset, and one of them destroys that changeset with roll‐\nback,  the  other  clone  will  suddenly  stop  working: all operations will fail with\n\"abort: working directory has unknown parent\". The only known workaround is to use de‐\nbugsetparents on the broken clone to reset it to a changeset that still exists.\n\nOptions:\n"
                },
                {
                    "name": "-U, --noupdate",
                    "content": "do not create a working directory\n",
                    "flag": "-U",
                    "long": "--noupdate"
                },
                {
                    "name": "-B, --bookmarks",
                    "content": "also share bookmarks\n",
                    "flag": "-B",
                    "long": "--bookmarks"
                },
                {
                    "name": "--relative",
                    "content": "point to source using a relative path\n",
                    "long": "--relative"
                },
                {
                    "name": "Repository maintenance",
                    "content": ""
                },
                {
                    "name": "unshare",
                    "content": "convert a shared repository to a normal one:\n\nhg unshare\n\nCopy the store data to the repo and remove the sharedpath data.\n"
                },
                {
                    "name": "show",
                    "content": "unified command to show various repository information (EXPERIMENTAL)\n\nThis extension provides the hg show command, which provides a central command for  displaying\ncommonly-accessed repository data and views of that data.\n\nThe following config options can influence operation.\n"
                },
                {
                    "name": "commands",
                    "content": ""
                },
                {
                    "name": "show.aliasprefix",
                    "content": "List of strings that will register aliases for views. e.g. s will effectively set con‐\nfig  options alias.s<view> = show <view> for all views. i.e. hg swork would execute hg\nshow work.\n\nAliases that would conflict with existing registrations will not be performed.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change navigation",
                    "content": ""
                },
                {
                    "name": "show",
                    "content": "show various repository information:\n\nhg show VIEW\n\nA requested view of repository data is displayed.\n\nIf no view is requested, the list of available views is shown and the command aborts.\n\nNote   There are no backwards compatibility guarantees for the output of this command. Output\nmay change in any future Mercurial release.\n\nConsumers wanting stable command output should specify a template via -T/--template.\n\nList of available views:\n\nbookmarks   bookmarks and their associated changeset\n\nstack       current line of work\n\nwork        changesets that aren't finished\n\nOptions:\n"
                },
                {
                    "name": "-T,_",
                    "content": "display with template\n"
                },
                {
                    "name": "sparse",
                    "content": "allow sparse checkouts of the working directory (EXPERIMENTAL)\n\n(This extension is not yet protected by backwards compatibility guarantees.  Any  aspect  may\nbreak in future releases until this notice is removed.)\n\nThis  extension allows the working directory to only consist of a subset of files for the re‐\nvision. This allows specific files or directories to be explicitly included or excluded. Many\nrepository operations have performance proportional to the number of files in the working di‐\nrectory. So only realizing a subset of files in the working  directory  can  improve  perfor‐\nmance.\n"
                },
                {
                    "name": "Sparse Config Files",
                    "content": "The  set of files that are part of a sparse checkout are defined by a sparse config file. The\nfile defines 3 things: includes (files to include in the sparse checkout), excludes (files to\nexclude from the sparse checkout), and profiles (links to other config files).\n\nThe file format is newline delimited. Empty lines and lines beginning with # are ignored.\n\nLines beginning with %include `` denote another sparse config file to  include.  e.g.  ``%in‐\nclude tests.sparse. The filename is relative to the repository root.\n\nThe  special  lines [include] and [exclude] denote the section for includes and excludes that\nfollow, respectively. It is illegal to have [include] after [exclude].\n\nNon-special lines resemble file patterns to be added to either includes or excludes. The syn‐\ntax of these lines is documented by hg help patterns.  Patterns are interpreted as  glob:  by\ndefault and match against the root of the repository.\n\nExclusion  patterns  take precedence over inclusion patterns. So even if a file is explicitly\nincluded, an [exclude] entry can remove it.\n\nFor example, say you have a repository with 3 directories, frontend/, backend/,  and  tools/.\nfrontend/  and backend/ correspond to different projects and it is uncommon for someone work‐\ning on one to need the files for the other. But tools/ contains  files  shared  between  both\nprojects. Your sparse config files may resemble:\n\n# frontend.sparse\nfrontend/\ntools/\n\n# backend.sparse\nbackend/\ntools/\n\nSay the backend grows in size. Or there's a directory with thousands of files you wish to ex‐\nclude. You can modify the profile to exclude certain files:\n\n[include]\nbackend/\ntools/\n\n[exclude]\ntools/tests/\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Uncategorized commands",
                    "content": ""
                },
                {
                    "name": "split",
                    "content": "command to split a changeset into smaller ones (EXPERIMENTAL)\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change manipulation",
                    "content": ""
                },
                {
                    "name": "split",
                    "content": "split a changeset into smaller ones:\n\nhg split [--no-rebase] [[-r] REV]\n\nRepeatedly  prompt  changes and commit message for new changesets until there is nothing left\nin the original changeset.\n\nIf --rev was not given, split the working directory parent.\n\nBy default, rebase connected non-obsoleted descendants onto the new changeset.  Use  --no-re‐\nbase to avoid the rebase.\n\nOptions:\n"
                },
                {
                    "name": "-r,_",
                    "content": "revision to split\n"
                },
                {
                    "name": "--rebase",
                    "content": "rebase descendants after split (default: True)\n",
                    "long": "--rebase"
                },
                {
                    "name": "-d,_",
                    "content": "record the specified date as commit date\n"
                },
                {
                    "name": "-u,_",
                    "content": "record the specified user as committer\n"
                },
                {
                    "name": "sqlitestore",
                    "content": "store repository data in SQLite (EXPERIMENTAL)\n\nThe sqlitestore extension enables the storage of repository data in SQLite.\n\nThis  extension is HIGHLY EXPERIMENTAL. There are NO BACKWARDS COMPATIBILITY GUARANTEES. This\nmeans that repositories created with this extension may only be usable with the exact version\nof this extension/Mercurial that was used. The extension attempts to enforce this in order to\nprevent repository corruption.\n\nIn addition, several features are not yet supported or have known bugs:\n\n• Only some data is stored in SQLite. Changeset, manifest, and other repository data  is  not\nyet stored in SQLite.\n\n• Transactions are not robust. If the process is aborted at the right time during transaction\nclose/rollback,  the repository could be in an inconsistent state. This problem will dimin‐\nish once all repository data is tracked by SQLite.\n\n• Bundle repositories do not work (the ability to use e.g.  hg -R <bundle-file> log to  auto‐\nmatically overlay a bundle on top of the existing repository).\n\n• Various other features don't work.\n\nThis  extension should work for basic clone/pull, update, and commit workflows.  Some history\nrewriting operations may fail due to lack of support for bundle repositories.\n\nTo use, activate the extension and set the storage.new-repo-backend config option  to  sqlite\nto enable new repositories to use SQLite for storage.\n"
                },
                {
                    "name": "strip",
                    "content": "strip changesets and their descendants from history (DEPRECATED)\n\nThe  functionality  of  this extension has been included in core Mercurial since version 5.7.\nPlease use hg debugstrip ... instead.\n\nThis extension allows you to strip changesets and all their descendants from the  repository.\nSee the command help for details.\n"
                },
                {
                    "name": "transplant",
                    "content": "command to transplant changesets from another branch\n\nThis  extension  allows you to transplant changes to another parent revision, possibly in an‐\nother repository. The transplant is done using 'diff' patches.\n\nTransplanted patches are recorded in .hg/transplant/transplants, as a map  from  a  changeset\nhash to its hash in the source repository.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change manipulation",
                    "content": ""
                },
                {
                    "name": "transplant",
                    "content": "transplant changesets from another branch:\n\nhg transplant [-s REPO] [-b BRANCH [-a]] [-p REV] [-m REV] [REV]...\n\nSelected  changesets  will be applied on top of the current working directory with the log of\nthe original changeset. The changesets are copied and will thus appear twice in  the  history\nwith different identities.\n\nConsider  using  the  graft command if everything is inside the same repository - it will use\nmerges and will usually give a better result.  Use the rebase extension if the changesets are\nunpublished and you want to move them instead of copying them.\n\nIf --log is specified, log messages will have a comment appended of the form:\n\n(transplanted from CHANGESETHASH)\n\nYou can rewrite the changelog message with the --filter option.  Its argument will be invoked\nwith the current changelog message as $1 and the patch as $2.\n\n--source/-s specifies another repository to use for selecting changesets, just as if it  tem‐\nporarily had been pulled.  If --branch/-b is specified, these revisions will be used as heads\nwhen  deciding  which  changesets  to  transplant,  just  as if only these revisions had been\npulled.  If --all/-a is specified, all the revisions up to the heads specified with  --branch\nwill be transplanted.\n\nExample:\n\n• transplant all changes up to REV on top of your current revision:\n\nhg transplant --branch REV --all\n\nYou can optionally mark selected transplanted changesets as merge changesets. You will not be\nprompted to transplant any ancestors of a merged transplant, and you can merge descendants of\nthem normally instead of transplanting them.\n\nMerge  changesets  may  be transplanted directly by specifying the proper parent changeset by\ncalling hg transplant --parent.\n\nIf no merges or revisions are provided, hg transplant will  start  an  interactive  changeset\nbrowser.\n\nIf  a  changeset  application  fails, you can fix the merge by hand and then resume where you\nleft off by calling hg transplant --continue/-c.\n\nOptions:\n"
                },
                {
                    "name": "-s,_",
                    "content": "transplant changesets from REPO\n"
                },
                {
                    "name": "-b,_",
                    "content": "use this source changeset as head\n"
                },
                {
                    "name": "-a, --all",
                    "content": "pull all changesets up to the --branch revisions\n",
                    "flag": "-a",
                    "long": "--all"
                },
                {
                    "name": "-p,_",
                    "content": "skip over REV\n"
                },
                {
                    "name": "-m,_",
                    "content": "merge at REV\n\n--parent <REV>\nparent to choose when transplanting merge\n"
                },
                {
                    "name": "-e, --edit",
                    "content": "invoke editor on commit messages\n\n--log  append transplant info to log message\n\n--stop stop interrupted transplant\n",
                    "flag": "-e",
                    "long": "--edit"
                },
                {
                    "name": "-c, --continue",
                    "content": "continue last transplant session after fixing conflicts\n\n--filter <CMD>\nfilter changesets through command\n\n[+] marked option can be specified multiple times\n",
                    "flag": "-c",
                    "long": "--continue"
                },
                {
                    "name": "uncommit",
                    "content": "uncommit part or all of a local changeset (EXPERIMENTAL)\n\nThis command undoes the effect of a local commit, returning the affected files to  their  un‐\ncommitted  state.  This  means that files modified, added or removed in the changeset will be\nleft unchanged, and so will remain modified, added and removed in the working directory.\n"
                },
                {
                    "name": "Commands",
                    "content": ""
                },
                {
                    "name": "Change manipulation",
                    "content": ""
                },
                {
                    "name": "unamend",
                    "content": "undo the most recent amend operation on a current changeset:\n\nhg unamend\n\nThis command will roll back to the previous version of a changeset, leaving working directory\nin state in which it was before running hg amend (e.g. files modified as  part  of  an  amend\nwill be marked as modified hg status)\n"
                },
                {
                    "name": "uncommit",
                    "content": "uncommit part or all of a local changeset:\n\nhg uncommit [OPTION]... [FILE]...\n\nThis  command  undoes the effect of a local commit, returning the affected files to their un‐\ncommitted state. This means that files modified or deleted in the changeset will be left  un‐\nchanged, and so will remain modified in the working directory.\n\nIf no files are specified, the commit will be pruned, unless --keep is given.\n\nOptions:\n\n--keep allow an empty commit after uncommitting\n"
                },
                {
                    "name": "--allow-dirty-working-copy",
                    "content": "allow uncommit with outstanding changes\n",
                    "long": "--allow-dirty-working-copy"
                },
                {
                    "name": "-n,_",
                    "content": "store a note on uncommit\n"
                },
                {
                    "name": "-I,_",
                    "content": "include names matching the given patterns\n"
                },
                {
                    "name": "-X,_",
                    "content": "exclude names matching the given patterns\n"
                },
                {
                    "name": "-m,_",
                    "content": "use text as commit message\n"
                },
                {
                    "name": "-l,_",
                    "content": "read commit message from file\n"
                },
                {
                    "name": "-d,_",
                    "content": "record the specified date as commit date\n"
                },
                {
                    "name": "-u,_",
                    "content": "record the specified user as committer\n"
                },
                {
                    "name": "-D, --currentdate",
                    "content": "record the current date as commit date\n",
                    "flag": "-D",
                    "long": "--currentdate"
                },
                {
                    "name": "-U, --currentuser",
                    "content": "record the current user as committer\n\n[+] marked option can be specified multiple times\n",
                    "flag": "-U",
                    "long": "--currentuser"
                },
                {
                    "name": "win32mbcs",
                    "content": "allow the use of MBCS paths with problematic encodings\n\nSome MBCS encodings are not good for some path operations (i.e.  splitting path, case conver‐\nsion,  etc.)  with  its  encoded  bytes. We call such a encoding (i.e. shiftjis and big5) as\n\"problematic encoding\".  This extension can be used to fix the issue with those encodings  by\nwrapping some functions to convert to Unicode string before path operation.\n\nThis extension is useful for:\n\n• Japanese Windows users using shiftjis encoding.\n\n• Chinese Windows users using big5 encoding.\n\n• All  users  who use a repository with one of problematic encodings on case-insensitive file\nsystem.\n\nThis extension is not needed for:\n\n• Any user who use only ASCII chars in path.\n\n• Any user who do not use any of problematic encodings.\n\nNote that there are some limitations on using this extension:\n\n• You should use single encoding in one repository.\n\n• If the repository path ends with 0x5c, .hg/hgrc cannot be read.\n\n• win32mbcs is not compatible with fixutf8 extension.\n\nBy default, win32mbcs uses encoding.encoding decided by Mercurial.  You can specify  the  en‐\ncoding by config option:\n\n[win32mbcs]\nencoding = sjis\n\nIt is useful for the users who want to commit with UTF-8 log message.\n"
                },
                {
                    "name": "win32text",
                    "content": "perform automatic newline conversion (DEPRECATED)\n\nDeprecation:  The  win32text extension requires each user to configure the extension again\nand again for each clone since the configuration is not copied when cloning.\n\nWe have therefore made the eol as an alternative. The eol uses a version  controlled  file\nfor its configuration and each clone will therefore use the right settings from the start.\n\nTo perform automatic newline conversion, use:\n\n[extensions]\nwin32text =\n[encode]\n= cleverencode:\n# or  = macencode:\n\n[decode]\n= cleverdecode:\n# or  = macdecode:\n\nIf not doing conversion, to make sure you do not commit CRLF/CR by accident:\n\n[hooks]\npretxncommit.crlf = python:hgext.win32text.forbidcrlf\n# or pretxncommit.cr = python:hgext.win32text.forbidcr\n\nTo do the same check on a server to prevent CRLF/CR from being pushed or pulled:\n\n[hooks]\npretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf\n# or pretxnchangegroup.cr = python:hgext.win32text.forbidcr\n"
                },
                {
                    "name": "zeroconf",
                    "content": "discover and advertise repositories on the local network\n\nThe zeroconf extension will advertise hg serve instances over DNS-SD so that they can be dis‐\ncovered using the hg paths command without knowing the server's IP address.\n\nTo allow other people to discover your repository using run hg serve in your repository:\n\n$ cd test\n$ hg serve\n\nYou can discover Zeroconf-enabled repositories by running hg paths:\n\n$ hg paths\nzc-test = http://example.com:8000/test\n"
                }
            ]
        },
        "FILES": {
            "content": "",
            "subsections": [
                {
                    "name": "/etc/mercurial/hgrc, $HOME/.hgrc, .hg/hgrc",
                    "content": "This  file  contains  defaults and configuration. Values in .hg/hgrc override those in\n$HOME/.hgrc, and these override settings made in the global  /etc/mercurial/hgrc  con‐\nfiguration.  See hgrc(5) for details of the contents and format of these files.\n"
                },
                {
                    "name": ".hgignore",
                    "content": "This  file  contains  regular expressions (one per line) that describe file names that\nshould be ignored by hg. For details, see hgignore(5).\n"
                },
                {
                    "name": ".hgsub",
                    "content": "This file defines the locations of all subrepositories, and tells where the subreposi‐\ntory checkouts came from. For details, see hg help subrepos.\n"
                },
                {
                    "name": ".hgsubstate",
                    "content": "This file is where Mercurial stores all nested repository states. NB: This file should\nnot be edited manually.\n"
                },
                {
                    "name": ".hgtags",
                    "content": "This file contains changeset hash values and text tag names (one of each separated  by\nspaces)  that  correspond to tagged versions of the repository contents. The file con‐\ntent is encoded using UTF-8.\n"
                },
                {
                    "name": ".hg/last-message.txt",
                    "content": "This file is used by hg commit to store a backup of the commit  message  in  case  the\ncommit fails.\n"
                },
                {
                    "name": ".hg/localtags",
                    "content": "This  file  can  be used to define local tags which are not shared among repositories.\nThe file format is the same as for .hgtags, but it is encoded using the  local  system\nencoding.\n\nSome  commands  (e.g. revert) produce backup files ending in .orig, if the .orig file already\nexists and is not tracked by Mercurial, it will be overwritten.\n"
                }
            ]
        },
        "BUGS": {
            "content": "Probably lots, please post them to the mailing list (see Resources below) when you find them.\n",
            "subsections": []
        },
        "SEE ALSO": {
            "content": "hgignore(5), hgrc(5)\n",
            "subsections": []
        },
        "AUTHOR": {
            "content": "Olivia Mackall <olivia@selenic.com>\n\nOrganization: Mercurial\n\n\nHG(1)",
            "subsections": []
        },
        "RESOURCES": {
            "content": "Main Web Site: https://mercurial-scm.org/\n\nSource code repository: https://www.mercurial-scm.org/repo/hg\n\nMailing list: https://www.mercurial-scm.org/mailman/listinfo/mercurial/\n",
            "subsections": []
        },
        "COPYING": {
            "content": "Copyright (C) 2005-2023 Olivia Mackall.  Free use of this software is granted under the terms\nof the GNU General Public License version 2 or any later version.\n",
            "subsections": []
        }
    },
    "summary": "hg - Mercurial source code management system",
    "flags": [
        {
            "flag": "",
            "long": null,
            "arg": null,
            "description": "repository root directory or name of overlay bundle file --cwd <DIR> change working directory"
        },
        {
            "flag": "-y",
            "long": "--noninteractive",
            "arg": null,
            "description": "do not prompt, automatically pick the first choice for all prompts"
        },
        {
            "flag": "-q",
            "long": "--quiet",
            "arg": null,
            "description": "suppress output"
        },
        {
            "flag": "-v",
            "long": "--verbose",
            "arg": null,
            "description": "enable additional output --color <TYPE> when to colorize (boolean, always, auto, never, or debug) --config <CONFIG[+]> set/override config option (use 'section.name=value')"
        },
        {
            "flag": "",
            "long": "--debug",
            "arg": null,
            "description": "enable debugging output"
        },
        {
            "flag": "",
            "long": "--debugger",
            "arg": null,
            "description": "start debugger --encoding <ENCODE> set the charset encoding (default: UTF-8) --encodingmode <MODE> set the charset encoding mode (default: strict)"
        },
        {
            "flag": "",
            "long": "--traceback",
            "arg": null,
            "description": "always print a traceback on exception --time time how long the command takes"
        },
        {
            "flag": "",
            "long": "--profile",
            "arg": null,
            "description": "print command execution profile"
        },
        {
            "flag": "",
            "long": "--version",
            "arg": null,
            "description": "output version information and exit"
        },
        {
            "flag": "-h",
            "long": "--help",
            "arg": null,
            "description": "display help and exit"
        },
        {
            "flag": "",
            "long": "--hidden",
            "arg": null,
            "description": "consider hidden changesets --pager <TYPE> when to paginate (boolean, always, auto, or never) (default: auto) [+] marked option can be specified multiple times"
        }
    ],
    "examples": [],
    "see_also": [
        {
            "name": "hgignore",
            "section": "5",
            "url": "https://www.chedong.com/phpMan.php/man/hgignore/5/json"
        },
        {
            "name": "hgrc",
            "section": "5",
            "url": "https://www.chedong.com/phpMan.php/man/hgrc/5/json"
        }
    ],
    "tldr": {
        "source": "official",
        "description": "Mercurial - a distributed source control management system.",
        "examples": [
            {
                "description": "Create an empty Mercurial repository",
                "command": "hg init"
            },
            {
                "description": "Clone a remote Mercurial repository from the internet",
                "command": "hg clone {{https://example.com/repo}}"
            },
            {
                "description": "View the status of a local repository",
                "command": "hg status"
            },
            {
                "description": "Add all new files to the next commit",
                "command": "hg add"
            },
            {
                "description": "Commit changes to version history",
                "command": "hg commit {{-m|--message}} {{message_text}}"
            },
            {
                "description": "Push local changes to a remote repository",
                "command": "hg push"
            },
            {
                "description": "Pull any changes made to a remote",
                "command": "hg pull"
            },
            {
                "description": "Reset everything the way it was in the latest commit",
                "command": "hg update {{-C|--clean}}; hg purge"
            }
        ]
    }
}