##// END OF EJS Templates
admin-commands: move the chainsaw extension to the admin commands module...
Raphaël Gomès -
r52396:d4095f7b stable
parent child Browse files
Show More
@@ -1,231 +1,226 b''
1 # chainsaw.py
1 # chainsaw.py
2 #
2 #
3 # Copyright 2022 Georges Racinet <georges.racinet@octobus.net>
3 # Copyright 2022 Georges Racinet <georges.racinet@octobus.net>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7 """chainsaw is a collection of single-minded and dangerous tools. (EXPERIMENTAL)
7 """chainsaw is a collection of single-minded and dangerous tools. (EXPERIMENTAL)
8
8
9 "Don't use a chainsaw to cut your food!"
9 "Don't use a chainsaw to cut your food!"
10
10
11 The chainsaw extension provides commands that are so much geared towards a
11 The chainsaw is a collection of commands that are so much geared towards a
12 specific use case in a specific context or environment that they are totally
12 specific use case in a specific context or environment that they are totally
13 inappropriate and **really dangerous** in other contexts.
13 inappropriate and **really dangerous** in other contexts.
14
14
15 The help text of each command explicitly summarizes its context of application
15 The help text of each command explicitly summarizes its context of application
16 and the wanted end result.
16 and the wanted end result.
17
17
18 It is recommended to run these commands with the ``HGPLAIN`` environment
18 It is recommended to run these commands with the ``HGPLAIN`` environment
19 variable (see :hg:`help scripting`).
19 variable (see :hg:`help scripting`).
20 """
20 """
21
21
22 import shutil
22 import shutil
23
23
24 from mercurial.i18n import _
24 from ..i18n import _
25 from mercurial import (
25 from .. import (
26 cmdutil,
26 cmdutil,
27 commands,
27 commands,
28 error,
28 error,
29 localrepo,
29 localrepo,
30 registrar,
30 registrar,
31 )
31 )
32 from mercurial.utils import (
32 from ..utils import (
33 urlutil,
33 urlutil,
34 )
34 )
35
35
36 cmdtable = {}
36 cmdtable = {}
37 command = registrar.command(cmdtable)
37 command = registrar.command(cmdtable)
38 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
39 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
40 # be specifying the version(s) of Mercurial they are tested with, or
41 # leave the attribute unspecified.
42 testedwith = b'ships-with-hg-core'
43
38
44
39
45 @command(
40 @command(
46 b'admin::chainsaw-update',
41 b'admin::chainsaw-update',
47 [
42 [
48 (
43 (
49 b'',
44 b'',
50 b'purge-unknown',
45 b'purge-unknown',
51 True,
46 True,
52 _(
47 _(
53 b'Remove unversioned files before update. Disabling this can '
48 b'Remove unversioned files before update. Disabling this can '
54 b'in some cases interfere with the update.'
49 b'in some cases interfere with the update.'
55 b'See also :hg:`purge`.'
50 b'See also :hg:`purge`.'
56 ),
51 ),
57 ),
52 ),
58 (
53 (
59 b'',
54 b'',
60 b'purge-ignored',
55 b'purge-ignored',
61 True,
56 True,
62 _(
57 _(
63 b'Remove ignored files before update. Disable this for '
58 b'Remove ignored files before update. Disable this for '
64 b'instance to reuse previous compiler object files. '
59 b'instance to reuse previous compiler object files. '
65 b'See also :hg:`purge`.'
60 b'See also :hg:`purge`.'
66 ),
61 ),
67 ),
62 ),
68 (
63 (
69 b'',
64 b'',
70 b'rev',
65 b'rev',
71 b'',
66 b'',
72 _(b'revision to update to'),
67 _(b'revision to update to'),
73 ),
68 ),
74 (
69 (
75 b'',
70 b'',
76 b'source',
71 b'source',
77 b'',
72 b'',
78 _(b'repository to clone from'),
73 _(b'repository to clone from'),
79 ),
74 ),
80 (
75 (
81 b'',
76 b'',
82 b'dest',
77 b'dest',
83 b'',
78 b'',
84 _(b'repository to update to REV (possibly cloning)'),
79 _(b'repository to update to REV (possibly cloning)'),
85 ),
80 ),
86 (
81 (
87 b'',
82 b'',
88 b'initial-clone-minimal',
83 b'initial-clone-minimal',
89 False,
84 False,
90 _(
85 _(
91 b'Pull only the prescribed revision upon initial cloning. '
86 b'Pull only the prescribed revision upon initial cloning. '
92 b'This has the side effect of ignoring clone-bundles, '
87 b'This has the side effect of ignoring clone-bundles, '
93 b'which if often slower on the client side and stressful '
88 b'which if often slower on the client side and stressful '
94 b'to the server than applying available clone bundles.'
89 b'to the server than applying available clone bundles.'
95 ),
90 ),
96 ),
91 ),
97 ],
92 ],
98 _(
93 _(
99 b'hg admin::chainsaw-update [OPTION] --rev REV --source SOURCE --dest DEST'
94 b'hg admin::chainsaw-update [OPTION] --rev REV --source SOURCE --dest DEST'
100 ),
95 ),
101 helpbasic=True,
96 helpbasic=True,
102 norepo=True,
97 norepo=True,
103 )
98 )
104 def update(ui, **opts):
99 def update(ui, **opts):
105 """pull and update to a given revision, no matter what, (EXPERIMENTAL)
100 """pull and update to a given revision, no matter what, (EXPERIMENTAL)
106
101
107 Context of application: *some* Continuous Integration (CI) systems,
102 Context of application: *some* Continuous Integration (CI) systems,
108 packaging or deployment tools.
103 packaging or deployment tools.
109
104
110 Wanted end result: local repository at the given REPO_PATH, having the
105 Wanted end result: local repository at the given REPO_PATH, having the
111 latest changes to the given revision and with a clean working directory
106 latest changes to the given revision and with a clean working directory
112 updated at the given revision.
107 updated at the given revision.
113
108
114 chainsaw-update pulls from one source, then updates the working directory
109 chainsaw-update pulls from one source, then updates the working directory
115 to the given revision, overcoming anything that would stand in the way.
110 to the given revision, overcoming anything that would stand in the way.
116
111
117 By default, it will:
112 By default, it will:
118
113
119 - clone if the local repo does not exist yet, **removing any directory
114 - clone if the local repo does not exist yet, **removing any directory
120 at the given path** that would not be a Mercurial repository.
115 at the given path** that would not be a Mercurial repository.
121 The initial clone is full by default, so that clonebundles can be
116 The initial clone is full by default, so that clonebundles can be
122 applied. Use the --initial-clone-minimal flag to avoid this.
117 applied. Use the --initial-clone-minimal flag to avoid this.
123 - break locks if needed, leading to possible corruption if there
118 - break locks if needed, leading to possible corruption if there
124 is a concurrent write access.
119 is a concurrent write access.
125 - perform recovery actions if needed
120 - perform recovery actions if needed
126 - revert any local modification.
121 - revert any local modification.
127 - purge unknown and ignored files.
122 - purge unknown and ignored files.
128 - go as far as to reclone if everything else failed (not implemented yet).
123 - go as far as to reclone if everything else failed (not implemented yet).
129
124
130 DO NOT use it for anything else than performing a series
125 DO NOT use it for anything else than performing a series
131 of unattended updates, with full exclusive repository access each time
126 of unattended updates, with full exclusive repository access each time
132 and without any other local work than running build scripts.
127 and without any other local work than running build scripts.
133 In case the local repository is a share (see :hg:`help share`), exclusive
128 In case the local repository is a share (see :hg:`help share`), exclusive
134 write access to the share source is also mandatory.
129 write access to the share source is also mandatory.
135
130
136 It is recommended to run these commands with the ``HGPLAIN`` environment
131 It is recommended to run these commands with the ``HGPLAIN`` environment
137 variable (see :hg:`scripting`).
132 variable (see :hg:`scripting`).
138
133
139 Motivation: in Continuous Integration and Delivery systems (CI/CD), the
134 Motivation: in Continuous Integration and Delivery systems (CI/CD), the
140 occasional remnant or bogus lock are common sources of waste of time (both
135 occasional remnant or bogus lock are common sources of waste of time (both
141 working time and calendar time). CI/CD scripts tend to grow with counter-
136 working time and calendar time). CI/CD scripts tend to grow with counter-
142 measures, often done in urgency. Also, whilst it is neat to keep
137 measures, often done in urgency. Also, whilst it is neat to keep
143 repositories from one job to the next (especially with large
138 repositories from one job to the next (especially with large
144 repositories), an exceptional recloning is better than missing a release
139 repositories), an exceptional recloning is better than missing a release
145 deadline.
140 deadline.
146 """
141 """
147 rev = opts['rev']
142 rev = opts['rev']
148 source = opts['source']
143 source = opts['source']
149 repo_path = opts['dest']
144 repo_path = opts['dest']
150 if not rev:
145 if not rev:
151 raise error.InputError(_(b'specify a target revision with --rev'))
146 raise error.InputError(_(b'specify a target revision with --rev'))
152 if not source:
147 if not source:
153 raise error.InputError(_(b'specify a pull path with --source'))
148 raise error.InputError(_(b'specify a pull path with --source'))
154 if not repo_path:
149 if not repo_path:
155 raise error.InputError(_(b'specify a repo path with --dest'))
150 raise error.InputError(_(b'specify a repo path with --dest'))
156 repo_path = urlutil.urllocalpath(repo_path)
151 repo_path = urlutil.urllocalpath(repo_path)
157
152
158 try:
153 try:
159 repo = localrepo.instance(ui, repo_path, create=False)
154 repo = localrepo.instance(ui, repo_path, create=False)
160 repo_created = False
155 repo_created = False
161 ui.status(_(b'loaded repository at "%s"\n' % repo_path))
156 ui.status(_(b'loaded repository at "%s"\n' % repo_path))
162 except error.RepoError:
157 except error.RepoError:
163 try:
158 try:
164 shutil.rmtree(repo_path)
159 shutil.rmtree(repo_path)
165 except FileNotFoundError:
160 except FileNotFoundError:
166 ui.status(_(b'no such directory: "%s"\n' % repo_path))
161 ui.status(_(b'no such directory: "%s"\n' % repo_path))
167 else:
162 else:
168 ui.status(
163 ui.status(
169 _(
164 _(
170 b'removed non-repository file or directory '
165 b'removed non-repository file or directory '
171 b'at "%s"' % repo_path
166 b'at "%s"' % repo_path
172 )
167 )
173 )
168 )
174
169
175 ui.status(_(b'creating repository at "%s"\n' % repo_path))
170 ui.status(_(b'creating repository at "%s"\n' % repo_path))
176 repo = localrepo.instance(ui, repo_path, create=True)
171 repo = localrepo.instance(ui, repo_path, create=True)
177 repo_created = True
172 repo_created = True
178
173
179 if repo.svfs.tryunlink(b'lock'):
174 if repo.svfs.tryunlink(b'lock'):
180 ui.status(_(b'had to break store lock\n'))
175 ui.status(_(b'had to break store lock\n'))
181 if repo.vfs.tryunlink(b'wlock'):
176 if repo.vfs.tryunlink(b'wlock'):
182 ui.status(_(b'had to break working copy lock\n'))
177 ui.status(_(b'had to break working copy lock\n'))
183 # If another process relock after the breacking above, the next locking
178 # If another process relock after the breacking above, the next locking
184 # will have to wait.
179 # will have to wait.
185 with repo.wlock(), repo.lock():
180 with repo.wlock(), repo.lock():
186 ui.status(_(b'recovering after interrupted transaction, if any\n'))
181 ui.status(_(b'recovering after interrupted transaction, if any\n'))
187 repo.recover()
182 repo.recover()
188
183
189 ui.status(_(b'pulling from %s\n') % source)
184 ui.status(_(b'pulling from %s\n') % source)
190 if repo_created and not opts.get('initial_clone_minimal'):
185 if repo_created and not opts.get('initial_clone_minimal'):
191 pull_revs = []
186 pull_revs = []
192 else:
187 else:
193 pull_revs = [rev]
188 pull_revs = [rev]
194 overrides = {(b'ui', b'quiet'): True}
189 overrides = {(b'ui', b'quiet'): True}
195 with repo.ui.configoverride(overrides, b'chainsaw-update'):
190 with repo.ui.configoverride(overrides, b'chainsaw-update'):
196 pull = cmdutil.findcmd(b'pull', commands.table)[1][0]
191 pull = cmdutil.findcmd(b'pull', commands.table)[1][0]
197 ret = pull(
192 ret = pull(
198 repo.ui,
193 repo.ui,
199 repo,
194 repo,
200 source,
195 source,
201 rev=pull_revs,
196 rev=pull_revs,
202 remote_hidden=False,
197 remote_hidden=False,
203 )
198 )
204 if ret:
199 if ret:
205 return ret
200 return ret
206
201
207 purge = cmdutil.findcmd(b'purge', commands.table)[1][0]
202 purge = cmdutil.findcmd(b'purge', commands.table)[1][0]
208 ret = purge(
203 ret = purge(
209 ui,
204 ui,
210 repo,
205 repo,
211 dirs=True,
206 dirs=True,
212 all=opts.get('purge_ignored'),
207 all=opts.get('purge_ignored'),
213 files=opts.get('purge_unknown'),
208 files=opts.get('purge_unknown'),
214 confirm=False,
209 confirm=False,
215 )
210 )
216 if ret:
211 if ret:
217 return ret
212 return ret
218
213
219 ui.status(_(b'updating to revision \'%s\'\n') % rev)
214 ui.status(_(b'updating to revision \'%s\'\n') % rev)
220 update = cmdutil.findcmd(b'update', commands.table)[1][0]
215 update = cmdutil.findcmd(b'update', commands.table)[1][0]
221 ret = update(ui, repo, rev=rev, clean=True)
216 ret = update(ui, repo, rev=rev, clean=True)
222 if ret:
217 if ret:
223 return ret
218 return ret
224
219
225 ui.status(
220 ui.status(
226 _(
221 _(
227 b'chainsaw-update to revision \'%s\' '
222 b'chainsaw-update to revision \'%s\' '
228 b'for repository at \'%s\' done\n'
223 b'for repository at \'%s\' done\n'
229 )
224 )
230 % (rev, repo.root)
225 % (rev, repo.root)
231 )
226 )
@@ -1,49 +1,50 b''
1 # admin_commands.py - command processing for admin* commands
1 # admin_commands.py - command processing for admin* commands
2 #
2 #
3 # Copyright 2022 Mercurial Developers
3 # Copyright 2022 Mercurial Developers
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8 from .i18n import _
8 from .i18n import _
9 from .admin import verify
9 from .admin import chainsaw, verify
10 from . import error, registrar, transaction
10 from . import error, registrar, transaction
11
11
12
12
13 table = {}
13 table = {}
14 table.update(chainsaw.command._table)
14 command = registrar.command(table)
15 command = registrar.command(table)
15
16
16
17
17 @command(
18 @command(
18 b'admin::verify',
19 b'admin::verify',
19 [
20 [
20 (b'c', b'check', [], _(b'add a check'), _(b'CHECK')),
21 (b'c', b'check', [], _(b'add a check'), _(b'CHECK')),
21 (b'o', b'option', [], _(b'pass an option to a check'), _(b'OPTION')),
22 (b'o', b'option', [], _(b'pass an option to a check'), _(b'OPTION')),
22 ],
23 ],
23 helpcategory=command.CATEGORY_MAINTENANCE,
24 helpcategory=command.CATEGORY_MAINTENANCE,
24 )
25 )
25 def admin_verify(ui, repo, **opts):
26 def admin_verify(ui, repo, **opts):
26 """verify the integrity of the repository
27 """verify the integrity of the repository
27
28
28 Alternative UI to `hg verify` with a lot more control over the
29 Alternative UI to `hg verify` with a lot more control over the
29 verification process and better error reporting.
30 verification process and better error reporting.
30 """
31 """
31
32
32 if not repo.url().startswith(b'file:'):
33 if not repo.url().startswith(b'file:'):
33 raise error.Abort(_(b"cannot verify bundle or remote repos"))
34 raise error.Abort(_(b"cannot verify bundle or remote repos"))
34
35
35 if transaction.has_abandoned_transaction(repo):
36 if transaction.has_abandoned_transaction(repo):
36 ui.warn(_(b"abandoned transaction found - run hg recover\n"))
37 ui.warn(_(b"abandoned transaction found - run hg recover\n"))
37
38
38 checks = opts.get("check", [])
39 checks = opts.get("check", [])
39 options = opts.get("option", [])
40 options = opts.get("option", [])
40
41
41 funcs = verify.get_checks(repo, ui, names=checks, options=options)
42 funcs = verify.get_checks(repo, ui, names=checks, options=options)
42
43
43 ui.status(_(b"running %d checks\n") % len(funcs))
44 ui.status(_(b"running %d checks\n") % len(funcs))
44 # Done in two times so the execution is separated from the resolving step
45 # Done in two times so the execution is separated from the resolving step
45 for name, func in sorted(funcs.items(), key=lambda x: x[0]):
46 for name, func in sorted(funcs.items(), key=lambda x: x[0]):
46 ui.status(_(b"running %s\n") % name)
47 ui.status(_(b"running %s\n") % name)
47 errors = func()
48 errors = func()
48 if errors:
49 if errors:
49 ui.warn(_(b"found %d errors\n") % len(errors))
50 ui.warn(_(b"found %d errors\n") % len(errors))
@@ -1,255 +1,250 b''
1 ============================================
1 ============================================
2 Tests for the admin::chainsaw-update command
2 Tests for the admin::chainsaw-update command
3 ============================================
3 ============================================
4
4
5 setup
5 setup
6 =====
6 =====
7
7
8 $ cat >> $HGRCPATH << EOF
9 > [extensions]
10 > chainsaw=
11 > EOF
12
13 $ hg init src
8 $ hg init src
14 $ cd src
9 $ cd src
15 $ echo 1 > root
10 $ echo 1 > root
16 $ hg add root
11 $ hg add root
17 $ hg ci -Am R_0
12 $ hg ci -Am R_0
18 $ hg branch A
13 $ hg branch A
19 marked working directory as branch A
14 marked working directory as branch A
20 (branches are permanent and global, did you want a bookmark?)
15 (branches are permanent and global, did you want a bookmark?)
21 $ echo 42 > bar
16 $ echo 42 > bar
22 $ hg add bar
17 $ hg add bar
23 $ hg ci -Am A_0
18 $ hg ci -Am A_0
24 $ echo 1337 > bar
19 $ echo 1337 > bar
25 $ hg ci -Am A_1
20 $ hg ci -Am A_1
26 $ hg update 'desc(R_0)'
21 $ hg update 'desc(R_0)'
27 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
22 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
28 $ echo 1 > foo
23 $ echo 1 > foo
29 $ hg add foo
24 $ hg add foo
30 $ hg ci -Am B_0
25 $ hg ci -Am B_0
31 $ hg log -G
26 $ hg log -G
32 @ changeset: 3:bfcb8e629987
27 @ changeset: 3:bfcb8e629987
33 | tag: tip
28 | tag: tip
34 | parent: 0:06f48e4098b8
29 | parent: 0:06f48e4098b8
35 | user: test
30 | user: test
36 | date: Thu Jan 01 00:00:00 1970 +0000
31 | date: Thu Jan 01 00:00:00 1970 +0000
37 | summary: B_0
32 | summary: B_0
38 |
33 |
39 | o changeset: 2:7fd8de258aa4
34 | o changeset: 2:7fd8de258aa4
40 | | branch: A
35 | | branch: A
41 | | user: test
36 | | user: test
42 | | date: Thu Jan 01 00:00:00 1970 +0000
37 | | date: Thu Jan 01 00:00:00 1970 +0000
43 | | summary: A_1
38 | | summary: A_1
44 | |
39 | |
45 | o changeset: 1:ae1692b8aadb
40 | o changeset: 1:ae1692b8aadb
46 |/ branch: A
41 |/ branch: A
47 | user: test
42 | user: test
48 | date: Thu Jan 01 00:00:00 1970 +0000
43 | date: Thu Jan 01 00:00:00 1970 +0000
49 | summary: A_0
44 | summary: A_0
50 |
45 |
51 o changeset: 0:06f48e4098b8
46 o changeset: 0:06f48e4098b8
52 user: test
47 user: test
53 date: Thu Jan 01 00:00:00 1970 +0000
48 date: Thu Jan 01 00:00:00 1970 +0000
54 summary: R_0
49 summary: R_0
55
50
56 $ cd ..
51 $ cd ..
57
52
58 Actual tests
53 Actual tests
59 ============
54 ============
60
55
61 Initial cloning if needed
56 Initial cloning if needed
62 -------------------------
57 -------------------------
63
58
64 $ hg admin::chainsaw-update --dest repo --rev default --source ./src
59 $ hg admin::chainsaw-update --dest repo --rev default --source ./src
65 no such directory: "repo"
60 no such directory: "repo"
66 creating repository at "repo"
61 creating repository at "repo"
67 recovering after interrupted transaction, if any
62 recovering after interrupted transaction, if any
68 no interrupted transaction available
63 no interrupted transaction available
69 pulling from ./src
64 pulling from ./src
70 updating to revision 'default'
65 updating to revision 'default'
71 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
66 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
72 chainsaw-update to revision 'default' for repository at '$TESTTMP/repo' done
67 chainsaw-update to revision 'default' for repository at '$TESTTMP/repo' done
73
68
74 $ cd repo
69 $ cd repo
75 $ hg log -G
70 $ hg log -G
76 @ changeset: 3:bfcb8e629987
71 @ changeset: 3:bfcb8e629987
77 | tag: tip
72 | tag: tip
78 | parent: 0:06f48e4098b8
73 | parent: 0:06f48e4098b8
79 | user: test
74 | user: test
80 | date: Thu Jan 01 00:00:00 1970 +0000
75 | date: Thu Jan 01 00:00:00 1970 +0000
81 | summary: B_0
76 | summary: B_0
82 |
77 |
83 | o changeset: 2:7fd8de258aa4
78 | o changeset: 2:7fd8de258aa4
84 | | branch: A
79 | | branch: A
85 | | user: test
80 | | user: test
86 | | date: Thu Jan 01 00:00:00 1970 +0000
81 | | date: Thu Jan 01 00:00:00 1970 +0000
87 | | summary: A_1
82 | | summary: A_1
88 | |
83 | |
89 | o changeset: 1:ae1692b8aadb
84 | o changeset: 1:ae1692b8aadb
90 |/ branch: A
85 |/ branch: A
91 | user: test
86 | user: test
92 | date: Thu Jan 01 00:00:00 1970 +0000
87 | date: Thu Jan 01 00:00:00 1970 +0000
93 | summary: A_0
88 | summary: A_0
94 |
89 |
95 o changeset: 0:06f48e4098b8
90 o changeset: 0:06f48e4098b8
96 user: test
91 user: test
97 date: Thu Jan 01 00:00:00 1970 +0000
92 date: Thu Jan 01 00:00:00 1970 +0000
98 summary: R_0
93 summary: R_0
99
94
100 $ hg status -A
95 $ hg status -A
101 C foo
96 C foo
102 C root
97 C root
103 $ cat foo
98 $ cat foo
104 1
99 1
105
100
106 Test lock breacking capabilities
101 Test lock breacking capabilities
107 --------------------------------
102 --------------------------------
108
103
109 Demonstrate lock-breaking capabilities with locks that regular Mercurial
104 Demonstrate lock-breaking capabilities with locks that regular Mercurial
110 operation would not break, because the hostnames registered in locks differ
105 operation would not break, because the hostnames registered in locks differ
111 from the current hostname (happens a lot with succesive containers):
106 from the current hostname (happens a lot with succesive containers):
112
107
113 $ ln -s invalid.host.test/effffffc:171814 .hg/store/lock
108 $ ln -s invalid.host.test/effffffc:171814 .hg/store/lock
114 $ ln -s invalid.host.test/effffffc:171814 .hg/wlock
109 $ ln -s invalid.host.test/effffffc:171814 .hg/wlock
115 $ hg debuglock
110 $ hg debuglock
116 lock: (.*?), process 171814, host invalid.host.test/effffffc \((\d+)s\) (re)
111 lock: (.*?), process 171814, host invalid.host.test/effffffc \((\d+)s\) (re)
117 wlock: (.*?), process 171814, host invalid.host.test/effffffc \((\d+)s\) (re)
112 wlock: (.*?), process 171814, host invalid.host.test/effffffc \((\d+)s\) (re)
118 [2]
113 [2]
119
114
120 $ hg admin::chainsaw-update --no-purge-ignored --dest . --rev default --source ../src
115 $ hg admin::chainsaw-update --no-purge-ignored --dest . --rev default --source ../src
121 loaded repository at "."
116 loaded repository at "."
122 had to break store lock
117 had to break store lock
123 had to break working copy lock
118 had to break working copy lock
124 recovering after interrupted transaction, if any
119 recovering after interrupted transaction, if any
125 no interrupted transaction available
120 no interrupted transaction available
126 pulling from ../src
121 pulling from ../src
127 updating to revision 'default'
122 updating to revision 'default'
128 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
123 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
129 chainsaw-update to revision 'default' for repository at '$TESTTMP/repo' done
124 chainsaw-update to revision 'default' for repository at '$TESTTMP/repo' done
130
125
131 Test file purging capabilities
126 Test file purging capabilities
132 ------------------------------
127 ------------------------------
133
128
134 Let's also add local modifications (tracked and untracked) to demonstrate the
129 Let's also add local modifications (tracked and untracked) to demonstrate the
135 purging.
130 purging.
136
131
137 $ echo untracked > bar
132 $ echo untracked > bar
138 $ echo modified > foo
133 $ echo modified > foo
139 $ hg status -A
134 $ hg status -A
140 M foo
135 M foo
141 ? bar
136 ? bar
142 C root
137 C root
143
138
144 $ echo 2 > ../src/foo
139 $ echo 2 > ../src/foo
145 $ hg -R ../src commit -mB_1
140 $ hg -R ../src commit -mB_1
146 $ hg admin::chainsaw-update --dest . --rev default --source ../src -q
141 $ hg admin::chainsaw-update --dest . --rev default --source ../src -q
147 no interrupted transaction available
142 no interrupted transaction available
148 $ hg log -G
143 $ hg log -G
149 @ changeset: 4:973ab81c95fb
144 @ changeset: 4:973ab81c95fb
150 | tag: tip
145 | tag: tip
151 | user: test
146 | user: test
152 | date: Thu Jan 01 00:00:00 1970 +0000
147 | date: Thu Jan 01 00:00:00 1970 +0000
153 | summary: B_1
148 | summary: B_1
154 |
149 |
155 o changeset: 3:bfcb8e629987
150 o changeset: 3:bfcb8e629987
156 | parent: 0:06f48e4098b8
151 | parent: 0:06f48e4098b8
157 | user: test
152 | user: test
158 | date: Thu Jan 01 00:00:00 1970 +0000
153 | date: Thu Jan 01 00:00:00 1970 +0000
159 | summary: B_0
154 | summary: B_0
160 |
155 |
161 | o changeset: 2:7fd8de258aa4
156 | o changeset: 2:7fd8de258aa4
162 | | branch: A
157 | | branch: A
163 | | user: test
158 | | user: test
164 | | date: Thu Jan 01 00:00:00 1970 +0000
159 | | date: Thu Jan 01 00:00:00 1970 +0000
165 | | summary: A_1
160 | | summary: A_1
166 | |
161 | |
167 | o changeset: 1:ae1692b8aadb
162 | o changeset: 1:ae1692b8aadb
168 |/ branch: A
163 |/ branch: A
169 | user: test
164 | user: test
170 | date: Thu Jan 01 00:00:00 1970 +0000
165 | date: Thu Jan 01 00:00:00 1970 +0000
171 | summary: A_0
166 | summary: A_0
172 |
167 |
173 o changeset: 0:06f48e4098b8
168 o changeset: 0:06f48e4098b8
174 user: test
169 user: test
175 date: Thu Jan 01 00:00:00 1970 +0000
170 date: Thu Jan 01 00:00:00 1970 +0000
176 summary: R_0
171 summary: R_0
177
172
178 $ hg status -A
173 $ hg status -A
179 C foo
174 C foo
180 C root
175 C root
181 $ cat foo
176 $ cat foo
182 2
177 2
183
178
184 Now behaviour with respect to ignored files: they are not purged if
179 Now behaviour with respect to ignored files: they are not purged if
185 the --no-purge-ignored flag is passed, but they are purged by default
180 the --no-purge-ignored flag is passed, but they are purged by default
186
181
187 $ echo bar > .hgignore
182 $ echo bar > .hgignore
188 $ hg ci -Aqm hgignore
183 $ hg ci -Aqm hgignore
189 $ echo ignored > bar
184 $ echo ignored > bar
190 $ hg status --all
185 $ hg status --all
191 I bar
186 I bar
192 C .hgignore
187 C .hgignore
193 C foo
188 C foo
194 C root
189 C root
195
190
196 $ hg admin::chainsaw-update --no-purge-ignored --dest . --rev default --source ../src -q
191 $ hg admin::chainsaw-update --no-purge-ignored --dest . --rev default --source ../src -q
197 no interrupted transaction available
192 no interrupted transaction available
198 $ hg status --all
193 $ hg status --all
199 I bar
194 I bar
200 C .hgignore
195 C .hgignore
201 C foo
196 C foo
202 C root
197 C root
203 $ cat bar
198 $ cat bar
204 ignored
199 ignored
205
200
206 $ hg admin::chainsaw-update --dest . --rev default --source ../src -q
201 $ hg admin::chainsaw-update --dest . --rev default --source ../src -q
207 no interrupted transaction available
202 no interrupted transaction available
208 $ hg status --all
203 $ hg status --all
209 C .hgignore
204 C .hgignore
210 C foo
205 C foo
211 C root
206 C root
212 $ test -f bar
207 $ test -f bar
213 [1]
208 [1]
214
209
215 test --minimal-initial-cloning variant
210 test --minimal-initial-cloning variant
216 --------------------------------------
211 --------------------------------------
217
212
218 With `--minimal-initial-cloning`, there is no "requesting all changes"
213 With `--minimal-initial-cloning`, there is no "requesting all changes"
219 message. Hence clone bundles would be bypassed (TODO test both cases
214 message. Hence clone bundles would be bypassed (TODO test both cases
220 # with an actual clone-bundle)
215 # with an actual clone-bundle)
221
216
222 $ cd ..
217 $ cd ..
223 $ hg admin::chainsaw-update --dest repo2 --rev default --source src --initial-clone-minimal
218 $ hg admin::chainsaw-update --dest repo2 --rev default --source src --initial-clone-minimal
224 no such directory: "repo2"
219 no such directory: "repo2"
225 creating repository at "repo2"
220 creating repository at "repo2"
226 recovering after interrupted transaction, if any
221 recovering after interrupted transaction, if any
227 no interrupted transaction available
222 no interrupted transaction available
228 pulling from src
223 pulling from src
229 updating to revision 'default'
224 updating to revision 'default'
230 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
225 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
231 chainsaw-update to revision 'default' for repository at '$TESTTMP/repo2' done
226 chainsaw-update to revision 'default' for repository at '$TESTTMP/repo2' done
232
227
233 $ cd repo2
228 $ cd repo2
234 $ hg log -G
229 $ hg log -G
235 @ changeset: 2:973ab81c95fb
230 @ changeset: 2:973ab81c95fb
236 | tag: tip
231 | tag: tip
237 | user: test
232 | user: test
238 | date: Thu Jan 01 00:00:00 1970 +0000
233 | date: Thu Jan 01 00:00:00 1970 +0000
239 | summary: B_1
234 | summary: B_1
240 |
235 |
241 o changeset: 1:bfcb8e629987
236 o changeset: 1:bfcb8e629987
242 | user: test
237 | user: test
243 | date: Thu Jan 01 00:00:00 1970 +0000
238 | date: Thu Jan 01 00:00:00 1970 +0000
244 | summary: B_0
239 | summary: B_0
245 |
240 |
246 o changeset: 0:06f48e4098b8
241 o changeset: 0:06f48e4098b8
247 user: test
242 user: test
248 date: Thu Jan 01 00:00:00 1970 +0000
243 date: Thu Jan 01 00:00:00 1970 +0000
249 summary: R_0
244 summary: R_0
250
245
251 $ hg status -A
246 $ hg status -A
252 C foo
247 C foo
253 C root
248 C root
254 $ cat foo
249 $ cat foo
255 2
250 2
@@ -1,460 +1,463 b''
1 Show all commands except debug commands
1 Show all commands except debug commands
2 $ hg debugcomplete
2 $ hg debugcomplete
3 abort
3 abort
4 add
4 add
5 addremove
5 addremove
6 admin::chainsaw-update
6 admin::verify
7 admin::verify
7 annotate
8 annotate
8 archive
9 archive
9 backout
10 backout
10 bisect
11 bisect
11 bookmarks
12 bookmarks
12 branch
13 branch
13 branches
14 branches
14 bundle
15 bundle
15 cat
16 cat
16 clone
17 clone
17 commit
18 commit
18 config
19 config
19 continue
20 continue
20 copy
21 copy
21 diff
22 diff
22 export
23 export
23 files
24 files
24 forget
25 forget
25 graft
26 graft
26 grep
27 grep
27 heads
28 heads
28 help
29 help
29 identify
30 identify
30 import
31 import
31 incoming
32 incoming
32 init
33 init
33 locate
34 locate
34 log
35 log
35 manifest
36 manifest
36 merge
37 merge
37 outgoing
38 outgoing
38 parents
39 parents
39 paths
40 paths
40 phase
41 phase
41 pull
42 pull
42 purge
43 purge
43 push
44 push
44 recover
45 recover
45 remove
46 remove
46 rename
47 rename
47 resolve
48 resolve
48 revert
49 revert
49 rollback
50 rollback
50 root
51 root
51 serve
52 serve
52 shelve
53 shelve
53 status
54 status
54 summary
55 summary
55 tag
56 tag
56 tags
57 tags
57 tip
58 tip
58 unbundle
59 unbundle
59 unshelve
60 unshelve
60 update
61 update
61 verify
62 verify
62 version
63 version
63
64
64 Show all commands that start with "a"
65 Show all commands that start with "a"
65 $ hg debugcomplete a
66 $ hg debugcomplete a
66 abort
67 abort
67 add
68 add
68 addremove
69 addremove
70 admin::chainsaw-update
69 admin::verify
71 admin::verify
70 annotate
72 annotate
71 archive
73 archive
72
74
73 Do not show debug commands if there are other candidates
75 Do not show debug commands if there are other candidates
74 $ hg debugcomplete d
76 $ hg debugcomplete d
75 diff
77 diff
76
78
77 Show debug commands if there are no other candidates
79 Show debug commands if there are no other candidates
78 $ hg debugcomplete debug
80 $ hg debugcomplete debug
79 debug-delta-find
81 debug-delta-find
80 debug-repair-issue6528
82 debug-repair-issue6528
81 debug-revlog-index
83 debug-revlog-index
82 debug-revlog-stats
84 debug-revlog-stats
83 debug::stable-tail-sort
85 debug::stable-tail-sort
84 debug::stable-tail-sort-leaps
86 debug::stable-tail-sort-leaps
85 debug::unbundle
87 debug::unbundle
86 debugancestor
88 debugancestor
87 debugantivirusrunning
89 debugantivirusrunning
88 debugapplystreamclonebundle
90 debugapplystreamclonebundle
89 debugbackupbundle
91 debugbackupbundle
90 debugbuilddag
92 debugbuilddag
91 debugbundle
93 debugbundle
92 debugcapabilities
94 debugcapabilities
93 debugchangedfiles
95 debugchangedfiles
94 debugcheckstate
96 debugcheckstate
95 debugcolor
97 debugcolor
96 debugcommands
98 debugcommands
97 debugcomplete
99 debugcomplete
98 debugconfig
100 debugconfig
99 debugcreatestreamclonebundle
101 debugcreatestreamclonebundle
100 debugdag
102 debugdag
101 debugdata
103 debugdata
102 debugdate
104 debugdate
103 debugdeltachain
105 debugdeltachain
104 debugdirstate
106 debugdirstate
105 debugdirstateignorepatternshash
107 debugdirstateignorepatternshash
106 debugdiscovery
108 debugdiscovery
107 debugdownload
109 debugdownload
108 debugextensions
110 debugextensions
109 debugfileset
111 debugfileset
110 debugformat
112 debugformat
111 debugfsinfo
113 debugfsinfo
112 debuggetbundle
114 debuggetbundle
113 debugignore
115 debugignore
114 debugindexdot
116 debugindexdot
115 debugindexstats
117 debugindexstats
116 debuginstall
118 debuginstall
117 debugknown
119 debugknown
118 debuglabelcomplete
120 debuglabelcomplete
119 debuglocks
121 debuglocks
120 debugmanifestfulltextcache
122 debugmanifestfulltextcache
121 debugmergestate
123 debugmergestate
122 debugnamecomplete
124 debugnamecomplete
123 debugnodemap
125 debugnodemap
124 debugobsolete
126 debugobsolete
125 debugp1copies
127 debugp1copies
126 debugp2copies
128 debugp2copies
127 debugpathcomplete
129 debugpathcomplete
128 debugpathcopies
130 debugpathcopies
129 debugpeer
131 debugpeer
130 debugpickmergetool
132 debugpickmergetool
131 debugpushkey
133 debugpushkey
132 debugpvec
134 debugpvec
133 debugrebuilddirstate
135 debugrebuilddirstate
134 debugrebuildfncache
136 debugrebuildfncache
135 debugrename
137 debugrename
136 debugrequires
138 debugrequires
137 debugrevlog
139 debugrevlog
138 debugrevlogindex
140 debugrevlogindex
139 debugrevspec
141 debugrevspec
140 debugserve
142 debugserve
141 debugsetparents
143 debugsetparents
142 debugshell
144 debugshell
143 debugsidedata
145 debugsidedata
144 debugssl
146 debugssl
145 debugstrip
147 debugstrip
146 debugsub
148 debugsub
147 debugsuccessorssets
149 debugsuccessorssets
148 debugtagscache
150 debugtagscache
149 debugtemplate
151 debugtemplate
150 debuguigetpass
152 debuguigetpass
151 debuguiprompt
153 debuguiprompt
152 debugupdatecaches
154 debugupdatecaches
153 debugupgraderepo
155 debugupgraderepo
154 debugwalk
156 debugwalk
155 debugwhyunstable
157 debugwhyunstable
156 debugwireargs
158 debugwireargs
157 debugwireproto
159 debugwireproto
158
160
159 Do not show the alias of a debug command if there are other candidates
161 Do not show the alias of a debug command if there are other candidates
160 (this should hide rawcommit)
162 (this should hide rawcommit)
161 $ hg debugcomplete r
163 $ hg debugcomplete r
162 recover
164 recover
163 remove
165 remove
164 rename
166 rename
165 resolve
167 resolve
166 revert
168 revert
167 rollback
169 rollback
168 root
170 root
169 Show the alias of a debug command if there are no other candidates
171 Show the alias of a debug command if there are no other candidates
170 $ hg debugcomplete rawc
172 $ hg debugcomplete rawc
171
173
172
174
173 Show the global options
175 Show the global options
174 $ hg debugcomplete --options | sort
176 $ hg debugcomplete --options | sort
175 --color
177 --color
176 --config
178 --config
177 --cwd
179 --cwd
178 --debug
180 --debug
179 --debugger
181 --debugger
180 --encoding
182 --encoding
181 --encodingmode
183 --encodingmode
182 --help
184 --help
183 --hidden
185 --hidden
184 --noninteractive
186 --noninteractive
185 --pager
187 --pager
186 --profile
188 --profile
187 --quiet
189 --quiet
188 --repository
190 --repository
189 --time
191 --time
190 --traceback
192 --traceback
191 --verbose
193 --verbose
192 --version
194 --version
193 -R
195 -R
194 -h
196 -h
195 -q
197 -q
196 -v
198 -v
197 -y
199 -y
198
200
199 Show the options for the "serve" command
201 Show the options for the "serve" command
200 $ hg debugcomplete --options serve | sort
202 $ hg debugcomplete --options serve | sort
201 --accesslog
203 --accesslog
202 --address
204 --address
203 --certificate
205 --certificate
204 --cmdserver
206 --cmdserver
205 --color
207 --color
206 --config
208 --config
207 --cwd
209 --cwd
208 --daemon
210 --daemon
209 --daemon-postexec
211 --daemon-postexec
210 --debug
212 --debug
211 --debugger
213 --debugger
212 --encoding
214 --encoding
213 --encodingmode
215 --encodingmode
214 --errorlog
216 --errorlog
215 --help
217 --help
216 --hidden
218 --hidden
217 --ipv6
219 --ipv6
218 --name
220 --name
219 --noninteractive
221 --noninteractive
220 --pager
222 --pager
221 --pid-file
223 --pid-file
222 --port
224 --port
223 --prefix
225 --prefix
224 --print-url
226 --print-url
225 --profile
227 --profile
226 --quiet
228 --quiet
227 --repository
229 --repository
228 --stdio
230 --stdio
229 --style
231 --style
230 --subrepos
232 --subrepos
231 --templates
233 --templates
232 --time
234 --time
233 --traceback
235 --traceback
234 --verbose
236 --verbose
235 --version
237 --version
236 --web-conf
238 --web-conf
237 -6
239 -6
238 -A
240 -A
239 -E
241 -E
240 -R
242 -R
241 -S
243 -S
242 -a
244 -a
243 -d
245 -d
244 -h
246 -h
245 -n
247 -n
246 -p
248 -p
247 -q
249 -q
248 -t
250 -t
249 -v
251 -v
250 -y
252 -y
251
253
252 Show an error if we use --options with an ambiguous abbreviation
254 Show an error if we use --options with an ambiguous abbreviation
253 $ hg debugcomplete --options s
255 $ hg debugcomplete --options s
254 hg: command 's' is ambiguous:
256 hg: command 's' is ambiguous:
255 serve shelve showconfig status summary
257 serve shelve showconfig status summary
256 [10]
258 [10]
257
259
258 Show all commands + options
260 Show all commands + options
259 $ hg debugcommands
261 $ hg debugcommands
260 abort: dry-run
262 abort: dry-run
261 add: include, exclude, subrepos, dry-run
263 add: include, exclude, subrepos, dry-run
262 addremove: similarity, subrepos, include, exclude, dry-run
264 addremove: similarity, subrepos, include, exclude, dry-run
265 admin::chainsaw-update: purge-unknown, purge-ignored, rev, source, dest, initial-clone-minimal
263 admin::verify: check, option
266 admin::verify: check, option
264 annotate: rev, follow, no-follow, text, user, file, date, number, changeset, line-number, skip, line-range, ignore-all-space, ignore-space-change, ignore-blank-lines, ignore-space-at-eol, include, exclude, template
267 annotate: rev, follow, no-follow, text, user, file, date, number, changeset, line-number, skip, line-range, ignore-all-space, ignore-space-change, ignore-blank-lines, ignore-space-at-eol, include, exclude, template
265 archive: no-decode, prefix, rev, type, subrepos, include, exclude
268 archive: no-decode, prefix, rev, type, subrepos, include, exclude
266 backout: merge, commit, no-commit, parent, rev, edit, tool, include, exclude, message, logfile, date, user
269 backout: merge, commit, no-commit, parent, rev, edit, tool, include, exclude, message, logfile, date, user
267 bisect: reset, good, bad, skip, extend, command, noupdate
270 bisect: reset, good, bad, skip, extend, command, noupdate
268 bookmarks: force, rev, delete, rename, inactive, list, template
271 bookmarks: force, rev, delete, rename, inactive, list, template
269 branch: force, clean, rev
272 branch: force, clean, rev
270 branches: active, closed, rev, template
273 branches: active, closed, rev, template
271 bundle: exact, force, rev, branch, base, all, type, ssh, remotecmd, insecure
274 bundle: exact, force, rev, branch, base, all, type, ssh, remotecmd, insecure
272 cat: output, rev, decode, include, exclude, template
275 cat: output, rev, decode, include, exclude, template
273 clone: noupdate, updaterev, rev, branch, pull, uncompressed, stream, ssh, remotecmd, insecure
276 clone: noupdate, updaterev, rev, branch, pull, uncompressed, stream, ssh, remotecmd, insecure
274 commit: addremove, close-branch, amend, secret, draft, edit, force-close-branch, interactive, include, exclude, message, logfile, date, user, subrepos
277 commit: addremove, close-branch, amend, secret, draft, edit, force-close-branch, interactive, include, exclude, message, logfile, date, user, subrepos
275 config: untrusted, exp-all-known, edit, local, source, shared, non-shared, global, template
278 config: untrusted, exp-all-known, edit, local, source, shared, non-shared, global, template
276 continue: dry-run
279 continue: dry-run
277 copy: forget, after, at-rev, force, include, exclude, dry-run
280 copy: forget, after, at-rev, force, include, exclude, dry-run
278 debug-delta-find: changelog, manifest, dir, template, source
281 debug-delta-find: changelog, manifest, dir, template, source
279 debug-repair-issue6528: to-report, from-report, paranoid, dry-run
282 debug-repair-issue6528: to-report, from-report, paranoid, dry-run
280 debug-revlog-index: changelog, manifest, dir, template
283 debug-revlog-index: changelog, manifest, dir, template
281 debug-revlog-stats: changelog, manifest, filelogs, template
284 debug-revlog-stats: changelog, manifest, filelogs, template
282 debug::stable-tail-sort: template
285 debug::stable-tail-sort: template
283 debug::stable-tail-sort-leaps: template, specific
286 debug::stable-tail-sort-leaps: template, specific
284 debug::unbundle: update
287 debug::unbundle: update
285 debugancestor:
288 debugancestor:
286 debugantivirusrunning:
289 debugantivirusrunning:
287 debugapplystreamclonebundle:
290 debugapplystreamclonebundle:
288 debugbackupbundle: recover, patch, git, limit, no-merges, stat, graph, style, template
291 debugbackupbundle: recover, patch, git, limit, no-merges, stat, graph, style, template
289 debugbuilddag: mergeable-file, overwritten-file, new-file, from-existing
292 debugbuilddag: mergeable-file, overwritten-file, new-file, from-existing
290 debugbundle: all, part-type, spec
293 debugbundle: all, part-type, spec
291 debugcapabilities:
294 debugcapabilities:
292 debugchangedfiles: compute
295 debugchangedfiles: compute
293 debugcheckstate:
296 debugcheckstate:
294 debugcolor: style
297 debugcolor: style
295 debugcommands:
298 debugcommands:
296 debugcomplete: options
299 debugcomplete: options
297 debugcreatestreamclonebundle:
300 debugcreatestreamclonebundle:
298 debugdag: tags, branches, dots, spaces
301 debugdag: tags, branches, dots, spaces
299 debugdata: changelog, manifest, dir
302 debugdata: changelog, manifest, dir
300 debugdate: extended
303 debugdate: extended
301 debugdeltachain: rev, all-info, size-info, dist-info, sparse-info, changelog, manifest, dir, template
304 debugdeltachain: rev, all-info, size-info, dist-info, sparse-info, changelog, manifest, dir, template
302 debugdirstateignorepatternshash:
305 debugdirstateignorepatternshash:
303 debugdirstate: nodates, dates, datesort, docket, all
306 debugdirstate: nodates, dates, datesort, docket, all
304 debugdiscovery: old, nonheads, rev, seed, local-as-revs, remote-as-revs, ssh, remotecmd, insecure, template
307 debugdiscovery: old, nonheads, rev, seed, local-as-revs, remote-as-revs, ssh, remotecmd, insecure, template
305 debugdownload: output
308 debugdownload: output
306 debugextensions: template
309 debugextensions: template
307 debugfileset: rev, all-files, show-matcher, show-stage
310 debugfileset: rev, all-files, show-matcher, show-stage
308 debugformat: template
311 debugformat: template
309 debugfsinfo:
312 debugfsinfo:
310 debuggetbundle: head, common, type
313 debuggetbundle: head, common, type
311 debugignore:
314 debugignore:
312 debugindexdot: changelog, manifest, dir
315 debugindexdot: changelog, manifest, dir
313 debugindexstats:
316 debugindexstats:
314 debuginstall: template
317 debuginstall: template
315 debugknown:
318 debugknown:
316 debuglabelcomplete:
319 debuglabelcomplete:
317 debuglocks: force-free-lock, force-free-wlock, set-lock, set-wlock
320 debuglocks: force-free-lock, force-free-wlock, set-lock, set-wlock
318 debugmanifestfulltextcache: clear, add
321 debugmanifestfulltextcache: clear, add
319 debugmergestate: style, template
322 debugmergestate: style, template
320 debugnamecomplete:
323 debugnamecomplete:
321 debugnodemap: changelog, manifest, dir, dump-new, dump-disk, check, metadata
324 debugnodemap: changelog, manifest, dir, dump-new, dump-disk, check, metadata
322 debugobsolete: flags, record-parents, rev, exclusive, index, delete, date, user, template
325 debugobsolete: flags, record-parents, rev, exclusive, index, delete, date, user, template
323 debugp1copies: rev
326 debugp1copies: rev
324 debugp2copies: rev
327 debugp2copies: rev
325 debugpathcomplete: full, normal, added, removed
328 debugpathcomplete: full, normal, added, removed
326 debugpathcopies: include, exclude
329 debugpathcopies: include, exclude
327 debugpeer:
330 debugpeer:
328 debugpickmergetool: rev, changedelete, include, exclude, tool
331 debugpickmergetool: rev, changedelete, include, exclude, tool
329 debugpushkey:
332 debugpushkey:
330 debugpvec:
333 debugpvec:
331 debugrebuilddirstate: rev, minimal
334 debugrebuilddirstate: rev, minimal
332 debugrebuildfncache: only-data
335 debugrebuildfncache: only-data
333 debugrename: rev
336 debugrename: rev
334 debugrequires:
337 debugrequires:
335 debugrevlog: changelog, manifest, dir, dump
338 debugrevlog: changelog, manifest, dir, dump
336 debugrevlogindex: changelog, manifest, dir, format
339 debugrevlogindex: changelog, manifest, dir, format
337 debugrevspec: optimize, show-revs, show-set, show-stage, no-optimized, verify-optimized
340 debugrevspec: optimize, show-revs, show-set, show-stage, no-optimized, verify-optimized
338 debugserve: sshstdio, logiofd, logiofile
341 debugserve: sshstdio, logiofd, logiofile
339 debugsetparents:
342 debugsetparents:
340 debugshell: command
343 debugshell: command
341 debugsidedata: changelog, manifest, dir
344 debugsidedata: changelog, manifest, dir
342 debugssl:
345 debugssl:
343 debugstrip: rev, force, no-backup, nobackup, , keep, bookmark, soft
346 debugstrip: rev, force, no-backup, nobackup, , keep, bookmark, soft
344 debugsub: rev
347 debugsub: rev
345 debugsuccessorssets: closest
348 debugsuccessorssets: closest
346 debugtagscache:
349 debugtagscache:
347 debugtemplate: rev, define
350 debugtemplate: rev, define
348 debuguigetpass: prompt
351 debuguigetpass: prompt
349 debuguiprompt: prompt
352 debuguiprompt: prompt
350 debugupdatecaches:
353 debugupdatecaches:
351 debugupgraderepo: optimize, run, backup, changelog, manifest, filelogs
354 debugupgraderepo: optimize, run, backup, changelog, manifest, filelogs
352 debugwalk: include, exclude
355 debugwalk: include, exclude
353 debugwhyunstable:
356 debugwhyunstable:
354 debugwireargs: three, four, five, ssh, remotecmd, insecure
357 debugwireargs: three, four, five, ssh, remotecmd, insecure
355 debugwireproto: localssh, peer, noreadstderr, nologhandshake, ssh, remotecmd, insecure
358 debugwireproto: localssh, peer, noreadstderr, nologhandshake, ssh, remotecmd, insecure
356 diff: rev, from, to, change, text, git, binary, nodates, noprefix, show-function, reverse, ignore-all-space, ignore-space-change, ignore-blank-lines, ignore-space-at-eol, unified, stat, root, include, exclude, subrepos
359 diff: rev, from, to, change, text, git, binary, nodates, noprefix, show-function, reverse, ignore-all-space, ignore-space-change, ignore-blank-lines, ignore-space-at-eol, unified, stat, root, include, exclude, subrepos
357 export: bookmark, output, switch-parent, rev, text, git, binary, nodates, template
360 export: bookmark, output, switch-parent, rev, text, git, binary, nodates, template
358 files: rev, print0, include, exclude, template, subrepos
361 files: rev, print0, include, exclude, template, subrepos
359 forget: interactive, include, exclude, dry-run
362 forget: interactive, include, exclude, dry-run
360 graft: rev, base, continue, stop, abort, edit, log, no-commit, force, currentdate, currentuser, date, user, tool, dry-run
363 graft: rev, base, continue, stop, abort, edit, log, no-commit, force, currentdate, currentuser, date, user, tool, dry-run
361 grep: print0, all, diff, text, follow, ignore-case, files-with-matches, line-number, rev, all-files, user, date, template, include, exclude
364 grep: print0, all, diff, text, follow, ignore-case, files-with-matches, line-number, rev, all-files, user, date, template, include, exclude
362 heads: rev, topo, active, closed, style, template
365 heads: rev, topo, active, closed, style, template
363 help: extension, command, keyword, system
366 help: extension, command, keyword, system
364 identify: rev, num, id, branch, tags, bookmarks, ssh, remotecmd, insecure, template
367 identify: rev, num, id, branch, tags, bookmarks, ssh, remotecmd, insecure, template
365 import: strip, base, secret, edit, force, no-commit, bypass, partial, exact, prefix, import-branch, message, logfile, date, user, similarity
368 import: strip, base, secret, edit, force, no-commit, bypass, partial, exact, prefix, import-branch, message, logfile, date, user, similarity
366 incoming: force, newest-first, bundle, rev, bookmarks, branch, patch, git, limit, no-merges, stat, graph, style, template, ssh, remotecmd, insecure, subrepos
369 incoming: force, newest-first, bundle, rev, bookmarks, branch, patch, git, limit, no-merges, stat, graph, style, template, ssh, remotecmd, insecure, subrepos
367 init: ssh, remotecmd, insecure
370 init: ssh, remotecmd, insecure
368 locate: rev, print0, fullpath, include, exclude
371 locate: rev, print0, fullpath, include, exclude
369 log: follow, follow-first, date, copies, keyword, rev, line-range, removed, only-merges, user, only-branch, branch, bookmark, prune, patch, git, limit, no-merges, stat, graph, style, template, include, exclude
372 log: follow, follow-first, date, copies, keyword, rev, line-range, removed, only-merges, user, only-branch, branch, bookmark, prune, patch, git, limit, no-merges, stat, graph, style, template, include, exclude
370 manifest: rev, all, template
373 manifest: rev, all, template
371 merge: force, rev, preview, abort, tool
374 merge: force, rev, preview, abort, tool
372 outgoing: force, rev, newest-first, bookmarks, branch, patch, git, limit, no-merges, stat, graph, style, template, ssh, remotecmd, insecure, subrepos
375 outgoing: force, rev, newest-first, bookmarks, branch, patch, git, limit, no-merges, stat, graph, style, template, ssh, remotecmd, insecure, subrepos
373 parents: rev, style, template
376 parents: rev, style, template
374 paths: template
377 paths: template
375 phase: public, draft, secret, force, rev
378 phase: public, draft, secret, force, rev
376 pull: update, force, confirm, rev, bookmark, branch, remote-hidden, ssh, remotecmd, insecure
379 pull: update, force, confirm, rev, bookmark, branch, remote-hidden, ssh, remotecmd, insecure
377 purge: abort-on-err, all, ignored, dirs, files, print, print0, confirm, include, exclude
380 purge: abort-on-err, all, ignored, dirs, files, print, print0, confirm, include, exclude
378 push: force, rev, bookmark, all-bookmarks, branch, new-branch, pushvars, publish, ssh, remotecmd, insecure
381 push: force, rev, bookmark, all-bookmarks, branch, new-branch, pushvars, publish, ssh, remotecmd, insecure
379 recover: verify
382 recover: verify
380 remove: after, force, subrepos, include, exclude, dry-run
383 remove: after, force, subrepos, include, exclude, dry-run
381 rename: forget, after, at-rev, force, include, exclude, dry-run
384 rename: forget, after, at-rev, force, include, exclude, dry-run
382 resolve: all, list, mark, unmark, no-status, re-merge, tool, include, exclude, template
385 resolve: all, list, mark, unmark, no-status, re-merge, tool, include, exclude, template
383 revert: all, date, rev, no-backup, interactive, include, exclude, dry-run
386 revert: all, date, rev, no-backup, interactive, include, exclude, dry-run
384 rollback: dry-run, force
387 rollback: dry-run, force
385 root: template
388 root: template
386 serve: accesslog, daemon, daemon-postexec, errorlog, port, address, prefix, name, web-conf, webdir-conf, pid-file, stdio, cmdserver, templates, style, ipv6, certificate, print-url, subrepos
389 serve: accesslog, daemon, daemon-postexec, errorlog, port, address, prefix, name, web-conf, webdir-conf, pid-file, stdio, cmdserver, templates, style, ipv6, certificate, print-url, subrepos
387 shelve: addremove, unknown, cleanup, date, delete, edit, keep, list, message, name, patch, interactive, stat, include, exclude
390 shelve: addremove, unknown, cleanup, date, delete, edit, keep, list, message, name, patch, interactive, stat, include, exclude
388 status: all, modified, added, removed, deleted, clean, unknown, ignored, no-status, terse, copies, print0, rev, change, include, exclude, subrepos, template
391 status: all, modified, added, removed, deleted, clean, unknown, ignored, no-status, terse, copies, print0, rev, change, include, exclude, subrepos, template
389 summary: remote
392 summary: remote
390 tag: force, local, rev, remove, edit, message, date, user
393 tag: force, local, rev, remove, edit, message, date, user
391 tags: template
394 tags: template
392 tip: patch, git, style, template
395 tip: patch, git, style, template
393 unbundle: update
396 unbundle: update
394 unshelve: abort, continue, interactive, keep, name, tool, date
397 unshelve: abort, continue, interactive, keep, name, tool, date
395 update: clean, check, merge, date, rev, tool
398 update: clean, check, merge, date, rev, tool
396 verify: full
399 verify: full
397 version: template
400 version: template
398
401
399 $ hg init a
402 $ hg init a
400 $ cd a
403 $ cd a
401 $ echo fee > fee
404 $ echo fee > fee
402 $ hg ci -q -Amfee
405 $ hg ci -q -Amfee
403 $ hg tag fee
406 $ hg tag fee
404 $ mkdir fie
407 $ mkdir fie
405 $ echo dead > fie/dead
408 $ echo dead > fie/dead
406 $ echo live > fie/live
409 $ echo live > fie/live
407 $ hg bookmark fo
410 $ hg bookmark fo
408 $ hg branch -q fie
411 $ hg branch -q fie
409 $ hg ci -q -Amfie
412 $ hg ci -q -Amfie
410 $ echo fo > fo
413 $ echo fo > fo
411 $ hg branch -qf default
414 $ hg branch -qf default
412 $ hg ci -q -Amfo
415 $ hg ci -q -Amfo
413 $ echo Fum > Fum
416 $ echo Fum > Fum
414 $ hg ci -q -AmFum
417 $ hg ci -q -AmFum
415 $ hg bookmark Fum
418 $ hg bookmark Fum
416
419
417 Test debugpathcomplete
420 Test debugpathcomplete
418
421
419 $ hg debugpathcomplete f
422 $ hg debugpathcomplete f
420 fee
423 fee
421 fie
424 fie
422 fo
425 fo
423 $ hg debugpathcomplete -f f
426 $ hg debugpathcomplete -f f
424 fee
427 fee
425 fie/dead
428 fie/dead
426 fie/live
429 fie/live
427 fo
430 fo
428
431
429 $ hg rm Fum
432 $ hg rm Fum
430 $ hg debugpathcomplete -r F
433 $ hg debugpathcomplete -r F
431 Fum
434 Fum
432
435
433 Test debugnamecomplete
436 Test debugnamecomplete
434
437
435 $ hg debugnamecomplete
438 $ hg debugnamecomplete
436 Fum
439 Fum
437 default
440 default
438 fee
441 fee
439 fie
442 fie
440 fo
443 fo
441 tip
444 tip
442 $ hg debugnamecomplete f
445 $ hg debugnamecomplete f
443 fee
446 fee
444 fie
447 fie
445 fo
448 fo
446
449
447 Test debuglabelcomplete, a deprecated name for debugnamecomplete that is still
450 Test debuglabelcomplete, a deprecated name for debugnamecomplete that is still
448 used for completions in some shells.
451 used for completions in some shells.
449
452
450 $ hg debuglabelcomplete
453 $ hg debuglabelcomplete
451 Fum
454 Fum
452 default
455 default
453 fee
456 fee
454 fie
457 fie
455 fo
458 fo
456 tip
459 tip
457 $ hg debuglabelcomplete f
460 $ hg debuglabelcomplete f
458 fee
461 fee
459 fie
462 fie
460 fo
463 fo
@@ -1,4108 +1,4118 b''
1 Short help:
1 Short help:
2
2
3 $ hg
3 $ hg
4 Mercurial Distributed SCM
4 Mercurial Distributed SCM
5
5
6 basic commands:
6 basic commands:
7
7
8 add add the specified files on the next commit
8 add add the specified files on the next commit
9 annotate show changeset information by line for each file
9 annotate show changeset information by line for each file
10 clone make a copy of an existing repository
10 clone make a copy of an existing repository
11 commit commit the specified files or all outstanding changes
11 commit commit the specified files or all outstanding changes
12 diff diff repository (or selected files)
12 diff diff repository (or selected files)
13 export dump the header and diffs for one or more changesets
13 export dump the header and diffs for one or more changesets
14 forget forget the specified files on the next commit
14 forget forget the specified files on the next commit
15 init create a new repository in the given directory
15 init create a new repository in the given directory
16 log show revision history of entire repository or files
16 log show revision history of entire repository or files
17 merge merge another revision into working directory
17 merge merge another revision into working directory
18 pull pull changes from the specified source
18 pull pull changes from the specified source
19 push push changes to the specified destination
19 push push changes to the specified destination
20 remove remove the specified files on the next commit
20 remove remove the specified files on the next commit
21 serve start stand-alone webserver
21 serve start stand-alone webserver
22 status show changed files in the working directory
22 status show changed files in the working directory
23 summary summarize working directory state
23 summary summarize working directory state
24 update update working directory (or switch revisions)
24 update update working directory (or switch revisions)
25
25
26 (use 'hg help' for the full list of commands or 'hg -v' for details)
26 (use 'hg help' for the full list of commands or 'hg -v' for details)
27
27
28 $ hg -q
28 $ hg -q
29 add add the specified files on the next commit
29 add add the specified files on the next commit
30 annotate show changeset information by line for each file
30 annotate show changeset information by line for each file
31 clone make a copy of an existing repository
31 clone make a copy of an existing repository
32 commit commit the specified files or all outstanding changes
32 commit commit the specified files or all outstanding changes
33 diff diff repository (or selected files)
33 diff diff repository (or selected files)
34 export dump the header and diffs for one or more changesets
34 export dump the header and diffs for one or more changesets
35 forget forget the specified files on the next commit
35 forget forget the specified files on the next commit
36 init create a new repository in the given directory
36 init create a new repository in the given directory
37 log show revision history of entire repository or files
37 log show revision history of entire repository or files
38 merge merge another revision into working directory
38 merge merge another revision into working directory
39 pull pull changes from the specified source
39 pull pull changes from the specified source
40 push push changes to the specified destination
40 push push changes to the specified destination
41 remove remove the specified files on the next commit
41 remove remove the specified files on the next commit
42 serve start stand-alone webserver
42 serve start stand-alone webserver
43 status show changed files in the working directory
43 status show changed files in the working directory
44 summary summarize working directory state
44 summary summarize working directory state
45 update update working directory (or switch revisions)
45 update update working directory (or switch revisions)
46
46
47 Extra extensions will be printed in help output in a non-reliable order since
47 Extra extensions will be printed in help output in a non-reliable order since
48 the extension is unknown.
48 the extension is unknown.
49 #if no-extraextensions
49 #if no-extraextensions
50
50
51 $ hg help
51 $ hg help
52 Mercurial Distributed SCM
52 Mercurial Distributed SCM
53
53
54 list of commands:
54 list of commands:
55
55
56 Repository creation:
56 Repository creation:
57
57
58 clone make a copy of an existing repository
58 clone make a copy of an existing repository
59 init create a new repository in the given directory
59 init create a new repository in the given directory
60
60
61 Remote repository management:
61 Remote repository management:
62
62
63 incoming show new changesets found in source
63 incoming show new changesets found in source
64 outgoing show changesets not found in the destination
64 outgoing show changesets not found in the destination
65 paths show aliases for remote repositories
65 paths show aliases for remote repositories
66 pull pull changes from the specified source
66 pull pull changes from the specified source
67 push push changes to the specified destination
67 push push changes to the specified destination
68 serve start stand-alone webserver
68 serve start stand-alone webserver
69
69
70 Change creation:
70 Change creation:
71
71
72 commit commit the specified files or all outstanding changes
72 commit commit the specified files or all outstanding changes
73
73
74 Change manipulation:
74 Change manipulation:
75
75
76 backout reverse effect of earlier changeset
76 backout reverse effect of earlier changeset
77 graft copy changes from other branches onto the current branch
77 graft copy changes from other branches onto the current branch
78 merge merge another revision into working directory
78 merge merge another revision into working directory
79
79
80 Change organization:
80 Change organization:
81
81
82 bookmarks create a new bookmark or list existing bookmarks
82 bookmarks create a new bookmark or list existing bookmarks
83 branch set or show the current branch name
83 branch set or show the current branch name
84 branches list repository named branches
84 branches list repository named branches
85 phase set or show the current phase name
85 phase set or show the current phase name
86 tag add one or more tags for the current or given revision
86 tag add one or more tags for the current or given revision
87 tags list repository tags
87 tags list repository tags
88
88
89 File content management:
89 File content management:
90
90
91 annotate show changeset information by line for each file
91 annotate show changeset information by line for each file
92 cat output the current or given revision of files
92 cat output the current or given revision of files
93 copy mark files as copied for the next commit
93 copy mark files as copied for the next commit
94 diff diff repository (or selected files)
94 diff diff repository (or selected files)
95 grep search for a pattern in specified files
95 grep search for a pattern in specified files
96
96
97 Change navigation:
97 Change navigation:
98
98
99 bisect subdivision search of changesets
99 bisect subdivision search of changesets
100 heads show branch heads
100 heads show branch heads
101 identify identify the working directory or specified revision
101 identify identify the working directory or specified revision
102 log show revision history of entire repository or files
102 log show revision history of entire repository or files
103
103
104 Working directory management:
104 Working directory management:
105
105
106 add add the specified files on the next commit
106 add add the specified files on the next commit
107 addremove add all new files, delete all missing files
107 addremove add all new files, delete all missing files
108 files list tracked files
108 files list tracked files
109 forget forget the specified files on the next commit
109 forget forget the specified files on the next commit
110 purge removes files not tracked by Mercurial
110 purge removes files not tracked by Mercurial
111 remove remove the specified files on the next commit
111 remove remove the specified files on the next commit
112 rename rename files; equivalent of copy + remove
112 rename rename files; equivalent of copy + remove
113 resolve redo merges or set/view the merge status of files
113 resolve redo merges or set/view the merge status of files
114 revert restore files to their checkout state
114 revert restore files to their checkout state
115 root print the root (top) of the current working directory
115 root print the root (top) of the current working directory
116 shelve save and set aside changes from the working directory
116 shelve save and set aside changes from the working directory
117 status show changed files in the working directory
117 status show changed files in the working directory
118 summary summarize working directory state
118 summary summarize working directory state
119 unshelve restore a shelved change to the working directory
119 unshelve restore a shelved change to the working directory
120 update update working directory (or switch revisions)
120 update update working directory (or switch revisions)
121
121
122 Change import/export:
122 Change import/export:
123
123
124 archive create an unversioned archive of a repository revision
124 archive create an unversioned archive of a repository revision
125 bundle create a bundle file
125 bundle create a bundle file
126 export dump the header and diffs for one or more changesets
126 export dump the header and diffs for one or more changesets
127 import import an ordered set of patches
127 import import an ordered set of patches
128 unbundle apply one or more bundle files
128 unbundle apply one or more bundle files
129
129
130 Repository maintenance:
130 Repository maintenance:
131
131
132 admin::verify
132 admin::verify
133 verify the integrity of the repository
133 verify the integrity of the repository
134 manifest output the current or given revision of the project manifest
134 manifest output the current or given revision of the project manifest
135 recover roll back an interrupted transaction
135 recover roll back an interrupted transaction
136 verify verify the integrity of the repository
136 verify verify the integrity of the repository
137
137
138 Help:
138 Help:
139
139
140 config show combined config settings from all hgrc files
140 config show combined config settings from all hgrc files
141 help show help for a given topic or a help overview
141 help show help for a given topic or a help overview
142 version output version and copyright information
142 version output version and copyright information
143
143
144 additional help topics:
144 additional help topics:
145
145
146 Mercurial identifiers:
146 Mercurial identifiers:
147
147
148 filesets Specifying File Sets
148 filesets Specifying File Sets
149 hgignore Syntax for Mercurial Ignore Files
149 hgignore Syntax for Mercurial Ignore Files
150 patterns File Name Patterns
150 patterns File Name Patterns
151 revisions Specifying Revisions
151 revisions Specifying Revisions
152 urls URL Paths
152 urls URL Paths
153
153
154 Mercurial output:
154 Mercurial output:
155
155
156 color Colorizing Outputs
156 color Colorizing Outputs
157 dates Date Formats
157 dates Date Formats
158 diffs Diff Formats
158 diffs Diff Formats
159 templating Template Usage
159 templating Template Usage
160
160
161 Mercurial configuration:
161 Mercurial configuration:
162
162
163 config Configuration Files
163 config Configuration Files
164 environment Environment Variables
164 environment Environment Variables
165 extensions Using Additional Features
165 extensions Using Additional Features
166 flags Command-line flags
166 flags Command-line flags
167 hgweb Configuring hgweb
167 hgweb Configuring hgweb
168 merge-tools Merge Tools
168 merge-tools Merge Tools
169 pager Pager Support
169 pager Pager Support
170 rust Rust in Mercurial
170 rust Rust in Mercurial
171
171
172 Concepts:
172 Concepts:
173
173
174 bundlespec Bundle File Formats
174 bundlespec Bundle File Formats
175 evolution Safely rewriting history (EXPERIMENTAL)
175 evolution Safely rewriting history (EXPERIMENTAL)
176 glossary Glossary
176 glossary Glossary
177 phases Working with Phases
177 phases Working with Phases
178 subrepos Subrepositories
178 subrepos Subrepositories
179
179
180 Miscellaneous:
180 Miscellaneous:
181
181
182 deprecated Deprecated Features
182 deprecated Deprecated Features
183 internals Technical implementation topics
183 internals Technical implementation topics
184 scripting Using Mercurial from scripts and automation
184 scripting Using Mercurial from scripts and automation
185
185
186 (use 'hg help -v' to show built-in aliases and global options)
186 (use 'hg help -v' to show built-in aliases and global options)
187
187
188 $ hg -q help
188 $ hg -q help
189 Repository creation:
189 Repository creation:
190
190
191 clone make a copy of an existing repository
191 clone make a copy of an existing repository
192 init create a new repository in the given directory
192 init create a new repository in the given directory
193
193
194 Remote repository management:
194 Remote repository management:
195
195
196 incoming show new changesets found in source
196 incoming show new changesets found in source
197 outgoing show changesets not found in the destination
197 outgoing show changesets not found in the destination
198 paths show aliases for remote repositories
198 paths show aliases for remote repositories
199 pull pull changes from the specified source
199 pull pull changes from the specified source
200 push push changes to the specified destination
200 push push changes to the specified destination
201 serve start stand-alone webserver
201 serve start stand-alone webserver
202
202
203 Change creation:
203 Change creation:
204
204
205 commit commit the specified files or all outstanding changes
205 commit commit the specified files or all outstanding changes
206
206
207 Change manipulation:
207 Change manipulation:
208
208
209 backout reverse effect of earlier changeset
209 backout reverse effect of earlier changeset
210 graft copy changes from other branches onto the current branch
210 graft copy changes from other branches onto the current branch
211 merge merge another revision into working directory
211 merge merge another revision into working directory
212
212
213 Change organization:
213 Change organization:
214
214
215 bookmarks create a new bookmark or list existing bookmarks
215 bookmarks create a new bookmark or list existing bookmarks
216 branch set or show the current branch name
216 branch set or show the current branch name
217 branches list repository named branches
217 branches list repository named branches
218 phase set or show the current phase name
218 phase set or show the current phase name
219 tag add one or more tags for the current or given revision
219 tag add one or more tags for the current or given revision
220 tags list repository tags
220 tags list repository tags
221
221
222 File content management:
222 File content management:
223
223
224 annotate show changeset information by line for each file
224 annotate show changeset information by line for each file
225 cat output the current or given revision of files
225 cat output the current or given revision of files
226 copy mark files as copied for the next commit
226 copy mark files as copied for the next commit
227 diff diff repository (or selected files)
227 diff diff repository (or selected files)
228 grep search for a pattern in specified files
228 grep search for a pattern in specified files
229
229
230 Change navigation:
230 Change navigation:
231
231
232 bisect subdivision search of changesets
232 bisect subdivision search of changesets
233 heads show branch heads
233 heads show branch heads
234 identify identify the working directory or specified revision
234 identify identify the working directory or specified revision
235 log show revision history of entire repository or files
235 log show revision history of entire repository or files
236
236
237 Working directory management:
237 Working directory management:
238
238
239 add add the specified files on the next commit
239 add add the specified files on the next commit
240 addremove add all new files, delete all missing files
240 addremove add all new files, delete all missing files
241 files list tracked files
241 files list tracked files
242 forget forget the specified files on the next commit
242 forget forget the specified files on the next commit
243 purge removes files not tracked by Mercurial
243 purge removes files not tracked by Mercurial
244 remove remove the specified files on the next commit
244 remove remove the specified files on the next commit
245 rename rename files; equivalent of copy + remove
245 rename rename files; equivalent of copy + remove
246 resolve redo merges or set/view the merge status of files
246 resolve redo merges or set/view the merge status of files
247 revert restore files to their checkout state
247 revert restore files to their checkout state
248 root print the root (top) of the current working directory
248 root print the root (top) of the current working directory
249 shelve save and set aside changes from the working directory
249 shelve save and set aside changes from the working directory
250 status show changed files in the working directory
250 status show changed files in the working directory
251 summary summarize working directory state
251 summary summarize working directory state
252 unshelve restore a shelved change to the working directory
252 unshelve restore a shelved change to the working directory
253 update update working directory (or switch revisions)
253 update update working directory (or switch revisions)
254
254
255 Change import/export:
255 Change import/export:
256
256
257 archive create an unversioned archive of a repository revision
257 archive create an unversioned archive of a repository revision
258 bundle create a bundle file
258 bundle create a bundle file
259 export dump the header and diffs for one or more changesets
259 export dump the header and diffs for one or more changesets
260 import import an ordered set of patches
260 import import an ordered set of patches
261 unbundle apply one or more bundle files
261 unbundle apply one or more bundle files
262
262
263 Repository maintenance:
263 Repository maintenance:
264
264
265 admin::verify
265 admin::verify
266 verify the integrity of the repository
266 verify the integrity of the repository
267 manifest output the current or given revision of the project manifest
267 manifest output the current or given revision of the project manifest
268 recover roll back an interrupted transaction
268 recover roll back an interrupted transaction
269 verify verify the integrity of the repository
269 verify verify the integrity of the repository
270
270
271 Help:
271 Help:
272
272
273 config show combined config settings from all hgrc files
273 config show combined config settings from all hgrc files
274 help show help for a given topic or a help overview
274 help show help for a given topic or a help overview
275 version output version and copyright information
275 version output version and copyright information
276
276
277 additional help topics:
277 additional help topics:
278
278
279 Mercurial identifiers:
279 Mercurial identifiers:
280
280
281 filesets Specifying File Sets
281 filesets Specifying File Sets
282 hgignore Syntax for Mercurial Ignore Files
282 hgignore Syntax for Mercurial Ignore Files
283 patterns File Name Patterns
283 patterns File Name Patterns
284 revisions Specifying Revisions
284 revisions Specifying Revisions
285 urls URL Paths
285 urls URL Paths
286
286
287 Mercurial output:
287 Mercurial output:
288
288
289 color Colorizing Outputs
289 color Colorizing Outputs
290 dates Date Formats
290 dates Date Formats
291 diffs Diff Formats
291 diffs Diff Formats
292 templating Template Usage
292 templating Template Usage
293
293
294 Mercurial configuration:
294 Mercurial configuration:
295
295
296 config Configuration Files
296 config Configuration Files
297 environment Environment Variables
297 environment Environment Variables
298 extensions Using Additional Features
298 extensions Using Additional Features
299 flags Command-line flags
299 flags Command-line flags
300 hgweb Configuring hgweb
300 hgweb Configuring hgweb
301 merge-tools Merge Tools
301 merge-tools Merge Tools
302 pager Pager Support
302 pager Pager Support
303 rust Rust in Mercurial
303 rust Rust in Mercurial
304
304
305 Concepts:
305 Concepts:
306
306
307 bundlespec Bundle File Formats
307 bundlespec Bundle File Formats
308 evolution Safely rewriting history (EXPERIMENTAL)
308 evolution Safely rewriting history (EXPERIMENTAL)
309 glossary Glossary
309 glossary Glossary
310 phases Working with Phases
310 phases Working with Phases
311 subrepos Subrepositories
311 subrepos Subrepositories
312
312
313 Miscellaneous:
313 Miscellaneous:
314
314
315 deprecated Deprecated Features
315 deprecated Deprecated Features
316 internals Technical implementation topics
316 internals Technical implementation topics
317 scripting Using Mercurial from scripts and automation
317 scripting Using Mercurial from scripts and automation
318
318
319 Test extension help:
319 Test extension help:
320 $ hg help extensions --config extensions.rebase= --config extensions.children=
320 $ hg help extensions --config extensions.rebase= --config extensions.children=
321 Using Additional Features
321 Using Additional Features
322 """""""""""""""""""""""""
322 """""""""""""""""""""""""
323
323
324 Mercurial has the ability to add new features through the use of
324 Mercurial has the ability to add new features through the use of
325 extensions. Extensions may add new commands, add options to existing
325 extensions. Extensions may add new commands, add options to existing
326 commands, change the default behavior of commands, or implement hooks.
326 commands, change the default behavior of commands, or implement hooks.
327
327
328 To enable the "foo" extension, either shipped with Mercurial or in the
328 To enable the "foo" extension, either shipped with Mercurial or in the
329 Python search path, create an entry for it in your configuration file,
329 Python search path, create an entry for it in your configuration file,
330 like this:
330 like this:
331
331
332 [extensions]
332 [extensions]
333 foo =
333 foo =
334
334
335 You may also specify the full path to an extension:
335 You may also specify the full path to an extension:
336
336
337 [extensions]
337 [extensions]
338 myfeature = ~/.hgext/myfeature.py
338 myfeature = ~/.hgext/myfeature.py
339
339
340 See 'hg help config' for more information on configuration files.
340 See 'hg help config' for more information on configuration files.
341
341
342 Extensions are not loaded by default for a variety of reasons: they can
342 Extensions are not loaded by default for a variety of reasons: they can
343 increase startup overhead; they may be meant for advanced usage only; they
343 increase startup overhead; they may be meant for advanced usage only; they
344 may provide potentially dangerous abilities (such as letting you destroy
344 may provide potentially dangerous abilities (such as letting you destroy
345 or modify history); they might not be ready for prime time; or they may
345 or modify history); they might not be ready for prime time; or they may
346 alter some usual behaviors of stock Mercurial. It is thus up to the user
346 alter some usual behaviors of stock Mercurial. It is thus up to the user
347 to activate extensions as needed.
347 to activate extensions as needed.
348
348
349 To explicitly disable an extension enabled in a configuration file of
349 To explicitly disable an extension enabled in a configuration file of
350 broader scope, prepend its path with !:
350 broader scope, prepend its path with !:
351
351
352 [extensions]
352 [extensions]
353 # disabling extension bar residing in /path/to/extension/bar.py
353 # disabling extension bar residing in /path/to/extension/bar.py
354 bar = !/path/to/extension/bar.py
354 bar = !/path/to/extension/bar.py
355 # ditto, but no path was supplied for extension baz
355 # ditto, but no path was supplied for extension baz
356 baz = !
356 baz = !
357
357
358 enabled extensions:
358 enabled extensions:
359
359
360 children command to display child changesets (DEPRECATED)
360 children command to display child changesets (DEPRECATED)
361 rebase command to move sets of revisions to a different ancestor
361 rebase command to move sets of revisions to a different ancestor
362
362
363 disabled extensions:
363 disabled extensions:
364
364
365 acl hooks for controlling repository access
365 acl hooks for controlling repository access
366 blackbox log repository events to a blackbox for debugging
366 blackbox log repository events to a blackbox for debugging
367 bugzilla hooks for integrating with the Bugzilla bug tracker
367 bugzilla hooks for integrating with the Bugzilla bug tracker
368 censor erase file content at a given revision
368 censor erase file content at a given revision
369 churn command to display statistics about repository history
369 churn command to display statistics about repository history
370 clonebundles advertise pre-generated bundles to seed clones
370 clonebundles advertise pre-generated bundles to seed clones
371 closehead close arbitrary heads without checking them out first
371 closehead close arbitrary heads without checking them out first
372 convert import revisions from foreign VCS repositories into
372 convert import revisions from foreign VCS repositories into
373 Mercurial
373 Mercurial
374 eol automatically manage newlines in repository files
374 eol automatically manage newlines in repository files
375 extdiff command to allow external programs to compare revisions
375 extdiff command to allow external programs to compare revisions
376 factotum http authentication with factotum
376 factotum http authentication with factotum
377 fastexport export repositories as git fast-import stream
377 fastexport export repositories as git fast-import stream
378 githelp try mapping git commands to Mercurial commands
378 githelp try mapping git commands to Mercurial commands
379 gpg commands to sign and verify changesets
379 gpg commands to sign and verify changesets
380 hgk browse the repository in a graphical way
380 hgk browse the repository in a graphical way
381 highlight syntax highlighting for hgweb (requires Pygments)
381 highlight syntax highlighting for hgweb (requires Pygments)
382 histedit interactive history editing
382 histedit interactive history editing
383 keyword expand keywords in tracked files
383 keyword expand keywords in tracked files
384 largefiles track large binary files
384 largefiles track large binary files
385 mq manage a stack of patches
385 mq manage a stack of patches
386 notify hooks for sending email push notifications
386 notify hooks for sending email push notifications
387 patchbomb command to send changesets as (a series of) patch emails
387 patchbomb command to send changesets as (a series of) patch emails
388 relink recreates hardlinks between repository clones
388 relink recreates hardlinks between repository clones
389 schemes extend schemes with shortcuts to repository swarms
389 schemes extend schemes with shortcuts to repository swarms
390 share share a common history between several working directories
390 share share a common history between several working directories
391 transplant command to transplant changesets from another branch
391 transplant command to transplant changesets from another branch
392 win32mbcs allow the use of MBCS paths with problematic encodings
392 win32mbcs allow the use of MBCS paths with problematic encodings
393 zeroconf discover and advertise repositories on the local network
393 zeroconf discover and advertise repositories on the local network
394
394
395 #endif
395 #endif
396
396
397 Verify that deprecated extensions are included if --verbose:
397 Verify that deprecated extensions are included if --verbose:
398
398
399 $ hg -v help extensions | grep children
399 $ hg -v help extensions | grep children
400 children command to display child changesets (DEPRECATED)
400 children command to display child changesets (DEPRECATED)
401
401
402 Verify that extension keywords appear in help templates
402 Verify that extension keywords appear in help templates
403
403
404 $ hg help --config extensions.transplant= templating|grep transplant > /dev/null
404 $ hg help --config extensions.transplant= templating|grep transplant > /dev/null
405
405
406 Test short command list with verbose option
406 Test short command list with verbose option
407
407
408 $ hg -v help shortlist
408 $ hg -v help shortlist
409 Mercurial Distributed SCM
409 Mercurial Distributed SCM
410
410
411 basic commands:
411 basic commands:
412
412
413 abort abort an unfinished operation (EXPERIMENTAL)
413 abort abort an unfinished operation (EXPERIMENTAL)
414 add add the specified files on the next commit
414 add add the specified files on the next commit
415 admin::chainsaw-update, admin::chainsawupdate
416 pull and update to a given revision, no matter what,
417 (EXPERIMENTAL)
415 annotate, blame
418 annotate, blame
416 show changeset information by line for each file
419 show changeset information by line for each file
417 clone make a copy of an existing repository
420 clone make a copy of an existing repository
418 commit, ci commit the specified files or all outstanding changes
421 commit, ci commit the specified files or all outstanding changes
419 continue resumes an interrupted operation (EXPERIMENTAL)
422 continue resumes an interrupted operation (EXPERIMENTAL)
420 diff diff repository (or selected files)
423 diff diff repository (or selected files)
421 export dump the header and diffs for one or more changesets
424 export dump the header and diffs for one or more changesets
422 forget forget the specified files on the next commit
425 forget forget the specified files on the next commit
423 init create a new repository in the given directory
426 init create a new repository in the given directory
424 log, history show revision history of entire repository or files
427 log, history show revision history of entire repository or files
425 merge merge another revision into working directory
428 merge merge another revision into working directory
426 pull pull changes from the specified source
429 pull pull changes from the specified source
427 push push changes to the specified destination
430 push push changes to the specified destination
428 remove, rm remove the specified files on the next commit
431 remove, rm remove the specified files on the next commit
429 serve start stand-alone webserver
432 serve start stand-alone webserver
430 status, st show changed files in the working directory
433 status, st show changed files in the working directory
431 summary, sum summarize working directory state
434 summary, sum summarize working directory state
432 update, up, checkout, co
435 update, up, checkout, co
433 update working directory (or switch revisions)
436 update working directory (or switch revisions)
434
437
435 global options ([+] can be repeated):
438 global options ([+] can be repeated):
436
439
437 -R --repository REPO repository root directory or name of overlay bundle
440 -R --repository REPO repository root directory or name of overlay bundle
438 file
441 file
439 --cwd DIR change working directory
442 --cwd DIR change working directory
440 -y --noninteractive do not prompt, automatically pick the first choice for
443 -y --noninteractive do not prompt, automatically pick the first choice for
441 all prompts
444 all prompts
442 -q --quiet suppress output
445 -q --quiet suppress output
443 -v --verbose enable additional output
446 -v --verbose enable additional output
444 --color TYPE when to colorize (boolean, always, auto, never, or
447 --color TYPE when to colorize (boolean, always, auto, never, or
445 debug)
448 debug)
446 --config CONFIG [+] set/override config option (use 'section.name=value')
449 --config CONFIG [+] set/override config option (use 'section.name=value')
447 --debug enable debugging output
450 --debug enable debugging output
448 --debugger start debugger
451 --debugger start debugger
449 --encoding ENCODE set the charset encoding (default: ascii)
452 --encoding ENCODE set the charset encoding (default: ascii)
450 --encodingmode MODE set the charset encoding mode (default: strict)
453 --encodingmode MODE set the charset encoding mode (default: strict)
451 --traceback always print a traceback on exception
454 --traceback always print a traceback on exception
452 --time time how long the command takes
455 --time time how long the command takes
453 --profile print command execution profile
456 --profile print command execution profile
454 --version output version information and exit
457 --version output version information and exit
455 -h --help display help and exit
458 -h --help display help and exit
456 --hidden consider hidden changesets
459 --hidden consider hidden changesets
457 --pager TYPE when to paginate (boolean, always, auto, or never)
460 --pager TYPE when to paginate (boolean, always, auto, or never)
458 (default: auto)
461 (default: auto)
459
462
460 (use 'hg help' for the full list of commands)
463 (use 'hg help' for the full list of commands)
461
464
462 $ hg add -h
465 $ hg add -h
463 hg add [OPTION]... [FILE]...
466 hg add [OPTION]... [FILE]...
464
467
465 add the specified files on the next commit
468 add the specified files on the next commit
466
469
467 Schedule files to be version controlled and added to the repository.
470 Schedule files to be version controlled and added to the repository.
468
471
469 The files will be added to the repository at the next commit. To undo an
472 The files will be added to the repository at the next commit. To undo an
470 add before that, see 'hg forget'.
473 add before that, see 'hg forget'.
471
474
472 If no names are given, add all files to the repository (except files
475 If no names are given, add all files to the repository (except files
473 matching ".hgignore").
476 matching ".hgignore").
474
477
475 Returns 0 if all files are successfully added.
478 Returns 0 if all files are successfully added.
476
479
477 options ([+] can be repeated):
480 options ([+] can be repeated):
478
481
479 -I --include PATTERN [+] include names matching the given patterns
482 -I --include PATTERN [+] include names matching the given patterns
480 -X --exclude PATTERN [+] exclude names matching the given patterns
483 -X --exclude PATTERN [+] exclude names matching the given patterns
481 -S --subrepos recurse into subrepositories
484 -S --subrepos recurse into subrepositories
482 -n --dry-run do not perform actions, just print output
485 -n --dry-run do not perform actions, just print output
483
486
484 (some details hidden, use --verbose to show complete help)
487 (some details hidden, use --verbose to show complete help)
485
488
486 Verbose help for add
489 Verbose help for add
487
490
488 $ hg add -hv
491 $ hg add -hv
489 hg add [OPTION]... [FILE]...
492 hg add [OPTION]... [FILE]...
490
493
491 add the specified files on the next commit
494 add the specified files on the next commit
492
495
493 Schedule files to be version controlled and added to the repository.
496 Schedule files to be version controlled and added to the repository.
494
497
495 The files will be added to the repository at the next commit. To undo an
498 The files will be added to the repository at the next commit. To undo an
496 add before that, see 'hg forget'.
499 add before that, see 'hg forget'.
497
500
498 If no names are given, add all files to the repository (except files
501 If no names are given, add all files to the repository (except files
499 matching ".hgignore").
502 matching ".hgignore").
500
503
501 Examples:
504 Examples:
502
505
503 - New (unknown) files are added automatically by 'hg add':
506 - New (unknown) files are added automatically by 'hg add':
504
507
505 $ ls
508 $ ls
506 foo.c
509 foo.c
507 $ hg status
510 $ hg status
508 ? foo.c
511 ? foo.c
509 $ hg add
512 $ hg add
510 adding foo.c
513 adding foo.c
511 $ hg status
514 $ hg status
512 A foo.c
515 A foo.c
513
516
514 - Specific files to be added can be specified:
517 - Specific files to be added can be specified:
515
518
516 $ ls
519 $ ls
517 bar.c foo.c
520 bar.c foo.c
518 $ hg status
521 $ hg status
519 ? bar.c
522 ? bar.c
520 ? foo.c
523 ? foo.c
521 $ hg add bar.c
524 $ hg add bar.c
522 $ hg status
525 $ hg status
523 A bar.c
526 A bar.c
524 ? foo.c
527 ? foo.c
525
528
526 Returns 0 if all files are successfully added.
529 Returns 0 if all files are successfully added.
527
530
528 options ([+] can be repeated):
531 options ([+] can be repeated):
529
532
530 -I --include PATTERN [+] include names matching the given patterns
533 -I --include PATTERN [+] include names matching the given patterns
531 -X --exclude PATTERN [+] exclude names matching the given patterns
534 -X --exclude PATTERN [+] exclude names matching the given patterns
532 -S --subrepos recurse into subrepositories
535 -S --subrepos recurse into subrepositories
533 -n --dry-run do not perform actions, just print output
536 -n --dry-run do not perform actions, just print output
534
537
535 global options ([+] can be repeated):
538 global options ([+] can be repeated):
536
539
537 -R --repository REPO repository root directory or name of overlay bundle
540 -R --repository REPO repository root directory or name of overlay bundle
538 file
541 file
539 --cwd DIR change working directory
542 --cwd DIR change working directory
540 -y --noninteractive do not prompt, automatically pick the first choice for
543 -y --noninteractive do not prompt, automatically pick the first choice for
541 all prompts
544 all prompts
542 -q --quiet suppress output
545 -q --quiet suppress output
543 -v --verbose enable additional output
546 -v --verbose enable additional output
544 --color TYPE when to colorize (boolean, always, auto, never, or
547 --color TYPE when to colorize (boolean, always, auto, never, or
545 debug)
548 debug)
546 --config CONFIG [+] set/override config option (use 'section.name=value')
549 --config CONFIG [+] set/override config option (use 'section.name=value')
547 --debug enable debugging output
550 --debug enable debugging output
548 --debugger start debugger
551 --debugger start debugger
549 --encoding ENCODE set the charset encoding (default: ascii)
552 --encoding ENCODE set the charset encoding (default: ascii)
550 --encodingmode MODE set the charset encoding mode (default: strict)
553 --encodingmode MODE set the charset encoding mode (default: strict)
551 --traceback always print a traceback on exception
554 --traceback always print a traceback on exception
552 --time time how long the command takes
555 --time time how long the command takes
553 --profile print command execution profile
556 --profile print command execution profile
554 --version output version information and exit
557 --version output version information and exit
555 -h --help display help and exit
558 -h --help display help and exit
556 --hidden consider hidden changesets
559 --hidden consider hidden changesets
557 --pager TYPE when to paginate (boolean, always, auto, or never)
560 --pager TYPE when to paginate (boolean, always, auto, or never)
558 (default: auto)
561 (default: auto)
559
562
560 Test the textwidth config option
563 Test the textwidth config option
561
564
562 $ hg root -h --config ui.textwidth=50
565 $ hg root -h --config ui.textwidth=50
563 hg root
566 hg root
564
567
565 print the root (top) of the current working
568 print the root (top) of the current working
566 directory
569 directory
567
570
568 Print the root directory of the current
571 Print the root directory of the current
569 repository.
572 repository.
570
573
571 Returns 0 on success.
574 Returns 0 on success.
572
575
573 options:
576 options:
574
577
575 -T --template TEMPLATE display with template
578 -T --template TEMPLATE display with template
576
579
577 (some details hidden, use --verbose to show
580 (some details hidden, use --verbose to show
578 complete help)
581 complete help)
579
582
580 Test help option with version option
583 Test help option with version option
581
584
582 $ hg add -h --version
585 $ hg add -h --version
583 Mercurial Distributed SCM (version *) (glob)
586 Mercurial Distributed SCM (version *) (glob)
584 (see https://mercurial-scm.org for more information)
587 (see https://mercurial-scm.org for more information)
585
588
586 Copyright (C) 2005-* Olivia Mackall and others (glob)
589 Copyright (C) 2005-* Olivia Mackall and others (glob)
587 This is free software; see the source for copying conditions. There is NO
590 This is free software; see the source for copying conditions. There is NO
588 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
591 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
589
592
590 $ hg add --skjdfks
593 $ hg add --skjdfks
591 hg add: option --skjdfks not recognized
594 hg add: option --skjdfks not recognized
592 hg add [OPTION]... [FILE]...
595 hg add [OPTION]... [FILE]...
593
596
594 add the specified files on the next commit
597 add the specified files on the next commit
595
598
596 options ([+] can be repeated):
599 options ([+] can be repeated):
597
600
598 -I --include PATTERN [+] include names matching the given patterns
601 -I --include PATTERN [+] include names matching the given patterns
599 -X --exclude PATTERN [+] exclude names matching the given patterns
602 -X --exclude PATTERN [+] exclude names matching the given patterns
600 -S --subrepos recurse into subrepositories
603 -S --subrepos recurse into subrepositories
601 -n --dry-run do not perform actions, just print output
604 -n --dry-run do not perform actions, just print output
602
605
603 (use 'hg add -h' to show more help)
606 (use 'hg add -h' to show more help)
604 [10]
607 [10]
605
608
606 Test ambiguous command help
609 Test ambiguous command help
607
610
608 $ hg help ad
611 $ hg help ad
609 list of commands:
612 list of commands:
610
613
611 Working directory management:
614 Working directory management:
612
615
613 add add the specified files on the next commit
616 add add the specified files on the next commit
614 addremove add all new files, delete all missing files
617 addremove add all new files, delete all missing files
615
618
616 Repository maintenance:
619 Repository maintenance:
617
620
618 admin::verify
621 admin::verify
619 verify the integrity of the repository
622 verify the integrity of the repository
620
623
621 (use 'hg help -v ad' to show built-in aliases and global options)
624 (use 'hg help -v ad' to show built-in aliases and global options)
622
625
623 Test command without options
626 Test command without options
624
627
625 $ hg help verify
628 $ hg help verify
626 hg verify
629 hg verify
627
630
628 verify the integrity of the repository
631 verify the integrity of the repository
629
632
630 Verify the integrity of the current repository.
633 Verify the integrity of the current repository.
631
634
632 This will perform an extensive check of the repository's integrity,
635 This will perform an extensive check of the repository's integrity,
633 validating the hashes and checksums of each entry in the changelog,
636 validating the hashes and checksums of each entry in the changelog,
634 manifest, and tracked files, as well as the integrity of their crosslinks
637 manifest, and tracked files, as well as the integrity of their crosslinks
635 and indices.
638 and indices.
636
639
637 Please see https://mercurial-scm.org/wiki/RepositoryCorruption for more
640 Please see https://mercurial-scm.org/wiki/RepositoryCorruption for more
638 information about recovery from corruption of the repository.
641 information about recovery from corruption of the repository.
639
642
640 For an alternative UI with a lot more control over the verification
643 For an alternative UI with a lot more control over the verification
641 process and better error reporting, try 'hg help admin::verify'.
644 process and better error reporting, try 'hg help admin::verify'.
642
645
643 Returns 0 on success, 1 if errors are encountered.
646 Returns 0 on success, 1 if errors are encountered.
644
647
645 options:
648 options:
646
649
647 (some details hidden, use --verbose to show complete help)
650 (some details hidden, use --verbose to show complete help)
648
651
649 $ hg help diff
652 $ hg help diff
650 hg diff [OPTION]... ([-c REV] | [--from REV1] [--to REV2]) [FILE]...
653 hg diff [OPTION]... ([-c REV] | [--from REV1] [--to REV2]) [FILE]...
651
654
652 diff repository (or selected files)
655 diff repository (or selected files)
653
656
654 Show differences between revisions for the specified files.
657 Show differences between revisions for the specified files.
655
658
656 Differences between files are shown using the unified diff format.
659 Differences between files are shown using the unified diff format.
657
660
658 Note:
661 Note:
659 'hg diff' may generate unexpected results for merges, as it will
662 'hg diff' may generate unexpected results for merges, as it will
660 default to comparing against the working directory's first parent
663 default to comparing against the working directory's first parent
661 changeset if no revisions are specified. To diff against the conflict
664 changeset if no revisions are specified. To diff against the conflict
662 regions, you can use '--config diff.merge=yes'.
665 regions, you can use '--config diff.merge=yes'.
663
666
664 By default, the working directory files are compared to its first parent.
667 By default, the working directory files are compared to its first parent.
665 To see the differences from another revision, use --from. To see the
668 To see the differences from another revision, use --from. To see the
666 difference to another revision, use --to. For example, 'hg diff --from .^'
669 difference to another revision, use --to. For example, 'hg diff --from .^'
667 will show the differences from the working copy's grandparent to the
670 will show the differences from the working copy's grandparent to the
668 working copy, 'hg diff --to .' will show the diff from the working copy to
671 working copy, 'hg diff --to .' will show the diff from the working copy to
669 its parent (i.e. the reverse of the default), and 'hg diff --from 1.0 --to
672 its parent (i.e. the reverse of the default), and 'hg diff --from 1.0 --to
670 1.2' will show the diff between those two revisions.
673 1.2' will show the diff between those two revisions.
671
674
672 Alternatively you can specify -c/--change with a revision to see the
675 Alternatively you can specify -c/--change with a revision to see the
673 changes in that changeset relative to its first parent (i.e. 'hg diff -c
676 changes in that changeset relative to its first parent (i.e. 'hg diff -c
674 42' is equivalent to 'hg diff --from 42^ --to 42')
677 42' is equivalent to 'hg diff --from 42^ --to 42')
675
678
676 Without the -a/--text option, diff will avoid generating diffs of files it
679 Without the -a/--text option, diff will avoid generating diffs of files it
677 detects as binary. With -a, diff will generate a diff anyway, probably
680 detects as binary. With -a, diff will generate a diff anyway, probably
678 with undesirable results.
681 with undesirable results.
679
682
680 Use the -g/--git option to generate diffs in the git extended diff format.
683 Use the -g/--git option to generate diffs in the git extended diff format.
681 For more information, read 'hg help diffs'.
684 For more information, read 'hg help diffs'.
682
685
683 Returns 0 on success.
686 Returns 0 on success.
684
687
685 options ([+] can be repeated):
688 options ([+] can be repeated):
686
689
687 --from REV1 revision to diff from
690 --from REV1 revision to diff from
688 --to REV2 revision to diff to
691 --to REV2 revision to diff to
689 -c --change REV change made by revision
692 -c --change REV change made by revision
690 -a --text treat all files as text
693 -a --text treat all files as text
691 -g --git use git extended diff format
694 -g --git use git extended diff format
692 --binary generate binary diffs in git mode (default)
695 --binary generate binary diffs in git mode (default)
693 --nodates omit dates from diff headers
696 --nodates omit dates from diff headers
694 --noprefix omit a/ and b/ prefixes from filenames
697 --noprefix omit a/ and b/ prefixes from filenames
695 -p --show-function show which function each change is in
698 -p --show-function show which function each change is in
696 --reverse produce a diff that undoes the changes
699 --reverse produce a diff that undoes the changes
697 -w --ignore-all-space ignore white space when comparing lines
700 -w --ignore-all-space ignore white space when comparing lines
698 -b --ignore-space-change ignore changes in the amount of white space
701 -b --ignore-space-change ignore changes in the amount of white space
699 -B --ignore-blank-lines ignore changes whose lines are all blank
702 -B --ignore-blank-lines ignore changes whose lines are all blank
700 -Z --ignore-space-at-eol ignore changes in whitespace at EOL
703 -Z --ignore-space-at-eol ignore changes in whitespace at EOL
701 -U --unified NUM number of lines of context to show
704 -U --unified NUM number of lines of context to show
702 --stat output diffstat-style summary of changes
705 --stat output diffstat-style summary of changes
703 --root DIR produce diffs relative to subdirectory
706 --root DIR produce diffs relative to subdirectory
704 -I --include PATTERN [+] include names matching the given patterns
707 -I --include PATTERN [+] include names matching the given patterns
705 -X --exclude PATTERN [+] exclude names matching the given patterns
708 -X --exclude PATTERN [+] exclude names matching the given patterns
706 -S --subrepos recurse into subrepositories
709 -S --subrepos recurse into subrepositories
707
710
708 (some details hidden, use --verbose to show complete help)
711 (some details hidden, use --verbose to show complete help)
709
712
710 $ hg help status
713 $ hg help status
711 hg status [OPTION]... [FILE]...
714 hg status [OPTION]... [FILE]...
712
715
713 aliases: st
716 aliases: st
714
717
715 show changed files in the working directory
718 show changed files in the working directory
716
719
717 Show status of files in the repository. If names are given, only files
720 Show status of files in the repository. If names are given, only files
718 that match are shown. Files that are clean or ignored or the source of a
721 that match are shown. Files that are clean or ignored or the source of a
719 copy/move operation, are not listed unless -c/--clean, -i/--ignored,
722 copy/move operation, are not listed unless -c/--clean, -i/--ignored,
720 -C/--copies or -A/--all are given. Unless options described with "show
723 -C/--copies or -A/--all are given. Unless options described with "show
721 only ..." are given, the options -mardu are used.
724 only ..." are given, the options -mardu are used.
722
725
723 Option -q/--quiet hides untracked (unknown and ignored) files unless
726 Option -q/--quiet hides untracked (unknown and ignored) files unless
724 explicitly requested with -u/--unknown or -i/--ignored.
727 explicitly requested with -u/--unknown or -i/--ignored.
725
728
726 Note:
729 Note:
727 'hg status' may appear to disagree with diff if permissions have
730 'hg status' may appear to disagree with diff if permissions have
728 changed or a merge has occurred. The standard diff format does not
731 changed or a merge has occurred. The standard diff format does not
729 report permission changes and diff only reports changes relative to one
732 report permission changes and diff only reports changes relative to one
730 merge parent.
733 merge parent.
731
734
732 If one revision is given, it is used as the base revision. If two
735 If one revision is given, it is used as the base revision. If two
733 revisions are given, the differences between them are shown. The --change
736 revisions are given, the differences between them are shown. The --change
734 option can also be used as a shortcut to list the changed files of a
737 option can also be used as a shortcut to list the changed files of a
735 revision from its first parent.
738 revision from its first parent.
736
739
737 The codes used to show the status of files are:
740 The codes used to show the status of files are:
738
741
739 M = modified
742 M = modified
740 A = added
743 A = added
741 R = removed
744 R = removed
742 C = clean
745 C = clean
743 ! = missing (deleted by non-hg command, but still tracked)
746 ! = missing (deleted by non-hg command, but still tracked)
744 ? = not tracked
747 ? = not tracked
745 I = ignored
748 I = ignored
746 = origin of the previous file (with --copies)
749 = origin of the previous file (with --copies)
747
750
748 Returns 0 on success.
751 Returns 0 on success.
749
752
750 options ([+] can be repeated):
753 options ([+] can be repeated):
751
754
752 -A --all show status of all files
755 -A --all show status of all files
753 -m --modified show only modified files
756 -m --modified show only modified files
754 -a --added show only added files
757 -a --added show only added files
755 -r --removed show only removed files
758 -r --removed show only removed files
756 -d --deleted show only missing files
759 -d --deleted show only missing files
757 -c --clean show only files without changes
760 -c --clean show only files without changes
758 -u --unknown show only unknown (not tracked) files
761 -u --unknown show only unknown (not tracked) files
759 -i --ignored show only ignored files
762 -i --ignored show only ignored files
760 -n --no-status hide status prefix
763 -n --no-status hide status prefix
761 -C --copies show source of copied files
764 -C --copies show source of copied files
762 -0 --print0 end filenames with NUL, for use with xargs
765 -0 --print0 end filenames with NUL, for use with xargs
763 --rev REV [+] show difference from revision
766 --rev REV [+] show difference from revision
764 --change REV list the changed files of a revision
767 --change REV list the changed files of a revision
765 -I --include PATTERN [+] include names matching the given patterns
768 -I --include PATTERN [+] include names matching the given patterns
766 -X --exclude PATTERN [+] exclude names matching the given patterns
769 -X --exclude PATTERN [+] exclude names matching the given patterns
767 -S --subrepos recurse into subrepositories
770 -S --subrepos recurse into subrepositories
768 -T --template TEMPLATE display with template
771 -T --template TEMPLATE display with template
769
772
770 (some details hidden, use --verbose to show complete help)
773 (some details hidden, use --verbose to show complete help)
771
774
772 $ hg -q help status
775 $ hg -q help status
773 hg status [OPTION]... [FILE]...
776 hg status [OPTION]... [FILE]...
774
777
775 show changed files in the working directory
778 show changed files in the working directory
776
779
777 $ hg help foo
780 $ hg help foo
778 abort: no such help topic: foo
781 abort: no such help topic: foo
779 (try 'hg help --keyword foo')
782 (try 'hg help --keyword foo')
780 [10]
783 [10]
781
784
782 $ hg skjdfks
785 $ hg skjdfks
783 hg: unknown command 'skjdfks'
786 hg: unknown command 'skjdfks'
784 (use 'hg help' for a list of commands)
787 (use 'hg help' for a list of commands)
785 [10]
788 [10]
786
789
787 Typoed command gives suggestion
790 Typoed command gives suggestion
788 $ hg puls
791 $ hg puls
789 hg: unknown command 'puls'
792 hg: unknown command 'puls'
790 (did you mean one of pull, push?)
793 (did you mean one of pull, push?)
791 [10]
794 [10]
792
795
793 Not enabled extension gets suggested
796 Not enabled extension gets suggested
794
797
795 $ hg rebase
798 $ hg rebase
796 hg: unknown command 'rebase'
799 hg: unknown command 'rebase'
797 'rebase' is provided by the following extension:
800 'rebase' is provided by the following extension:
798
801
799 rebase command to move sets of revisions to a different ancestor
802 rebase command to move sets of revisions to a different ancestor
800
803
801 (use 'hg help extensions' for information on enabling extensions)
804 (use 'hg help extensions' for information on enabling extensions)
802 [10]
805 [10]
803
806
804 Disabled extension gets suggested
807 Disabled extension gets suggested
805 $ hg --config extensions.rebase=! rebase
808 $ hg --config extensions.rebase=! rebase
806 hg: unknown command 'rebase'
809 hg: unknown command 'rebase'
807 'rebase' is provided by the following extension:
810 'rebase' is provided by the following extension:
808
811
809 rebase command to move sets of revisions to a different ancestor
812 rebase command to move sets of revisions to a different ancestor
810
813
811 (use 'hg help extensions' for information on enabling extensions)
814 (use 'hg help extensions' for information on enabling extensions)
812 [10]
815 [10]
813
816
814 Checking that help adapts based on the config:
817 Checking that help adapts based on the config:
815
818
816 $ hg help diff --config ui.tweakdefaults=true | grep -E -e '^ *(-g|config)'
819 $ hg help diff --config ui.tweakdefaults=true | grep -E -e '^ *(-g|config)'
817 -g --[no-]git use git extended diff format (default: on from
820 -g --[no-]git use git extended diff format (default: on from
818 config)
821 config)
819
822
820 Make sure that we don't run afoul of the help system thinking that
823 Make sure that we don't run afoul of the help system thinking that
821 this is a section and erroring out weirdly.
824 this is a section and erroring out weirdly.
822
825
823 $ hg .log
826 $ hg .log
824 hg: unknown command '.log'
827 hg: unknown command '.log'
825 (did you mean log?)
828 (did you mean log?)
826 [10]
829 [10]
827
830
828 $ hg log.
831 $ hg log.
829 hg: unknown command 'log.'
832 hg: unknown command 'log.'
830 (did you mean log?)
833 (did you mean log?)
831 [10]
834 [10]
832 $ hg pu.lh
835 $ hg pu.lh
833 hg: unknown command 'pu.lh'
836 hg: unknown command 'pu.lh'
834 (did you mean one of pull, push?)
837 (did you mean one of pull, push?)
835 [10]
838 [10]
836
839
837 $ cat > helpext.py <<EOF
840 $ cat > helpext.py <<EOF
838 > import os
841 > import os
839 > from mercurial import commands, fancyopts, registrar
842 > from mercurial import commands, fancyopts, registrar
840 >
843 >
841 > def func(arg):
844 > def func(arg):
842 > return '%sfoo' % arg
845 > return '%sfoo' % arg
843 > class customopt(fancyopts.customopt):
846 > class customopt(fancyopts.customopt):
844 > def newstate(self, oldstate, newparam, abort):
847 > def newstate(self, oldstate, newparam, abort):
845 > return '%sbar' % oldstate
848 > return '%sbar' % oldstate
846 > cmdtable = {}
849 > cmdtable = {}
847 > command = registrar.command(cmdtable)
850 > command = registrar.command(cmdtable)
848 >
851 >
849 > @command(b'nohelp',
852 > @command(b'nohelp',
850 > [(b'', b'longdesc', 3, b'x'*67),
853 > [(b'', b'longdesc', 3, b'x'*67),
851 > (b'n', b'', None, b'normal desc'),
854 > (b'n', b'', None, b'normal desc'),
852 > (b'', b'newline', b'', b'line1\nline2'),
855 > (b'', b'newline', b'', b'line1\nline2'),
853 > (b'', b'default-off', False, b'enable X'),
856 > (b'', b'default-off', False, b'enable X'),
854 > (b'', b'default-on', True, b'enable Y'),
857 > (b'', b'default-on', True, b'enable Y'),
855 > (b'', b'callableopt', func, b'adds foo'),
858 > (b'', b'callableopt', func, b'adds foo'),
856 > (b'', b'customopt', customopt(''), b'adds bar'),
859 > (b'', b'customopt', customopt(''), b'adds bar'),
857 > (b'', b'customopt-withdefault', customopt('foo'), b'adds bar')],
860 > (b'', b'customopt-withdefault', customopt('foo'), b'adds bar')],
858 > b'hg nohelp',
861 > b'hg nohelp',
859 > norepo=True)
862 > norepo=True)
860 > @command(b'debugoptADV', [(b'', b'aopt', None, b'option is (ADVANCED)')])
863 > @command(b'debugoptADV', [(b'', b'aopt', None, b'option is (ADVANCED)')])
861 > @command(b'debugoptDEP', [(b'', b'dopt', None, b'option is (DEPRECATED)')])
864 > @command(b'debugoptDEP', [(b'', b'dopt', None, b'option is (DEPRECATED)')])
862 > @command(b'debugoptEXP', [(b'', b'eopt', None, b'option is (EXPERIMENTAL)')])
865 > @command(b'debugoptEXP', [(b'', b'eopt', None, b'option is (EXPERIMENTAL)')])
863 > def nohelp(ui, *args, **kwargs):
866 > def nohelp(ui, *args, **kwargs):
864 > pass
867 > pass
865 >
868 >
866 > @command(b'hashelp', [], b'hg hashelp', norepo=True)
869 > @command(b'hashelp', [], b'hg hashelp', norepo=True)
867 > def hashelp(ui, *args, **kwargs):
870 > def hashelp(ui, *args, **kwargs):
868 > """Extension command's help"""
871 > """Extension command's help"""
869 >
872 >
870 > def uisetup(ui):
873 > def uisetup(ui):
871 > ui.setconfig(b'alias', b'shellalias', b'!echo hi', b'helpext')
874 > ui.setconfig(b'alias', b'shellalias', b'!echo hi', b'helpext')
872 > ui.setconfig(b'alias', b'hgalias', b'summary', b'helpext')
875 > ui.setconfig(b'alias', b'hgalias', b'summary', b'helpext')
873 > ui.setconfig(b'alias', b'hgalias:doc', b'My doc', b'helpext')
876 > ui.setconfig(b'alias', b'hgalias:doc', b'My doc', b'helpext')
874 > ui.setconfig(b'alias', b'hgalias:category', b'navigation', b'helpext')
877 > ui.setconfig(b'alias', b'hgalias:category', b'navigation', b'helpext')
875 > ui.setconfig(b'alias', b'hgaliasnodoc', b'summary', b'helpext')
878 > ui.setconfig(b'alias', b'hgaliasnodoc', b'summary', b'helpext')
876 >
879 >
877 > EOF
880 > EOF
878 $ echo '[extensions]' >> $HGRCPATH
881 $ echo '[extensions]' >> $HGRCPATH
879 $ echo "helpext = `pwd`/helpext.py" >> $HGRCPATH
882 $ echo "helpext = `pwd`/helpext.py" >> $HGRCPATH
880
883
881 Test for aliases
884 Test for aliases
882
885
883 $ hg help | grep hgalias
886 $ hg help | grep hgalias
884 hgalias My doc
887 hgalias My doc
885
888
886 $ hg help hgalias
889 $ hg help hgalias
887 hg hgalias [--remote]
890 hg hgalias [--remote]
888
891
889 alias for: hg summary
892 alias for: hg summary
890
893
891 My doc
894 My doc
892
895
893 defined by: helpext
896 defined by: helpext
894
897
895 options:
898 options:
896
899
897 --remote check for push and pull
900 --remote check for push and pull
898
901
899 (some details hidden, use --verbose to show complete help)
902 (some details hidden, use --verbose to show complete help)
900 $ hg help hgaliasnodoc
903 $ hg help hgaliasnodoc
901 hg hgaliasnodoc [--remote]
904 hg hgaliasnodoc [--remote]
902
905
903 alias for: hg summary
906 alias for: hg summary
904
907
905 summarize working directory state
908 summarize working directory state
906
909
907 This generates a brief summary of the working directory state, including
910 This generates a brief summary of the working directory state, including
908 parents, branch, commit status, phase and available updates.
911 parents, branch, commit status, phase and available updates.
909
912
910 With the --remote option, this will check the default paths for incoming
913 With the --remote option, this will check the default paths for incoming
911 and outgoing changes. This can be time-consuming.
914 and outgoing changes. This can be time-consuming.
912
915
913 Returns 0 on success.
916 Returns 0 on success.
914
917
915 defined by: helpext
918 defined by: helpext
916
919
917 options:
920 options:
918
921
919 --remote check for push and pull
922 --remote check for push and pull
920
923
921 (some details hidden, use --verbose to show complete help)
924 (some details hidden, use --verbose to show complete help)
922
925
923 $ hg help shellalias
926 $ hg help shellalias
924 hg shellalias
927 hg shellalias
925
928
926 shell alias for: echo hi
929 shell alias for: echo hi
927
930
928 (no help text available)
931 (no help text available)
929
932
930 defined by: helpext
933 defined by: helpext
931
934
932 (some details hidden, use --verbose to show complete help)
935 (some details hidden, use --verbose to show complete help)
933
936
934 Test command with no help text
937 Test command with no help text
935
938
936 $ hg help nohelp
939 $ hg help nohelp
937 hg nohelp
940 hg nohelp
938
941
939 (no help text available)
942 (no help text available)
940
943
941 options:
944 options:
942
945
943 --longdesc VALUE
946 --longdesc VALUE
944 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
947 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
945 xxxxxxxxxxxxxxxxxxxxxxx (default: 3)
948 xxxxxxxxxxxxxxxxxxxxxxx (default: 3)
946 -n -- normal desc
949 -n -- normal desc
947 --newline VALUE line1 line2
950 --newline VALUE line1 line2
948 --default-off enable X
951 --default-off enable X
949 --[no-]default-on enable Y (default: on)
952 --[no-]default-on enable Y (default: on)
950 --callableopt VALUE adds foo
953 --callableopt VALUE adds foo
951 --customopt VALUE adds bar
954 --customopt VALUE adds bar
952 --customopt-withdefault VALUE adds bar (default: foo)
955 --customopt-withdefault VALUE adds bar (default: foo)
953
956
954 (some details hidden, use --verbose to show complete help)
957 (some details hidden, use --verbose to show complete help)
955
958
956 Test that default list of commands includes extension commands that have help,
959 Test that default list of commands includes extension commands that have help,
957 but not those that don't, except in verbose mode, when a keyword is passed, or
960 but not those that don't, except in verbose mode, when a keyword is passed, or
958 when help about the extension is requested.
961 when help about the extension is requested.
959
962
960 #if no-extraextensions
963 #if no-extraextensions
961
964
962 $ hg help | grep hashelp
965 $ hg help | grep hashelp
963 hashelp Extension command's help
966 hashelp Extension command's help
964 $ hg help | grep nohelp
967 $ hg help | grep nohelp
965 [1]
968 [1]
966 $ hg help -v | grep nohelp
969 $ hg help -v | grep nohelp
967 nohelp (no help text available)
970 nohelp (no help text available)
968
971
969 $ hg help -k nohelp
972 $ hg help -k nohelp
970 Commands:
973 Commands:
971
974
972 nohelp hg nohelp
975 nohelp hg nohelp
973
976
974 Extension Commands:
977 Extension Commands:
975
978
976 nohelp (no help text available)
979 nohelp (no help text available)
977
980
978 $ hg help helpext
981 $ hg help helpext
979 helpext extension - no help text available
982 helpext extension - no help text available
980
983
981 list of commands:
984 list of commands:
982
985
983 hashelp Extension command's help
986 hashelp Extension command's help
984 nohelp (no help text available)
987 nohelp (no help text available)
985
988
986 (use 'hg help -v helpext' to show built-in aliases and global options)
989 (use 'hg help -v helpext' to show built-in aliases and global options)
987
990
988 #endif
991 #endif
989
992
990 Test list of internal help commands
993 Test list of internal help commands
991
994
992 $ hg help debug
995 $ hg help debug
993 debug commands (internal and unsupported):
996 debug commands (internal and unsupported):
994
997
995 debug-delta-find
998 debug-delta-find
996 display the computation to get to a valid delta for storing REV
999 display the computation to get to a valid delta for storing REV
997 debug-repair-issue6528
1000 debug-repair-issue6528
998 find affected revisions and repair them. See issue6528 for more
1001 find affected revisions and repair them. See issue6528 for more
999 details.
1002 details.
1000 debug-revlog-index
1003 debug-revlog-index
1001 dump index data for a revlog
1004 dump index data for a revlog
1002 debug-revlog-stats
1005 debug-revlog-stats
1003 display statistics about revlogs in the store
1006 display statistics about revlogs in the store
1004 debug::stable-tail-sort
1007 debug::stable-tail-sort
1005 display the stable-tail sort of the ancestors of a given node
1008 display the stable-tail sort of the ancestors of a given node
1006 debug::stable-tail-sort-leaps
1009 debug::stable-tail-sort-leaps
1007 display the leaps in the stable-tail sort of a node, one per
1010 display the leaps in the stable-tail sort of a node, one per
1008 line
1011 line
1009 debug::unbundle
1012 debug::unbundle
1010 same as 'hg unbundle', but pretent to come from a push
1013 same as 'hg unbundle', but pretent to come from a push
1011 debugancestor
1014 debugancestor
1012 find the ancestor revision of two revisions in a given index
1015 find the ancestor revision of two revisions in a given index
1013 debugantivirusrunning
1016 debugantivirusrunning
1014 attempt to trigger an antivirus scanner to see if one is active
1017 attempt to trigger an antivirus scanner to see if one is active
1015 debugapplystreamclonebundle
1018 debugapplystreamclonebundle
1016 apply a stream clone bundle file
1019 apply a stream clone bundle file
1017 debugbackupbundle
1020 debugbackupbundle
1018 lists the changesets available in backup bundles
1021 lists the changesets available in backup bundles
1019 debugbuilddag
1022 debugbuilddag
1020 builds a repo with a given DAG from scratch in the current
1023 builds a repo with a given DAG from scratch in the current
1021 empty repo
1024 empty repo
1022 debugbundle lists the contents of a bundle
1025 debugbundle lists the contents of a bundle
1023 debugcapabilities
1026 debugcapabilities
1024 lists the capabilities of a remote peer
1027 lists the capabilities of a remote peer
1025 debugchangedfiles
1028 debugchangedfiles
1026 list the stored files changes for a revision
1029 list the stored files changes for a revision
1027 debugcheckstate
1030 debugcheckstate
1028 validate the correctness of the current dirstate
1031 validate the correctness of the current dirstate
1029 debugcolor show available color, effects or style
1032 debugcolor show available color, effects or style
1030 debugcommands
1033 debugcommands
1031 list all available commands and options
1034 list all available commands and options
1032 debugcomplete
1035 debugcomplete
1033 returns the completion list associated with the given command
1036 returns the completion list associated with the given command
1034 debugcreatestreamclonebundle
1037 debugcreatestreamclonebundle
1035 create a stream clone bundle file
1038 create a stream clone bundle file
1036 debugdag format the changelog or an index DAG as a concise textual
1039 debugdag format the changelog or an index DAG as a concise textual
1037 description
1040 description
1038 debugdata dump the contents of a data file revision
1041 debugdata dump the contents of a data file revision
1039 debugdate parse and display a date
1042 debugdate parse and display a date
1040 debugdeltachain
1043 debugdeltachain
1041 dump information about delta chains in a revlog
1044 dump information about delta chains in a revlog
1042 debugdirstate
1045 debugdirstate
1043 show the contents of the current dirstate
1046 show the contents of the current dirstate
1044 debugdirstateignorepatternshash
1047 debugdirstateignorepatternshash
1045 show the hash of ignore patterns stored in dirstate if v2,
1048 show the hash of ignore patterns stored in dirstate if v2,
1046 debugdiscovery
1049 debugdiscovery
1047 runs the changeset discovery protocol in isolation
1050 runs the changeset discovery protocol in isolation
1048 debugdownload
1051 debugdownload
1049 download a resource using Mercurial logic and config
1052 download a resource using Mercurial logic and config
1050 debugextensions
1053 debugextensions
1051 show information about active extensions
1054 show information about active extensions
1052 debugfileset parse and apply a fileset specification
1055 debugfileset parse and apply a fileset specification
1053 debugformat display format information about the current repository
1056 debugformat display format information about the current repository
1054 debugfsinfo show information detected about current filesystem
1057 debugfsinfo show information detected about current filesystem
1055 debuggetbundle
1058 debuggetbundle
1056 retrieves a bundle from a repo
1059 retrieves a bundle from a repo
1057 debugignore display the combined ignore pattern and information about
1060 debugignore display the combined ignore pattern and information about
1058 ignored files
1061 ignored files
1059 debugindexdot
1062 debugindexdot
1060 dump an index DAG as a graphviz dot file
1063 dump an index DAG as a graphviz dot file
1061 debugindexstats
1064 debugindexstats
1062 show stats related to the changelog index
1065 show stats related to the changelog index
1063 debuginstall test Mercurial installation
1066 debuginstall test Mercurial installation
1064 debugknown test whether node ids are known to a repo
1067 debugknown test whether node ids are known to a repo
1065 debuglocks show or modify state of locks
1068 debuglocks show or modify state of locks
1066 debugmanifestfulltextcache
1069 debugmanifestfulltextcache
1067 show, clear or amend the contents of the manifest fulltext
1070 show, clear or amend the contents of the manifest fulltext
1068 cache
1071 cache
1069 debugmergestate
1072 debugmergestate
1070 print merge state
1073 print merge state
1071 debugnamecomplete
1074 debugnamecomplete
1072 complete "names" - tags, open branch names, bookmark names
1075 complete "names" - tags, open branch names, bookmark names
1073 debugnodemap write and inspect on disk nodemap
1076 debugnodemap write and inspect on disk nodemap
1074 debugobsolete
1077 debugobsolete
1075 create arbitrary obsolete marker
1078 create arbitrary obsolete marker
1076 debugoptADV (no help text available)
1079 debugoptADV (no help text available)
1077 debugoptDEP (no help text available)
1080 debugoptDEP (no help text available)
1078 debugoptEXP (no help text available)
1081 debugoptEXP (no help text available)
1079 debugp1copies
1082 debugp1copies
1080 dump copy information compared to p1
1083 dump copy information compared to p1
1081 debugp2copies
1084 debugp2copies
1082 dump copy information compared to p2
1085 dump copy information compared to p2
1083 debugpathcomplete
1086 debugpathcomplete
1084 complete part or all of a tracked path
1087 complete part or all of a tracked path
1085 debugpathcopies
1088 debugpathcopies
1086 show copies between two revisions
1089 show copies between two revisions
1087 debugpeer establish a connection to a peer repository
1090 debugpeer establish a connection to a peer repository
1088 debugpickmergetool
1091 debugpickmergetool
1089 examine which merge tool is chosen for specified file
1092 examine which merge tool is chosen for specified file
1090 debugpushkey access the pushkey key/value protocol
1093 debugpushkey access the pushkey key/value protocol
1091 debugpvec (no help text available)
1094 debugpvec (no help text available)
1092 debugrebuilddirstate
1095 debugrebuilddirstate
1093 rebuild the dirstate as it would look like for the given
1096 rebuild the dirstate as it would look like for the given
1094 revision
1097 revision
1095 debugrebuildfncache
1098 debugrebuildfncache
1096 rebuild the fncache file
1099 rebuild the fncache file
1097 debugrename dump rename information
1100 debugrename dump rename information
1098 debugrequires
1101 debugrequires
1099 print the current repo requirements
1102 print the current repo requirements
1100 debugrevlog show data and statistics about a revlog
1103 debugrevlog show data and statistics about a revlog
1101 debugrevlogindex
1104 debugrevlogindex
1102 dump the contents of a revlog index
1105 dump the contents of a revlog index
1103 debugrevspec parse and apply a revision specification
1106 debugrevspec parse and apply a revision specification
1104 debugserve run a server with advanced settings
1107 debugserve run a server with advanced settings
1105 debugsetparents
1108 debugsetparents
1106 manually set the parents of the current working directory
1109 manually set the parents of the current working directory
1107 (DANGEROUS)
1110 (DANGEROUS)
1108 debugshell run an interactive Python interpreter
1111 debugshell run an interactive Python interpreter
1109 debugsidedata
1112 debugsidedata
1110 dump the side data for a cl/manifest/file revision
1113 dump the side data for a cl/manifest/file revision
1111 debugssl test a secure connection to a server
1114 debugssl test a secure connection to a server
1112 debugstrip strip changesets and all their descendants from the repository
1115 debugstrip strip changesets and all their descendants from the repository
1113 debugsub (no help text available)
1116 debugsub (no help text available)
1114 debugsuccessorssets
1117 debugsuccessorssets
1115 show set of successors for revision
1118 show set of successors for revision
1116 debugtagscache
1119 debugtagscache
1117 display the contents of .hg/cache/hgtagsfnodes1
1120 display the contents of .hg/cache/hgtagsfnodes1
1118 debugtemplate
1121 debugtemplate
1119 parse and apply a template
1122 parse and apply a template
1120 debuguigetpass
1123 debuguigetpass
1121 show prompt to type password
1124 show prompt to type password
1122 debuguiprompt
1125 debuguiprompt
1123 show plain prompt
1126 show plain prompt
1124 debugupdatecaches
1127 debugupdatecaches
1125 warm all known caches in the repository
1128 warm all known caches in the repository
1126 debugupgraderepo
1129 debugupgraderepo
1127 upgrade a repository to use different features
1130 upgrade a repository to use different features
1128 debugwalk show how files match on given patterns
1131 debugwalk show how files match on given patterns
1129 debugwhyunstable
1132 debugwhyunstable
1130 explain instabilities of a changeset
1133 explain instabilities of a changeset
1131 debugwireargs
1134 debugwireargs
1132 (no help text available)
1135 (no help text available)
1133 debugwireproto
1136 debugwireproto
1134 send wire protocol commands to a server
1137 send wire protocol commands to a server
1135
1138
1136 (use 'hg help -v debug' to show built-in aliases and global options)
1139 (use 'hg help -v debug' to show built-in aliases and global options)
1137
1140
1138 internals topic renders index of available sub-topics
1141 internals topic renders index of available sub-topics
1139
1142
1140 $ hg help internals
1143 $ hg help internals
1141 Technical implementation topics
1144 Technical implementation topics
1142 """""""""""""""""""""""""""""""
1145 """""""""""""""""""""""""""""""
1143
1146
1144 To access a subtopic, use "hg help internals.{subtopic-name}"
1147 To access a subtopic, use "hg help internals.{subtopic-name}"
1145
1148
1146 bid-merge Bid Merge Algorithm
1149 bid-merge Bid Merge Algorithm
1147 bundle2 Bundle2
1150 bundle2 Bundle2
1148 bundles Bundles
1151 bundles Bundles
1149 cbor CBOR
1152 cbor CBOR
1150 censor Censor
1153 censor Censor
1151 changegroups Changegroups
1154 changegroups Changegroups
1152 config Config Registrar
1155 config Config Registrar
1153 dirstate-v2 dirstate-v2 file format
1156 dirstate-v2 dirstate-v2 file format
1154 extensions Extension API
1157 extensions Extension API
1155 mergestate Mergestate
1158 mergestate Mergestate
1156 requirements Repository Requirements
1159 requirements Repository Requirements
1157 revlogs Revision Logs
1160 revlogs Revision Logs
1158 wireprotocol Wire Protocol
1161 wireprotocol Wire Protocol
1159 wireprotocolrpc
1162 wireprotocolrpc
1160 Wire Protocol RPC
1163 Wire Protocol RPC
1161 wireprotocolv2
1164 wireprotocolv2
1162 Wire Protocol Version 2
1165 Wire Protocol Version 2
1163
1166
1164 sub-topics can be accessed
1167 sub-topics can be accessed
1165
1168
1166 $ hg help internals.changegroups
1169 $ hg help internals.changegroups
1167 Changegroups
1170 Changegroups
1168 """"""""""""
1171 """"""""""""
1169
1172
1170 Changegroups are representations of repository revlog data, specifically
1173 Changegroups are representations of repository revlog data, specifically
1171 the changelog data, root/flat manifest data, treemanifest data, and
1174 the changelog data, root/flat manifest data, treemanifest data, and
1172 filelogs.
1175 filelogs.
1173
1176
1174 There are 4 versions of changegroups: "1", "2", "3" and "4". From a high-
1177 There are 4 versions of changegroups: "1", "2", "3" and "4". From a high-
1175 level, versions "1" and "2" are almost exactly the same, with the only
1178 level, versions "1" and "2" are almost exactly the same, with the only
1176 difference being an additional item in the *delta header*. Version "3"
1179 difference being an additional item in the *delta header*. Version "3"
1177 adds support for storage flags in the *delta header* and optionally
1180 adds support for storage flags in the *delta header* and optionally
1178 exchanging treemanifests (enabled by setting an option on the
1181 exchanging treemanifests (enabled by setting an option on the
1179 "changegroup" part in the bundle2). Version "4" adds support for
1182 "changegroup" part in the bundle2). Version "4" adds support for
1180 exchanging sidedata (additional revision metadata not part of the digest).
1183 exchanging sidedata (additional revision metadata not part of the digest).
1181
1184
1182 Changegroups when not exchanging treemanifests consist of 3 logical
1185 Changegroups when not exchanging treemanifests consist of 3 logical
1183 segments:
1186 segments:
1184
1187
1185 +---------------------------------+
1188 +---------------------------------+
1186 | | | |
1189 | | | |
1187 | changeset | manifest | filelogs |
1190 | changeset | manifest | filelogs |
1188 | | | |
1191 | | | |
1189 | | | |
1192 | | | |
1190 +---------------------------------+
1193 +---------------------------------+
1191
1194
1192 When exchanging treemanifests, there are 4 logical segments:
1195 When exchanging treemanifests, there are 4 logical segments:
1193
1196
1194 +-------------------------------------------------+
1197 +-------------------------------------------------+
1195 | | | | |
1198 | | | | |
1196 | changeset | root | treemanifests | filelogs |
1199 | changeset | root | treemanifests | filelogs |
1197 | | manifest | | |
1200 | | manifest | | |
1198 | | | | |
1201 | | | | |
1199 +-------------------------------------------------+
1202 +-------------------------------------------------+
1200
1203
1201 The principle building block of each segment is a *chunk*. A *chunk* is a
1204 The principle building block of each segment is a *chunk*. A *chunk* is a
1202 framed piece of data:
1205 framed piece of data:
1203
1206
1204 +---------------------------------------+
1207 +---------------------------------------+
1205 | | |
1208 | | |
1206 | length | data |
1209 | length | data |
1207 | (4 bytes) | (<length - 4> bytes) |
1210 | (4 bytes) | (<length - 4> bytes) |
1208 | | |
1211 | | |
1209 +---------------------------------------+
1212 +---------------------------------------+
1210
1213
1211 All integers are big-endian signed integers. Each chunk starts with a
1214 All integers are big-endian signed integers. Each chunk starts with a
1212 32-bit integer indicating the length of the entire chunk (including the
1215 32-bit integer indicating the length of the entire chunk (including the
1213 length field itself).
1216 length field itself).
1214
1217
1215 There is a special case chunk that has a value of 0 for the length
1218 There is a special case chunk that has a value of 0 for the length
1216 ("0x00000000"). We call this an *empty chunk*.
1219 ("0x00000000"). We call this an *empty chunk*.
1217
1220
1218 Delta Groups
1221 Delta Groups
1219 ============
1222 ============
1220
1223
1221 A *delta group* expresses the content of a revlog as a series of deltas,
1224 A *delta group* expresses the content of a revlog as a series of deltas,
1222 or patches against previous revisions.
1225 or patches against previous revisions.
1223
1226
1224 Delta groups consist of 0 or more *chunks* followed by the *empty chunk*
1227 Delta groups consist of 0 or more *chunks* followed by the *empty chunk*
1225 to signal the end of the delta group:
1228 to signal the end of the delta group:
1226
1229
1227 +------------------------------------------------------------------------+
1230 +------------------------------------------------------------------------+
1228 | | | | | |
1231 | | | | | |
1229 | chunk0 length | chunk0 data | chunk1 length | chunk1 data | 0x0 |
1232 | chunk0 length | chunk0 data | chunk1 length | chunk1 data | 0x0 |
1230 | (4 bytes) | (various) | (4 bytes) | (various) | (4 bytes) |
1233 | (4 bytes) | (various) | (4 bytes) | (various) | (4 bytes) |
1231 | | | | | |
1234 | | | | | |
1232 +------------------------------------------------------------------------+
1235 +------------------------------------------------------------------------+
1233
1236
1234 Each *chunk*'s data consists of the following:
1237 Each *chunk*'s data consists of the following:
1235
1238
1236 +---------------------------------------+
1239 +---------------------------------------+
1237 | | |
1240 | | |
1238 | delta header | delta data |
1241 | delta header | delta data |
1239 | (various by version) | (various) |
1242 | (various by version) | (various) |
1240 | | |
1243 | | |
1241 +---------------------------------------+
1244 +---------------------------------------+
1242
1245
1243 The *delta data* is a series of *delta*s that describe a diff from an
1246 The *delta data* is a series of *delta*s that describe a diff from an
1244 existing entry (either that the recipient already has, or previously
1247 existing entry (either that the recipient already has, or previously
1245 specified in the bundle/changegroup).
1248 specified in the bundle/changegroup).
1246
1249
1247 The *delta header* is different between versions "1", "2", "3" and "4" of
1250 The *delta header* is different between versions "1", "2", "3" and "4" of
1248 the changegroup format.
1251 the changegroup format.
1249
1252
1250 Version 1 (headerlen=80):
1253 Version 1 (headerlen=80):
1251
1254
1252 +------------------------------------------------------+
1255 +------------------------------------------------------+
1253 | | | | |
1256 | | | | |
1254 | node | p1 node | p2 node | link node |
1257 | node | p1 node | p2 node | link node |
1255 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
1258 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
1256 | | | | |
1259 | | | | |
1257 +------------------------------------------------------+
1260 +------------------------------------------------------+
1258
1261
1259 Version 2 (headerlen=100):
1262 Version 2 (headerlen=100):
1260
1263
1261 +------------------------------------------------------------------+
1264 +------------------------------------------------------------------+
1262 | | | | | |
1265 | | | | | |
1263 | node | p1 node | p2 node | base node | link node |
1266 | node | p1 node | p2 node | base node | link node |
1264 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
1267 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
1265 | | | | | |
1268 | | | | | |
1266 +------------------------------------------------------------------+
1269 +------------------------------------------------------------------+
1267
1270
1268 Version 3 (headerlen=102):
1271 Version 3 (headerlen=102):
1269
1272
1270 +------------------------------------------------------------------------------+
1273 +------------------------------------------------------------------------------+
1271 | | | | | | |
1274 | | | | | | |
1272 | node | p1 node | p2 node | base node | link node | flags |
1275 | node | p1 node | p2 node | base node | link node | flags |
1273 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (2 bytes) |
1276 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (2 bytes) |
1274 | | | | | | |
1277 | | | | | | |
1275 +------------------------------------------------------------------------------+
1278 +------------------------------------------------------------------------------+
1276
1279
1277 Version 4 (headerlen=103):
1280 Version 4 (headerlen=103):
1278
1281
1279 +------------------------------------------------------------------------------+----------+
1282 +------------------------------------------------------------------------------+----------+
1280 | | | | | | | |
1283 | | | | | | | |
1281 | node | p1 node | p2 node | base node | link node | flags | pflags |
1284 | node | p1 node | p2 node | base node | link node | flags | pflags |
1282 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (2 bytes) | (1 byte) |
1285 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (2 bytes) | (1 byte) |
1283 | | | | | | | |
1286 | | | | | | | |
1284 +------------------------------------------------------------------------------+----------+
1287 +------------------------------------------------------------------------------+----------+
1285
1288
1286 The *delta data* consists of "chunklen - 4 - headerlen" bytes, which
1289 The *delta data* consists of "chunklen - 4 - headerlen" bytes, which
1287 contain a series of *delta*s, densely packed (no separators). These deltas
1290 contain a series of *delta*s, densely packed (no separators). These deltas
1288 describe a diff from an existing entry (either that the recipient already
1291 describe a diff from an existing entry (either that the recipient already
1289 has, or previously specified in the bundle/changegroup). The format is
1292 has, or previously specified in the bundle/changegroup). The format is
1290 described more fully in "hg help internals.bdiff", but briefly:
1293 described more fully in "hg help internals.bdiff", but briefly:
1291
1294
1292 +---------------------------------------------------------------+
1295 +---------------------------------------------------------------+
1293 | | | | |
1296 | | | | |
1294 | start offset | end offset | new length | content |
1297 | start offset | end offset | new length | content |
1295 | (4 bytes) | (4 bytes) | (4 bytes) | (<new length> bytes) |
1298 | (4 bytes) | (4 bytes) | (4 bytes) | (<new length> bytes) |
1296 | | | | |
1299 | | | | |
1297 +---------------------------------------------------------------+
1300 +---------------------------------------------------------------+
1298
1301
1299 Please note that the length field in the delta data does *not* include
1302 Please note that the length field in the delta data does *not* include
1300 itself.
1303 itself.
1301
1304
1302 In version 1, the delta is always applied against the previous node from
1305 In version 1, the delta is always applied against the previous node from
1303 the changegroup or the first parent if this is the first entry in the
1306 the changegroup or the first parent if this is the first entry in the
1304 changegroup.
1307 changegroup.
1305
1308
1306 In version 2 and up, the delta base node is encoded in the entry in the
1309 In version 2 and up, the delta base node is encoded in the entry in the
1307 changegroup. This allows the delta to be expressed against any parent,
1310 changegroup. This allows the delta to be expressed against any parent,
1308 which can result in smaller deltas and more efficient encoding of data.
1311 which can result in smaller deltas and more efficient encoding of data.
1309
1312
1310 The *flags* field holds bitwise flags affecting the processing of revision
1313 The *flags* field holds bitwise flags affecting the processing of revision
1311 data. The following flags are defined:
1314 data. The following flags are defined:
1312
1315
1313 32768
1316 32768
1314 Censored revision. The revision's fulltext has been replaced by censor
1317 Censored revision. The revision's fulltext has been replaced by censor
1315 metadata. May only occur on file revisions.
1318 metadata. May only occur on file revisions.
1316
1319
1317 16384
1320 16384
1318 Ellipsis revision. Revision hash does not match data (likely due to
1321 Ellipsis revision. Revision hash does not match data (likely due to
1319 rewritten parents).
1322 rewritten parents).
1320
1323
1321 8192
1324 8192
1322 Externally stored. The revision fulltext contains "key:value" "\n"
1325 Externally stored. The revision fulltext contains "key:value" "\n"
1323 delimited metadata defining an object stored elsewhere. Used by the LFS
1326 delimited metadata defining an object stored elsewhere. Used by the LFS
1324 extension.
1327 extension.
1325
1328
1326 4096
1329 4096
1327 Contains copy information. This revision changes files in a way that
1330 Contains copy information. This revision changes files in a way that
1328 could affect copy tracing. This does *not* affect changegroup handling,
1331 could affect copy tracing. This does *not* affect changegroup handling,
1329 but is relevant for other parts of Mercurial.
1332 but is relevant for other parts of Mercurial.
1330
1333
1331 For historical reasons, the integer values are identical to revlog version
1334 For historical reasons, the integer values are identical to revlog version
1332 1 per-revision storage flags and correspond to bits being set in this
1335 1 per-revision storage flags and correspond to bits being set in this
1333 2-byte field. Bits were allocated starting from the most-significant bit,
1336 2-byte field. Bits were allocated starting from the most-significant bit,
1334 hence the reverse ordering and allocation of these flags.
1337 hence the reverse ordering and allocation of these flags.
1335
1338
1336 The *pflags* (protocol flags) field holds bitwise flags affecting the
1339 The *pflags* (protocol flags) field holds bitwise flags affecting the
1337 protocol itself. They are first in the header since they may affect the
1340 protocol itself. They are first in the header since they may affect the
1338 handling of the rest of the fields in a future version. They are defined
1341 handling of the rest of the fields in a future version. They are defined
1339 as such:
1342 as such:
1340
1343
1341 1 indicates whether to read a chunk of sidedata (of variable length) right
1344 1 indicates whether to read a chunk of sidedata (of variable length) right
1342 after the revision flags.
1345 after the revision flags.
1343
1346
1344 Changeset Segment
1347 Changeset Segment
1345 =================
1348 =================
1346
1349
1347 The *changeset segment* consists of a single *delta group* holding
1350 The *changeset segment* consists of a single *delta group* holding
1348 changelog data. The *empty chunk* at the end of the *delta group* denotes
1351 changelog data. The *empty chunk* at the end of the *delta group* denotes
1349 the boundary to the *manifest segment*.
1352 the boundary to the *manifest segment*.
1350
1353
1351 Manifest Segment
1354 Manifest Segment
1352 ================
1355 ================
1353
1356
1354 The *manifest segment* consists of a single *delta group* holding manifest
1357 The *manifest segment* consists of a single *delta group* holding manifest
1355 data. If treemanifests are in use, it contains only the manifest for the
1358 data. If treemanifests are in use, it contains only the manifest for the
1356 root directory of the repository. Otherwise, it contains the entire
1359 root directory of the repository. Otherwise, it contains the entire
1357 manifest data. The *empty chunk* at the end of the *delta group* denotes
1360 manifest data. The *empty chunk* at the end of the *delta group* denotes
1358 the boundary to the next segment (either the *treemanifests segment* or
1361 the boundary to the next segment (either the *treemanifests segment* or
1359 the *filelogs segment*, depending on version and the request options).
1362 the *filelogs segment*, depending on version and the request options).
1360
1363
1361 Treemanifests Segment
1364 Treemanifests Segment
1362 ---------------------
1365 ---------------------
1363
1366
1364 The *treemanifests segment* only exists in changegroup version "3" and
1367 The *treemanifests segment* only exists in changegroup version "3" and
1365 "4", and only if the 'treemanifest' param is part of the bundle2
1368 "4", and only if the 'treemanifest' param is part of the bundle2
1366 changegroup part (it is not possible to use changegroup version 3 or 4
1369 changegroup part (it is not possible to use changegroup version 3 or 4
1367 outside of bundle2). Aside from the filenames in the *treemanifests
1370 outside of bundle2). Aside from the filenames in the *treemanifests
1368 segment* containing a trailing "/" character, it behaves identically to
1371 segment* containing a trailing "/" character, it behaves identically to
1369 the *filelogs segment* (see below). The final sub-segment is followed by
1372 the *filelogs segment* (see below). The final sub-segment is followed by
1370 an *empty chunk* (logically, a sub-segment with filename size 0). This
1373 an *empty chunk* (logically, a sub-segment with filename size 0). This
1371 denotes the boundary to the *filelogs segment*.
1374 denotes the boundary to the *filelogs segment*.
1372
1375
1373 Filelogs Segment
1376 Filelogs Segment
1374 ================
1377 ================
1375
1378
1376 The *filelogs segment* consists of multiple sub-segments, each
1379 The *filelogs segment* consists of multiple sub-segments, each
1377 corresponding to an individual file whose data is being described:
1380 corresponding to an individual file whose data is being described:
1378
1381
1379 +--------------------------------------------------+
1382 +--------------------------------------------------+
1380 | | | | | |
1383 | | | | | |
1381 | filelog0 | filelog1 | filelog2 | ... | 0x0 |
1384 | filelog0 | filelog1 | filelog2 | ... | 0x0 |
1382 | | | | | (4 bytes) |
1385 | | | | | (4 bytes) |
1383 | | | | | |
1386 | | | | | |
1384 +--------------------------------------------------+
1387 +--------------------------------------------------+
1385
1388
1386 The final filelog sub-segment is followed by an *empty chunk* (logically,
1389 The final filelog sub-segment is followed by an *empty chunk* (logically,
1387 a sub-segment with filename size 0). This denotes the end of the segment
1390 a sub-segment with filename size 0). This denotes the end of the segment
1388 and of the overall changegroup.
1391 and of the overall changegroup.
1389
1392
1390 Each filelog sub-segment consists of the following:
1393 Each filelog sub-segment consists of the following:
1391
1394
1392 +------------------------------------------------------+
1395 +------------------------------------------------------+
1393 | | | |
1396 | | | |
1394 | filename length | filename | delta group |
1397 | filename length | filename | delta group |
1395 | (4 bytes) | (<length - 4> bytes) | (various) |
1398 | (4 bytes) | (<length - 4> bytes) | (various) |
1396 | | | |
1399 | | | |
1397 +------------------------------------------------------+
1400 +------------------------------------------------------+
1398
1401
1399 That is, a *chunk* consisting of the filename (not terminated or padded)
1402 That is, a *chunk* consisting of the filename (not terminated or padded)
1400 followed by N chunks constituting the *delta group* for this file. The
1403 followed by N chunks constituting the *delta group* for this file. The
1401 *empty chunk* at the end of each *delta group* denotes the boundary to the
1404 *empty chunk* at the end of each *delta group* denotes the boundary to the
1402 next filelog sub-segment.
1405 next filelog sub-segment.
1403
1406
1404 non-existent subtopics print an error
1407 non-existent subtopics print an error
1405
1408
1406 $ hg help internals.foo
1409 $ hg help internals.foo
1407 abort: no such help topic: internals.foo
1410 abort: no such help topic: internals.foo
1408 (try 'hg help --keyword foo')
1411 (try 'hg help --keyword foo')
1409 [10]
1412 [10]
1410
1413
1411 test advanced, deprecated and experimental options are hidden in command help
1414 test advanced, deprecated and experimental options are hidden in command help
1412 $ hg help debugoptADV
1415 $ hg help debugoptADV
1413 hg debugoptADV
1416 hg debugoptADV
1414
1417
1415 (no help text available)
1418 (no help text available)
1416
1419
1417 options:
1420 options:
1418
1421
1419 (some details hidden, use --verbose to show complete help)
1422 (some details hidden, use --verbose to show complete help)
1420 $ hg help debugoptDEP
1423 $ hg help debugoptDEP
1421 hg debugoptDEP
1424 hg debugoptDEP
1422
1425
1423 (no help text available)
1426 (no help text available)
1424
1427
1425 options:
1428 options:
1426
1429
1427 (some details hidden, use --verbose to show complete help)
1430 (some details hidden, use --verbose to show complete help)
1428
1431
1429 $ hg help debugoptEXP
1432 $ hg help debugoptEXP
1430 hg debugoptEXP
1433 hg debugoptEXP
1431
1434
1432 (no help text available)
1435 (no help text available)
1433
1436
1434 options:
1437 options:
1435
1438
1436 (some details hidden, use --verbose to show complete help)
1439 (some details hidden, use --verbose to show complete help)
1437
1440
1438 test advanced, deprecated and experimental options are shown with -v
1441 test advanced, deprecated and experimental options are shown with -v
1439 $ hg help -v debugoptADV | grep aopt
1442 $ hg help -v debugoptADV | grep aopt
1440 --aopt option is (ADVANCED)
1443 --aopt option is (ADVANCED)
1441 $ hg help -v debugoptDEP | grep dopt
1444 $ hg help -v debugoptDEP | grep dopt
1442 --dopt option is (DEPRECATED)
1445 --dopt option is (DEPRECATED)
1443 $ hg help -v debugoptEXP | grep eopt
1446 $ hg help -v debugoptEXP | grep eopt
1444 --eopt option is (EXPERIMENTAL)
1447 --eopt option is (EXPERIMENTAL)
1445
1448
1446 #if gettext
1449 #if gettext
1447 test deprecated option is hidden with translation with untranslated description
1450 test deprecated option is hidden with translation with untranslated description
1448 (use many globy for not failing on changed transaction)
1451 (use many globy for not failing on changed transaction)
1449 $ LANGUAGE=sv hg help debugoptDEP
1452 $ LANGUAGE=sv hg help debugoptDEP
1450 hg debugoptDEP
1453 hg debugoptDEP
1451
1454
1452 (*) (glob)
1455 (*) (glob)
1453
1456
1454 options:
1457 options:
1455
1458
1456 (some details hidden, use --verbose to show complete help)
1459 (some details hidden, use --verbose to show complete help)
1457 #endif
1460 #endif
1458
1461
1459 Test commands that collide with topics (issue4240)
1462 Test commands that collide with topics (issue4240)
1460
1463
1461 $ hg config -hq
1464 $ hg config -hq
1462 hg config [-u] [NAME]...
1465 hg config [-u] [NAME]...
1463
1466
1464 show combined config settings from all hgrc files
1467 show combined config settings from all hgrc files
1465 $ hg showconfig -hq
1468 $ hg showconfig -hq
1466 hg config [-u] [NAME]...
1469 hg config [-u] [NAME]...
1467
1470
1468 show combined config settings from all hgrc files
1471 show combined config settings from all hgrc files
1469
1472
1470 Test a help topic
1473 Test a help topic
1471
1474
1472 $ hg help dates
1475 $ hg help dates
1473 Date Formats
1476 Date Formats
1474 """"""""""""
1477 """"""""""""
1475
1478
1476 Some commands allow the user to specify a date, e.g.:
1479 Some commands allow the user to specify a date, e.g.:
1477
1480
1478 - backout, commit, import, tag: Specify the commit date.
1481 - backout, commit, import, tag: Specify the commit date.
1479 - log, revert, update: Select revision(s) by date.
1482 - log, revert, update: Select revision(s) by date.
1480
1483
1481 Many date formats are valid. Here are some examples:
1484 Many date formats are valid. Here are some examples:
1482
1485
1483 - "Wed Dec 6 13:18:29 2006" (local timezone assumed)
1486 - "Wed Dec 6 13:18:29 2006" (local timezone assumed)
1484 - "Dec 6 13:18 -0600" (year assumed, time offset provided)
1487 - "Dec 6 13:18 -0600" (year assumed, time offset provided)
1485 - "Dec 6 13:18 UTC" (UTC and GMT are aliases for +0000)
1488 - "Dec 6 13:18 UTC" (UTC and GMT are aliases for +0000)
1486 - "Dec 6" (midnight)
1489 - "Dec 6" (midnight)
1487 - "13:18" (today assumed)
1490 - "13:18" (today assumed)
1488 - "3:39" (3:39AM assumed)
1491 - "3:39" (3:39AM assumed)
1489 - "3:39pm" (15:39)
1492 - "3:39pm" (15:39)
1490 - "2006-12-06 13:18:29" (ISO 8601 format)
1493 - "2006-12-06 13:18:29" (ISO 8601 format)
1491 - "2006-12-6 13:18"
1494 - "2006-12-6 13:18"
1492 - "2006-12-6"
1495 - "2006-12-6"
1493 - "12-6"
1496 - "12-6"
1494 - "12/6"
1497 - "12/6"
1495 - "12/6/6" (Dec 6 2006)
1498 - "12/6/6" (Dec 6 2006)
1496 - "today" (midnight)
1499 - "today" (midnight)
1497 - "yesterday" (midnight)
1500 - "yesterday" (midnight)
1498 - "now" - right now
1501 - "now" - right now
1499
1502
1500 Lastly, there is Mercurial's internal format:
1503 Lastly, there is Mercurial's internal format:
1501
1504
1502 - "1165411109 0" (Wed Dec 6 13:18:29 2006 UTC)
1505 - "1165411109 0" (Wed Dec 6 13:18:29 2006 UTC)
1503
1506
1504 This is the internal representation format for dates. The first number is
1507 This is the internal representation format for dates. The first number is
1505 the number of seconds since the epoch (1970-01-01 00:00 UTC). The second
1508 the number of seconds since the epoch (1970-01-01 00:00 UTC). The second
1506 is the offset of the local timezone, in seconds west of UTC (negative if
1509 is the offset of the local timezone, in seconds west of UTC (negative if
1507 the timezone is east of UTC).
1510 the timezone is east of UTC).
1508
1511
1509 The log command also accepts date ranges:
1512 The log command also accepts date ranges:
1510
1513
1511 - "<DATE" - at or before a given date/time
1514 - "<DATE" - at or before a given date/time
1512 - ">DATE" - on or after a given date/time
1515 - ">DATE" - on or after a given date/time
1513 - "DATE to DATE" - a date range, inclusive
1516 - "DATE to DATE" - a date range, inclusive
1514 - "-DAYS" - within a given number of days from today
1517 - "-DAYS" - within a given number of days from today
1515
1518
1516 Test repeated config section name
1519 Test repeated config section name
1517
1520
1518 $ hg help config.host
1521 $ hg help config.host
1519 "http_proxy.host"
1522 "http_proxy.host"
1520 Host name and (optional) port of the proxy server, for example
1523 Host name and (optional) port of the proxy server, for example
1521 "myproxy:8000".
1524 "myproxy:8000".
1522
1525
1523 "smtp.host"
1526 "smtp.host"
1524 Host name of mail server, e.g. "mail.example.com".
1527 Host name of mail server, e.g. "mail.example.com".
1525
1528
1526
1529
1527 Test section name with dot
1530 Test section name with dot
1528
1531
1529 $ hg help config.ui.username
1532 $ hg help config.ui.username
1530 "ui.username"
1533 "ui.username"
1531 The committer of a changeset created when running "commit". Typically
1534 The committer of a changeset created when running "commit". Typically
1532 a person's name and email address, e.g. "Fred Widget
1535 a person's name and email address, e.g. "Fred Widget
1533 <fred@example.com>". Environment variables in the username are
1536 <fred@example.com>". Environment variables in the username are
1534 expanded.
1537 expanded.
1535
1538
1536 (default: "$EMAIL" or "username@hostname". If the username in hgrc is
1539 (default: "$EMAIL" or "username@hostname". If the username in hgrc is
1537 empty, e.g. if the system admin set "username =" in the system hgrc,
1540 empty, e.g. if the system admin set "username =" in the system hgrc,
1538 it has to be specified manually or in a different hgrc file)
1541 it has to be specified manually or in a different hgrc file)
1539
1542
1540
1543
1541 $ hg help config.annotate.git
1544 $ hg help config.annotate.git
1542 abort: help section not found: config.annotate.git
1545 abort: help section not found: config.annotate.git
1543 [10]
1546 [10]
1544
1547
1545 $ hg help config.update.check
1548 $ hg help config.update.check
1546 "commands.update.check"
1549 "commands.update.check"
1547 Determines what level of checking 'hg update' will perform before
1550 Determines what level of checking 'hg update' will perform before
1548 moving to a destination revision. Valid values are "abort", "none",
1551 moving to a destination revision. Valid values are "abort", "none",
1549 "linear", and "noconflict".
1552 "linear", and "noconflict".
1550
1553
1551 - "abort" always fails if the working directory has uncommitted
1554 - "abort" always fails if the working directory has uncommitted
1552 changes.
1555 changes.
1553 - "none" performs no checking, and may result in a merge with
1556 - "none" performs no checking, and may result in a merge with
1554 uncommitted changes.
1557 uncommitted changes.
1555 - "linear" allows any update as long as it follows a straight line in
1558 - "linear" allows any update as long as it follows a straight line in
1556 the revision history, and may trigger a merge with uncommitted
1559 the revision history, and may trigger a merge with uncommitted
1557 changes.
1560 changes.
1558 - "noconflict" will allow any update which would not trigger a merge
1561 - "noconflict" will allow any update which would not trigger a merge
1559 with uncommitted changes, if any are present.
1562 with uncommitted changes, if any are present.
1560
1563
1561 (default: "linear")
1564 (default: "linear")
1562
1565
1563
1566
1564 $ hg help config.commands.update.check
1567 $ hg help config.commands.update.check
1565 "commands.update.check"
1568 "commands.update.check"
1566 Determines what level of checking 'hg update' will perform before
1569 Determines what level of checking 'hg update' will perform before
1567 moving to a destination revision. Valid values are "abort", "none",
1570 moving to a destination revision. Valid values are "abort", "none",
1568 "linear", and "noconflict".
1571 "linear", and "noconflict".
1569
1572
1570 - "abort" always fails if the working directory has uncommitted
1573 - "abort" always fails if the working directory has uncommitted
1571 changes.
1574 changes.
1572 - "none" performs no checking, and may result in a merge with
1575 - "none" performs no checking, and may result in a merge with
1573 uncommitted changes.
1576 uncommitted changes.
1574 - "linear" allows any update as long as it follows a straight line in
1577 - "linear" allows any update as long as it follows a straight line in
1575 the revision history, and may trigger a merge with uncommitted
1578 the revision history, and may trigger a merge with uncommitted
1576 changes.
1579 changes.
1577 - "noconflict" will allow any update which would not trigger a merge
1580 - "noconflict" will allow any update which would not trigger a merge
1578 with uncommitted changes, if any are present.
1581 with uncommitted changes, if any are present.
1579
1582
1580 (default: "linear")
1583 (default: "linear")
1581
1584
1582
1585
1583 $ hg help config.ommands.update.check
1586 $ hg help config.ommands.update.check
1584 abort: help section not found: config.ommands.update.check
1587 abort: help section not found: config.ommands.update.check
1585 [10]
1588 [10]
1586
1589
1587 Unrelated trailing paragraphs shouldn't be included
1590 Unrelated trailing paragraphs shouldn't be included
1588
1591
1589 $ hg help config.extramsg | grep '^$'
1592 $ hg help config.extramsg | grep '^$'
1590
1593
1591
1594
1592 Test capitalized section name
1595 Test capitalized section name
1593
1596
1594 $ hg help scripting.HGPLAIN > /dev/null
1597 $ hg help scripting.HGPLAIN > /dev/null
1595
1598
1596 Help subsection:
1599 Help subsection:
1597
1600
1598 $ hg help config.charsets |grep "Email example:" > /dev/null
1601 $ hg help config.charsets |grep "Email example:" > /dev/null
1599 [1]
1602 [1]
1600
1603
1601 Show nested definitions
1604 Show nested definitions
1602 ("profiling.type"[break]"ls"[break]"stat"[break])
1605 ("profiling.type"[break]"ls"[break]"stat"[break])
1603
1606
1604 $ hg help config.type | grep -E '^$'|wc -l
1607 $ hg help config.type | grep -E '^$'|wc -l
1605 \s*3 (re)
1608 \s*3 (re)
1606
1609
1607 $ hg help config.profiling.type.ls
1610 $ hg help config.profiling.type.ls
1608 "profiling.type.ls"
1611 "profiling.type.ls"
1609 Use Python's built-in instrumenting profiler. This profiler works on
1612 Use Python's built-in instrumenting profiler. This profiler works on
1610 all platforms, but each line number it reports is the first line of
1613 all platforms, but each line number it reports is the first line of
1611 a function. This restriction makes it difficult to identify the
1614 a function. This restriction makes it difficult to identify the
1612 expensive parts of a non-trivial function.
1615 expensive parts of a non-trivial function.
1613
1616
1614
1617
1615 Separate sections from subsections
1618 Separate sections from subsections
1616
1619
1617 $ hg help config.format | grep -E '^ ("|-)|^\s*$' | uniq
1620 $ hg help config.format | grep -E '^ ("|-)|^\s*$' | uniq
1618 "format"
1621 "format"
1619 --------
1622 --------
1620
1623
1621 "usegeneraldelta"
1624 "usegeneraldelta"
1622
1625
1623 "dotencode"
1626 "dotencode"
1624
1627
1625 "usefncache"
1628 "usefncache"
1626
1629
1627 "use-dirstate-v2"
1630 "use-dirstate-v2"
1628
1631
1629 "use-dirstate-v2.automatic-upgrade-of-mismatching-repositories"
1632 "use-dirstate-v2.automatic-upgrade-of-mismatching-repositories"
1630
1633
1631 "use-dirstate-v2.automatic-upgrade-of-mismatching-repositories:quiet"
1634 "use-dirstate-v2.automatic-upgrade-of-mismatching-repositories:quiet"
1632
1635
1633 "use-dirstate-tracked-hint"
1636 "use-dirstate-tracked-hint"
1634
1637
1635 "use-dirstate-tracked-hint.automatic-upgrade-of-mismatching-repositories"
1638 "use-dirstate-tracked-hint.automatic-upgrade-of-mismatching-repositories"
1636
1639
1637 "use-dirstate-tracked-hint.automatic-upgrade-of-mismatching-repositories:quiet"
1640 "use-dirstate-tracked-hint.automatic-upgrade-of-mismatching-repositories:quiet"
1638
1641
1639 "use-persistent-nodemap"
1642 "use-persistent-nodemap"
1640
1643
1641 "use-share-safe"
1644 "use-share-safe"
1642
1645
1643 "use-share-safe.automatic-upgrade-of-mismatching-repositories"
1646 "use-share-safe.automatic-upgrade-of-mismatching-repositories"
1644
1647
1645 "use-share-safe.automatic-upgrade-of-mismatching-repositories:quiet"
1648 "use-share-safe.automatic-upgrade-of-mismatching-repositories:quiet"
1646
1649
1647 "usestore"
1650 "usestore"
1648
1651
1649 "sparse-revlog"
1652 "sparse-revlog"
1650
1653
1651 "revlog-compression"
1654 "revlog-compression"
1652
1655
1653 "bookmarks-in-store"
1656 "bookmarks-in-store"
1654
1657
1655 "profiling"
1658 "profiling"
1656 -----------
1659 -----------
1657
1660
1658 "format"
1661 "format"
1659
1662
1660 "progress"
1663 "progress"
1661 ----------
1664 ----------
1662
1665
1663 "format"
1666 "format"
1664
1667
1665
1668
1666 Last item in help config.*:
1669 Last item in help config.*:
1667
1670
1668 $ hg help config.`hg help config|grep '^ "'| \
1671 $ hg help config.`hg help config|grep '^ "'| \
1669 > tail -1|sed 's![ "]*!!g'`| \
1672 > tail -1|sed 's![ "]*!!g'`| \
1670 > grep 'hg help -c config' > /dev/null
1673 > grep 'hg help -c config' > /dev/null
1671 [1]
1674 [1]
1672
1675
1673 note to use help -c for general hg help config:
1676 note to use help -c for general hg help config:
1674
1677
1675 $ hg help config |grep 'hg help -c config' > /dev/null
1678 $ hg help config |grep 'hg help -c config' > /dev/null
1676
1679
1677 Test templating help
1680 Test templating help
1678
1681
1679 $ hg help templating | grep -E '(desc|diffstat|firstline|nonempty) '
1682 $ hg help templating | grep -E '(desc|diffstat|firstline|nonempty) '
1680 desc String. The text of the changeset description.
1683 desc String. The text of the changeset description.
1681 diffstat String. Statistics of changes with the following format:
1684 diffstat String. Statistics of changes with the following format:
1682 firstline Any text. Returns the first line of text.
1685 firstline Any text. Returns the first line of text.
1683 nonempty Any text. Returns '(none)' if the string is empty.
1686 nonempty Any text. Returns '(none)' if the string is empty.
1684
1687
1685 Test deprecated items
1688 Test deprecated items
1686
1689
1687 $ hg help -v templating | grep currentbookmark
1690 $ hg help -v templating | grep currentbookmark
1688 currentbookmark
1691 currentbookmark
1689 $ hg help templating | (grep currentbookmark || true)
1692 $ hg help templating | (grep currentbookmark || true)
1690
1693
1691 Test help hooks
1694 Test help hooks
1692
1695
1693 $ cat > helphook1.py <<EOF
1696 $ cat > helphook1.py <<EOF
1694 > from mercurial import help
1697 > from mercurial import help
1695 >
1698 >
1696 > def rewrite(ui, topic, doc):
1699 > def rewrite(ui, topic, doc):
1697 > return doc + b'\nhelphook1\n'
1700 > return doc + b'\nhelphook1\n'
1698 >
1701 >
1699 > def extsetup(ui):
1702 > def extsetup(ui):
1700 > help.addtopichook(b'revisions', rewrite)
1703 > help.addtopichook(b'revisions', rewrite)
1701 > EOF
1704 > EOF
1702 $ cat > helphook2.py <<EOF
1705 $ cat > helphook2.py <<EOF
1703 > from mercurial import help
1706 > from mercurial import help
1704 >
1707 >
1705 > def rewrite(ui, topic, doc):
1708 > def rewrite(ui, topic, doc):
1706 > return doc + b'\nhelphook2\n'
1709 > return doc + b'\nhelphook2\n'
1707 >
1710 >
1708 > def extsetup(ui):
1711 > def extsetup(ui):
1709 > help.addtopichook(b'revisions', rewrite)
1712 > help.addtopichook(b'revisions', rewrite)
1710 > EOF
1713 > EOF
1711 $ echo '[extensions]' >> $HGRCPATH
1714 $ echo '[extensions]' >> $HGRCPATH
1712 $ echo "helphook1 = `pwd`/helphook1.py" >> $HGRCPATH
1715 $ echo "helphook1 = `pwd`/helphook1.py" >> $HGRCPATH
1713 $ echo "helphook2 = `pwd`/helphook2.py" >> $HGRCPATH
1716 $ echo "helphook2 = `pwd`/helphook2.py" >> $HGRCPATH
1714 $ hg help revsets | grep helphook
1717 $ hg help revsets | grep helphook
1715 helphook1
1718 helphook1
1716 helphook2
1719 helphook2
1717
1720
1718 help -c should only show debug --debug
1721 help -c should only show debug --debug
1719
1722
1720 $ hg help -c --debug|grep -E debug|wc -l|grep -E '^\s*0\s*$'
1723 $ hg help -c --debug|grep -E debug|wc -l|grep -E '^\s*0\s*$'
1721 [1]
1724 [1]
1722
1725
1723 help -c should only show deprecated for -v
1726 help -c should only show deprecated for -v
1724
1727
1725 $ hg help -c -v|grep -E DEPRECATED|wc -l|grep -E '^\s*0\s*$'
1728 $ hg help -c -v|grep -E DEPRECATED|wc -l|grep -E '^\s*0\s*$'
1726 [1]
1729 [1]
1727
1730
1728 Test -s / --system
1731 Test -s / --system
1729
1732
1730 $ hg help config.files -s windows |grep 'etc/mercurial' | \
1733 $ hg help config.files -s windows |grep 'etc/mercurial' | \
1731 > wc -l | sed -e 's/ //g'
1734 > wc -l | sed -e 's/ //g'
1732 0
1735 0
1733 $ hg help config.files --system unix | grep 'USER' | \
1736 $ hg help config.files --system unix | grep 'USER' | \
1734 > wc -l | sed -e 's/ //g'
1737 > wc -l | sed -e 's/ //g'
1735 0
1738 0
1736
1739
1737 Test -e / -c / -k combinations
1740 Test -e / -c / -k combinations
1738
1741
1739 $ hg help -c|grep -E '^[A-Z].*:|^ debug'
1742 $ hg help -c|grep -E '^[A-Z].*:|^ debug'
1740 Commands:
1743 Commands:
1741 $ hg help -e|grep -E '^[A-Z].*:|^ debug'
1744 $ hg help -e|grep -E '^[A-Z].*:|^ debug'
1742 Extensions:
1745 Extensions:
1743 $ hg help -k|grep -E '^[A-Z].*:|^ debug'
1746 $ hg help -k|grep -E '^[A-Z].*:|^ debug'
1744 Topics:
1747 Topics:
1745 Commands:
1748 Commands:
1746 Extensions:
1749 Extensions:
1747 Extension Commands:
1750 Extension Commands:
1748 $ hg help -c schemes
1751 $ hg help -c schemes
1749 abort: no such help topic: schemes
1752 abort: no such help topic: schemes
1750 (try 'hg help --keyword schemes')
1753 (try 'hg help --keyword schemes')
1751 [10]
1754 [10]
1752 $ hg help -e schemes |head -1
1755 $ hg help -e schemes |head -1
1753 schemes extension - extend schemes with shortcuts to repository swarms
1756 schemes extension - extend schemes with shortcuts to repository swarms
1754 $ hg help -c -k dates |grep -E '^(Topics|Extensions|Commands):'
1757 $ hg help -c -k dates |grep -E '^(Topics|Extensions|Commands):'
1755 Commands:
1758 Commands:
1756 $ hg help -e -k a |grep -E '^(Topics|Extensions|Commands):'
1759 $ hg help -e -k a |grep -E '^(Topics|Extensions|Commands):'
1757 Extensions:
1760 Extensions:
1758 $ hg help -e -c -k date |grep -E '^(Topics|Extensions|Commands):'
1761 $ hg help -e -c -k date |grep -E '^(Topics|Extensions|Commands):'
1759 Extensions:
1762 Extensions:
1760 Commands:
1763 Commands:
1761 $ hg help -c commit > /dev/null
1764 $ hg help -c commit > /dev/null
1762 $ hg help -e -c commit > /dev/null
1765 $ hg help -e -c commit > /dev/null
1763 $ hg help -e commit
1766 $ hg help -e commit
1764 abort: no such help topic: commit
1767 abort: no such help topic: commit
1765 (try 'hg help --keyword commit')
1768 (try 'hg help --keyword commit')
1766 [10]
1769 [10]
1767
1770
1768 Test keyword search help
1771 Test keyword search help
1769
1772
1770 $ cat > prefixedname.py <<EOF
1773 $ cat > prefixedname.py <<EOF
1771 > '''matched against word "clone"
1774 > '''matched against word "clone"
1772 > '''
1775 > '''
1773 > EOF
1776 > EOF
1774 $ echo '[extensions]' >> $HGRCPATH
1777 $ echo '[extensions]' >> $HGRCPATH
1775 $ echo "dot.dot.prefixedname = `pwd`/prefixedname.py" >> $HGRCPATH
1778 $ echo "dot.dot.prefixedname = `pwd`/prefixedname.py" >> $HGRCPATH
1776 $ hg help -k clone
1779 $ hg help -k clone
1777 Topics:
1780 Topics:
1778
1781
1779 config Configuration Files
1782 config Configuration Files
1780 extensions Using Additional Features
1783 extensions Using Additional Features
1781 glossary Glossary
1784 glossary Glossary
1782 phases Working with Phases
1785 phases Working with Phases
1783 subrepos Subrepositories
1786 subrepos Subrepositories
1784 urls URL Paths
1787 urls URL Paths
1785
1788
1786 Commands:
1789 Commands:
1787
1790
1788 bookmarks create a new bookmark or list existing bookmarks
1791 bookmarks create a new bookmark or list existing bookmarks
1789 clone make a copy of an existing repository
1792 clone make a copy of an existing repository
1790 paths show aliases for remote repositories
1793 paths show aliases for remote repositories
1791 pull pull changes from the specified source
1794 pull pull changes from the specified source
1792 update update working directory (or switch revisions)
1795 update update working directory (or switch revisions)
1793
1796
1794 Extensions:
1797 Extensions:
1795
1798
1796 clonebundles advertise pre-generated bundles to seed clones
1799 clonebundles advertise pre-generated bundles to seed clones
1797 narrow create clones which fetch history data for subset of files
1800 narrow create clones which fetch history data for subset of files
1798 (EXPERIMENTAL)
1801 (EXPERIMENTAL)
1799 prefixedname matched against word "clone"
1802 prefixedname matched against word "clone"
1800 relink recreates hardlinks between repository clones
1803 relink recreates hardlinks between repository clones
1801
1804
1802 Extension Commands:
1805 Extension Commands:
1803
1806
1804 admin::clone-bundles-clear remove existing clone bundle caches
1807 admin::clone-bundles-clear remove existing clone bundle caches
1805 admin::clone-bundles-refresh generate clone bundles according to the
1808 admin::clone-bundles-refresh generate clone bundles according to the
1806 configuration
1809 configuration
1807 qclone clone main and patch repository at same time
1810 qclone clone main and patch repository at same time
1808
1811
1809 Test unfound topic
1812 Test unfound topic
1810
1813
1811 $ hg help nonexistingtopicthatwillneverexisteverever
1814 $ hg help nonexistingtopicthatwillneverexisteverever
1812 abort: no such help topic: nonexistingtopicthatwillneverexisteverever
1815 abort: no such help topic: nonexistingtopicthatwillneverexisteverever
1813 (try 'hg help --keyword nonexistingtopicthatwillneverexisteverever')
1816 (try 'hg help --keyword nonexistingtopicthatwillneverexisteverever')
1814 [10]
1817 [10]
1815
1818
1816 Test unfound keyword
1819 Test unfound keyword
1817
1820
1818 $ hg help --keyword nonexistingwordthatwillneverexisteverever
1821 $ hg help --keyword nonexistingwordthatwillneverexisteverever
1819 abort: no matches
1822 abort: no matches
1820 (try 'hg help' for a list of topics)
1823 (try 'hg help' for a list of topics)
1821 [10]
1824 [10]
1822
1825
1823 Test omit indicating for help
1826 Test omit indicating for help
1824
1827
1825 $ cat > addverboseitems.py <<EOF
1828 $ cat > addverboseitems.py <<EOF
1826 > r'''extension to test omit indicating.
1829 > r'''extension to test omit indicating.
1827 >
1830 >
1828 > This paragraph is never omitted (for extension)
1831 > This paragraph is never omitted (for extension)
1829 >
1832 >
1830 > .. container:: verbose
1833 > .. container:: verbose
1831 >
1834 >
1832 > This paragraph is omitted,
1835 > This paragraph is omitted,
1833 > if :hg:\`help\` is invoked without \`\`-v\`\` (for extension)
1836 > if :hg:\`help\` is invoked without \`\`-v\`\` (for extension)
1834 >
1837 >
1835 > This paragraph is never omitted, too (for extension)
1838 > This paragraph is never omitted, too (for extension)
1836 > '''
1839 > '''
1837 > from mercurial import commands, help
1840 > from mercurial import commands, help
1838 > testtopic = br"""This paragraph is never omitted (for topic).
1841 > testtopic = br"""This paragraph is never omitted (for topic).
1839 >
1842 >
1840 > .. container:: verbose
1843 > .. container:: verbose
1841 >
1844 >
1842 > This paragraph is omitted,
1845 > This paragraph is omitted,
1843 > if :hg:\`help\` is invoked without \`\`-v\`\` (for topic)
1846 > if :hg:\`help\` is invoked without \`\`-v\`\` (for topic)
1844 >
1847 >
1845 > This paragraph is never omitted, too (for topic)
1848 > This paragraph is never omitted, too (for topic)
1846 > """
1849 > """
1847 > def extsetup(ui):
1850 > def extsetup(ui):
1848 > help.helptable.append(([b"topic-containing-verbose"],
1851 > help.helptable.append(([b"topic-containing-verbose"],
1849 > b"This is the topic to test omit indicating.",
1852 > b"This is the topic to test omit indicating.",
1850 > lambda ui: testtopic))
1853 > lambda ui: testtopic))
1851 > EOF
1854 > EOF
1852 $ echo '[extensions]' >> $HGRCPATH
1855 $ echo '[extensions]' >> $HGRCPATH
1853 $ echo "addverboseitems = `pwd`/addverboseitems.py" >> $HGRCPATH
1856 $ echo "addverboseitems = `pwd`/addverboseitems.py" >> $HGRCPATH
1854 $ hg help addverboseitems
1857 $ hg help addverboseitems
1855 addverboseitems extension - extension to test omit indicating.
1858 addverboseitems extension - extension to test omit indicating.
1856
1859
1857 This paragraph is never omitted (for extension)
1860 This paragraph is never omitted (for extension)
1858
1861
1859 This paragraph is never omitted, too (for extension)
1862 This paragraph is never omitted, too (for extension)
1860
1863
1861 (some details hidden, use --verbose to show complete help)
1864 (some details hidden, use --verbose to show complete help)
1862
1865
1863 no commands defined
1866 no commands defined
1864 $ hg help -v addverboseitems
1867 $ hg help -v addverboseitems
1865 addverboseitems extension - extension to test omit indicating.
1868 addverboseitems extension - extension to test omit indicating.
1866
1869
1867 This paragraph is never omitted (for extension)
1870 This paragraph is never omitted (for extension)
1868
1871
1869 This paragraph is omitted, if 'hg help' is invoked without "-v" (for
1872 This paragraph is omitted, if 'hg help' is invoked without "-v" (for
1870 extension)
1873 extension)
1871
1874
1872 This paragraph is never omitted, too (for extension)
1875 This paragraph is never omitted, too (for extension)
1873
1876
1874 no commands defined
1877 no commands defined
1875 $ hg help topic-containing-verbose
1878 $ hg help topic-containing-verbose
1876 This is the topic to test omit indicating.
1879 This is the topic to test omit indicating.
1877 """"""""""""""""""""""""""""""""""""""""""
1880 """"""""""""""""""""""""""""""""""""""""""
1878
1881
1879 This paragraph is never omitted (for topic).
1882 This paragraph is never omitted (for topic).
1880
1883
1881 This paragraph is never omitted, too (for topic)
1884 This paragraph is never omitted, too (for topic)
1882
1885
1883 (some details hidden, use --verbose to show complete help)
1886 (some details hidden, use --verbose to show complete help)
1884 $ hg help -v topic-containing-verbose
1887 $ hg help -v topic-containing-verbose
1885 This is the topic to test omit indicating.
1888 This is the topic to test omit indicating.
1886 """"""""""""""""""""""""""""""""""""""""""
1889 """"""""""""""""""""""""""""""""""""""""""
1887
1890
1888 This paragraph is never omitted (for topic).
1891 This paragraph is never omitted (for topic).
1889
1892
1890 This paragraph is omitted, if 'hg help' is invoked without "-v" (for
1893 This paragraph is omitted, if 'hg help' is invoked without "-v" (for
1891 topic)
1894 topic)
1892
1895
1893 This paragraph is never omitted, too (for topic)
1896 This paragraph is never omitted, too (for topic)
1894
1897
1895 Test section lookup
1898 Test section lookup
1896
1899
1897 $ hg help revset.merge
1900 $ hg help revset.merge
1898 "merge()"
1901 "merge()"
1899 Changeset is a merge changeset.
1902 Changeset is a merge changeset.
1900
1903
1901 $ hg help glossary.dag
1904 $ hg help glossary.dag
1902 DAG
1905 DAG
1903 The repository of changesets of a distributed version control system
1906 The repository of changesets of a distributed version control system
1904 (DVCS) can be described as a directed acyclic graph (DAG), consisting
1907 (DVCS) can be described as a directed acyclic graph (DAG), consisting
1905 of nodes and edges, where nodes correspond to changesets and edges
1908 of nodes and edges, where nodes correspond to changesets and edges
1906 imply a parent -> child relation. This graph can be visualized by
1909 imply a parent -> child relation. This graph can be visualized by
1907 graphical tools such as 'hg log --graph'. In Mercurial, the DAG is
1910 graphical tools such as 'hg log --graph'. In Mercurial, the DAG is
1908 limited by the requirement for children to have at most two parents.
1911 limited by the requirement for children to have at most two parents.
1909
1912
1910
1913
1911 $ hg help hgrc.paths
1914 $ hg help hgrc.paths
1912 "paths"
1915 "paths"
1913 -------
1916 -------
1914
1917
1915 Assigns symbolic names and behavior to repositories.
1918 Assigns symbolic names and behavior to repositories.
1916
1919
1917 Options are symbolic names defining the URL or directory that is the
1920 Options are symbolic names defining the URL or directory that is the
1918 location of the repository. Example:
1921 location of the repository. Example:
1919
1922
1920 [paths]
1923 [paths]
1921 my_server = https://example.com/my_repo
1924 my_server = https://example.com/my_repo
1922 local_path = /home/me/repo
1925 local_path = /home/me/repo
1923
1926
1924 These symbolic names can be used from the command line. To pull from
1927 These symbolic names can be used from the command line. To pull from
1925 "my_server": 'hg pull my_server'. To push to "local_path": 'hg push
1928 "my_server": 'hg pull my_server'. To push to "local_path": 'hg push
1926 local_path'. You can check 'hg help urls' for details about valid URLs.
1929 local_path'. You can check 'hg help urls' for details about valid URLs.
1927
1930
1928 Options containing colons (":") denote sub-options that can influence
1931 Options containing colons (":") denote sub-options that can influence
1929 behavior for that specific path. Example:
1932 behavior for that specific path. Example:
1930
1933
1931 [paths]
1934 [paths]
1932 my_server = https://example.com/my_path
1935 my_server = https://example.com/my_path
1933 my_server:pushurl = ssh://example.com/my_path
1936 my_server:pushurl = ssh://example.com/my_path
1934
1937
1935 Paths using the 'path://otherpath' scheme will inherit the sub-options
1938 Paths using the 'path://otherpath' scheme will inherit the sub-options
1936 value from the path they point to.
1939 value from the path they point to.
1937
1940
1938 The following sub-options can be defined:
1941 The following sub-options can be defined:
1939
1942
1940 "multi-urls"
1943 "multi-urls"
1941 A boolean option. When enabled the value of the '[paths]' entry will be
1944 A boolean option. When enabled the value of the '[paths]' entry will be
1942 parsed as a list and the alias will resolve to multiple destination. If
1945 parsed as a list and the alias will resolve to multiple destination. If
1943 some of the list entry use the 'path://' syntax, the suboption will be
1946 some of the list entry use the 'path://' syntax, the suboption will be
1944 inherited individually.
1947 inherited individually.
1945
1948
1946 "pushurl"
1949 "pushurl"
1947 The URL to use for push operations. If not defined, the location
1950 The URL to use for push operations. If not defined, the location
1948 defined by the path's main entry is used.
1951 defined by the path's main entry is used.
1949
1952
1950 "pushrev"
1953 "pushrev"
1951 A revset defining which revisions to push by default.
1954 A revset defining which revisions to push by default.
1952
1955
1953 When 'hg push' is executed without a "-r" argument, the revset defined
1956 When 'hg push' is executed without a "-r" argument, the revset defined
1954 by this sub-option is evaluated to determine what to push.
1957 by this sub-option is evaluated to determine what to push.
1955
1958
1956 For example, a value of "." will push the working directory's revision
1959 For example, a value of "." will push the working directory's revision
1957 by default.
1960 by default.
1958
1961
1959 Revsets specifying bookmarks will not result in the bookmark being
1962 Revsets specifying bookmarks will not result in the bookmark being
1960 pushed.
1963 pushed.
1961
1964
1962 "bookmarks.mode"
1965 "bookmarks.mode"
1963 How bookmark will be dealt during the exchange. It support the following
1966 How bookmark will be dealt during the exchange. It support the following
1964 value
1967 value
1965
1968
1966 - "default": the default behavior, local and remote bookmarks are
1969 - "default": the default behavior, local and remote bookmarks are
1967 "merged" on push/pull.
1970 "merged" on push/pull.
1968 - "mirror": when pulling, replace local bookmarks by remote bookmarks.
1971 - "mirror": when pulling, replace local bookmarks by remote bookmarks.
1969 This is useful to replicate a repository, or as an optimization.
1972 This is useful to replicate a repository, or as an optimization.
1970 - "ignore": ignore bookmarks during exchange. (This currently only
1973 - "ignore": ignore bookmarks during exchange. (This currently only
1971 affect pulling)
1974 affect pulling)
1972
1975
1973 The following special named paths exist:
1976 The following special named paths exist:
1974
1977
1975 "default"
1978 "default"
1976 The URL or directory to use when no source or remote is specified.
1979 The URL or directory to use when no source or remote is specified.
1977
1980
1978 'hg clone' will automatically define this path to the location the
1981 'hg clone' will automatically define this path to the location the
1979 repository was cloned from.
1982 repository was cloned from.
1980
1983
1981 "default-push"
1984 "default-push"
1982 (deprecated) The URL or directory for the default 'hg push' location.
1985 (deprecated) The URL or directory for the default 'hg push' location.
1983 "default:pushurl" should be used instead.
1986 "default:pushurl" should be used instead.
1984
1987
1985 $ hg help glossary.mcguffin
1988 $ hg help glossary.mcguffin
1986 abort: help section not found: glossary.mcguffin
1989 abort: help section not found: glossary.mcguffin
1987 [10]
1990 [10]
1988
1991
1989 $ hg help glossary.mc.guffin
1992 $ hg help glossary.mc.guffin
1990 abort: help section not found: glossary.mc.guffin
1993 abort: help section not found: glossary.mc.guffin
1991 [10]
1994 [10]
1992
1995
1993 $ hg help template.files
1996 $ hg help template.files
1994 files List of strings. All files modified, added, or removed by
1997 files List of strings. All files modified, added, or removed by
1995 this changeset.
1998 this changeset.
1996 files(pattern)
1999 files(pattern)
1997 All files of the current changeset matching the pattern. See
2000 All files of the current changeset matching the pattern. See
1998 'hg help patterns'.
2001 'hg help patterns'.
1999
2002
2000 Test section lookup by translated message
2003 Test section lookup by translated message
2001
2004
2002 str.lower() instead of encoding.lower(str) on translated message might
2005 str.lower() instead of encoding.lower(str) on translated message might
2003 make message meaningless, because some encoding uses 0x41(A) - 0x5a(Z)
2006 make message meaningless, because some encoding uses 0x41(A) - 0x5a(Z)
2004 as the second or later byte of multi-byte character.
2007 as the second or later byte of multi-byte character.
2005
2008
2006 For example, "\x8bL\x98^" (translation of "record" in ja_JP.cp932)
2009 For example, "\x8bL\x98^" (translation of "record" in ja_JP.cp932)
2007 contains 0x4c (L). str.lower() replaces 0x4c(L) by 0x6c(l) and this
2010 contains 0x4c (L). str.lower() replaces 0x4c(L) by 0x6c(l) and this
2008 replacement makes message meaningless.
2011 replacement makes message meaningless.
2009
2012
2010 This tests that section lookup by translated string isn't broken by
2013 This tests that section lookup by translated string isn't broken by
2011 such str.lower().
2014 such str.lower().
2012
2015
2013 $ "$PYTHON" <<EOF
2016 $ "$PYTHON" <<EOF
2014 > def escape(s):
2017 > def escape(s):
2015 > return b''.join(br'\\u%x' % ord(uc) for uc in s.decode('cp932'))
2018 > return b''.join(br'\\u%x' % ord(uc) for uc in s.decode('cp932'))
2016 > # translation of "record" in ja_JP.cp932
2019 > # translation of "record" in ja_JP.cp932
2017 > upper = b"\x8bL\x98^"
2020 > upper = b"\x8bL\x98^"
2018 > # str.lower()-ed section name should be treated as different one
2021 > # str.lower()-ed section name should be treated as different one
2019 > lower = b"\x8bl\x98^"
2022 > lower = b"\x8bl\x98^"
2020 > with open('ambiguous.py', 'wb') as fp:
2023 > with open('ambiguous.py', 'wb') as fp:
2021 > fp.write(b"""# ambiguous section names in ja_JP.cp932
2024 > fp.write(b"""# ambiguous section names in ja_JP.cp932
2022 > u'''summary of extension
2025 > u'''summary of extension
2023 >
2026 >
2024 > %s
2027 > %s
2025 > ----
2028 > ----
2026 >
2029 >
2027 > Upper name should show only this message
2030 > Upper name should show only this message
2028 >
2031 >
2029 > %s
2032 > %s
2030 > ----
2033 > ----
2031 >
2034 >
2032 > Lower name should show only this message
2035 > Lower name should show only this message
2033 >
2036 >
2034 > subsequent section
2037 > subsequent section
2035 > ------------------
2038 > ------------------
2036 >
2039 >
2037 > This should be hidden at 'hg help ambiguous' with section name.
2040 > This should be hidden at 'hg help ambiguous' with section name.
2038 > '''
2041 > '''
2039 > """ % (escape(upper), escape(lower)))
2042 > """ % (escape(upper), escape(lower)))
2040 > EOF
2043 > EOF
2041
2044
2042 $ cat >> $HGRCPATH <<EOF
2045 $ cat >> $HGRCPATH <<EOF
2043 > [extensions]
2046 > [extensions]
2044 > ambiguous = ./ambiguous.py
2047 > ambiguous = ./ambiguous.py
2045 > EOF
2048 > EOF
2046
2049
2047 $ "$PYTHON" <<EOF | sh
2050 $ "$PYTHON" <<EOF | sh
2048 > from mercurial.utils import procutil
2051 > from mercurial.utils import procutil
2049 > upper = b"\x8bL\x98^"
2052 > upper = b"\x8bL\x98^"
2050 > procutil.stdout.write(b"hg --encoding cp932 help -e ambiguous.%s\n" % upper)
2053 > procutil.stdout.write(b"hg --encoding cp932 help -e ambiguous.%s\n" % upper)
2051 > EOF
2054 > EOF
2052 \x8bL\x98^ (esc)
2055 \x8bL\x98^ (esc)
2053 ----
2056 ----
2054
2057
2055 Upper name should show only this message
2058 Upper name should show only this message
2056
2059
2057
2060
2058 $ "$PYTHON" <<EOF | sh
2061 $ "$PYTHON" <<EOF | sh
2059 > from mercurial.utils import procutil
2062 > from mercurial.utils import procutil
2060 > lower = b"\x8bl\x98^"
2063 > lower = b"\x8bl\x98^"
2061 > procutil.stdout.write(b"hg --encoding cp932 help -e ambiguous.%s\n" % lower)
2064 > procutil.stdout.write(b"hg --encoding cp932 help -e ambiguous.%s\n" % lower)
2062 > EOF
2065 > EOF
2063 \x8bl\x98^ (esc)
2066 \x8bl\x98^ (esc)
2064 ----
2067 ----
2065
2068
2066 Lower name should show only this message
2069 Lower name should show only this message
2067
2070
2068
2071
2069 $ cat >> $HGRCPATH <<EOF
2072 $ cat >> $HGRCPATH <<EOF
2070 > [extensions]
2073 > [extensions]
2071 > ambiguous = !
2074 > ambiguous = !
2072 > EOF
2075 > EOF
2073
2076
2074 Show help content of disabled extensions
2077 Show help content of disabled extensions
2075
2078
2076 $ cat >> $HGRCPATH <<EOF
2079 $ cat >> $HGRCPATH <<EOF
2077 > [extensions]
2080 > [extensions]
2078 > ambiguous = !./ambiguous.py
2081 > ambiguous = !./ambiguous.py
2079 > EOF
2082 > EOF
2080 $ hg help -e ambiguous
2083 $ hg help -e ambiguous
2081 ambiguous extension - (no help text available)
2084 ambiguous extension - (no help text available)
2082
2085
2083 (use 'hg help extensions' for information on enabling extensions)
2086 (use 'hg help extensions' for information on enabling extensions)
2084
2087
2085 Test dynamic list of merge tools only shows up once
2088 Test dynamic list of merge tools only shows up once
2086 $ hg help merge-tools
2089 $ hg help merge-tools
2087 Merge Tools
2090 Merge Tools
2088 """""""""""
2091 """""""""""
2089
2092
2090 To merge files Mercurial uses merge tools.
2093 To merge files Mercurial uses merge tools.
2091
2094
2092 A merge tool combines two different versions of a file into a merged file.
2095 A merge tool combines two different versions of a file into a merged file.
2093 Merge tools are given the two files and the greatest common ancestor of
2096 Merge tools are given the two files and the greatest common ancestor of
2094 the two file versions, so they can determine the changes made on both
2097 the two file versions, so they can determine the changes made on both
2095 branches.
2098 branches.
2096
2099
2097 Merge tools are used both for 'hg resolve', 'hg merge', 'hg update', 'hg
2100 Merge tools are used both for 'hg resolve', 'hg merge', 'hg update', 'hg
2098 backout' and in several extensions.
2101 backout' and in several extensions.
2099
2102
2100 Usually, the merge tool tries to automatically reconcile the files by
2103 Usually, the merge tool tries to automatically reconcile the files by
2101 combining all non-overlapping changes that occurred separately in the two
2104 combining all non-overlapping changes that occurred separately in the two
2102 different evolutions of the same initial base file. Furthermore, some
2105 different evolutions of the same initial base file. Furthermore, some
2103 interactive merge programs make it easier to manually resolve conflicting
2106 interactive merge programs make it easier to manually resolve conflicting
2104 merges, either in a graphical way, or by inserting some conflict markers.
2107 merges, either in a graphical way, or by inserting some conflict markers.
2105 Mercurial does not include any interactive merge programs but relies on
2108 Mercurial does not include any interactive merge programs but relies on
2106 external tools for that.
2109 external tools for that.
2107
2110
2108 Available merge tools
2111 Available merge tools
2109 =====================
2112 =====================
2110
2113
2111 External merge tools and their properties are configured in the merge-
2114 External merge tools and their properties are configured in the merge-
2112 tools configuration section - see hgrc(5) - but they can often just be
2115 tools configuration section - see hgrc(5) - but they can often just be
2113 named by their executable.
2116 named by their executable.
2114
2117
2115 A merge tool is generally usable if its executable can be found on the
2118 A merge tool is generally usable if its executable can be found on the
2116 system and if it can handle the merge. The executable is found if it is an
2119 system and if it can handle the merge. The executable is found if it is an
2117 absolute or relative executable path or the name of an application in the
2120 absolute or relative executable path or the name of an application in the
2118 executable search path. The tool is assumed to be able to handle the merge
2121 executable search path. The tool is assumed to be able to handle the merge
2119 if it can handle symlinks if the file is a symlink, if it can handle
2122 if it can handle symlinks if the file is a symlink, if it can handle
2120 binary files if the file is binary, and if a GUI is available if the tool
2123 binary files if the file is binary, and if a GUI is available if the tool
2121 requires a GUI.
2124 requires a GUI.
2122
2125
2123 There are some internal merge tools which can be used. The internal merge
2126 There are some internal merge tools which can be used. The internal merge
2124 tools are:
2127 tools are:
2125
2128
2126 ":dump"
2129 ":dump"
2127 Creates three versions of the files to merge, containing the contents of
2130 Creates three versions of the files to merge, containing the contents of
2128 local, other and base. These files can then be used to perform a merge
2131 local, other and base. These files can then be used to perform a merge
2129 manually. If the file to be merged is named "a.txt", these files will
2132 manually. If the file to be merged is named "a.txt", these files will
2130 accordingly be named "a.txt.local", "a.txt.other" and "a.txt.base" and
2133 accordingly be named "a.txt.local", "a.txt.other" and "a.txt.base" and
2131 they will be placed in the same directory as "a.txt".
2134 they will be placed in the same directory as "a.txt".
2132
2135
2133 This implies premerge. Therefore, files aren't dumped, if premerge runs
2136 This implies premerge. Therefore, files aren't dumped, if premerge runs
2134 successfully. Use :forcedump to forcibly write files out.
2137 successfully. Use :forcedump to forcibly write files out.
2135
2138
2136 (actual capabilities: binary, symlink)
2139 (actual capabilities: binary, symlink)
2137
2140
2138 ":fail"
2141 ":fail"
2139 Rather than attempting to merge files that were modified on both
2142 Rather than attempting to merge files that were modified on both
2140 branches, it marks them as unresolved. The resolve command must be used
2143 branches, it marks them as unresolved. The resolve command must be used
2141 to resolve these conflicts.
2144 to resolve these conflicts.
2142
2145
2143 (actual capabilities: binary, symlink)
2146 (actual capabilities: binary, symlink)
2144
2147
2145 ":forcedump"
2148 ":forcedump"
2146 Creates three versions of the files as same as :dump, but omits
2149 Creates three versions of the files as same as :dump, but omits
2147 premerge.
2150 premerge.
2148
2151
2149 (actual capabilities: binary, symlink)
2152 (actual capabilities: binary, symlink)
2150
2153
2151 ":local"
2154 ":local"
2152 Uses the local 'p1()' version of files as the merged version.
2155 Uses the local 'p1()' version of files as the merged version.
2153
2156
2154 (actual capabilities: binary, symlink)
2157 (actual capabilities: binary, symlink)
2155
2158
2156 ":merge"
2159 ":merge"
2157 Uses the internal non-interactive simple merge algorithm for merging
2160 Uses the internal non-interactive simple merge algorithm for merging
2158 files. It will fail if there are any conflicts and leave markers in the
2161 files. It will fail if there are any conflicts and leave markers in the
2159 partially merged file. Markers will have two sections, one for each side
2162 partially merged file. Markers will have two sections, one for each side
2160 of merge.
2163 of merge.
2161
2164
2162 ":merge-local"
2165 ":merge-local"
2163 Like :merge, but resolve all conflicts non-interactively in favor of the
2166 Like :merge, but resolve all conflicts non-interactively in favor of the
2164 local 'p1()' changes.
2167 local 'p1()' changes.
2165
2168
2166 ":merge-other"
2169 ":merge-other"
2167 Like :merge, but resolve all conflicts non-interactively in favor of the
2170 Like :merge, but resolve all conflicts non-interactively in favor of the
2168 other 'p2()' changes.
2171 other 'p2()' changes.
2169
2172
2170 ":merge3"
2173 ":merge3"
2171 Uses the internal non-interactive simple merge algorithm for merging
2174 Uses the internal non-interactive simple merge algorithm for merging
2172 files. It will fail if there are any conflicts and leave markers in the
2175 files. It will fail if there are any conflicts and leave markers in the
2173 partially merged file. Marker will have three sections, one from each
2176 partially merged file. Marker will have three sections, one from each
2174 side of the merge and one for the base content.
2177 side of the merge and one for the base content.
2175
2178
2176 ":mergediff"
2179 ":mergediff"
2177 Uses the internal non-interactive simple merge algorithm for merging
2180 Uses the internal non-interactive simple merge algorithm for merging
2178 files. It will fail if there are any conflicts and leave markers in the
2181 files. It will fail if there are any conflicts and leave markers in the
2179 partially merged file. The marker will have two sections, one with the
2182 partially merged file. The marker will have two sections, one with the
2180 content from one side of the merge, and one with a diff from the base
2183 content from one side of the merge, and one with a diff from the base
2181 content to the content on the other side. (experimental)
2184 content to the content on the other side. (experimental)
2182
2185
2183 ":other"
2186 ":other"
2184 Uses the other 'p2()' version of files as the merged version.
2187 Uses the other 'p2()' version of files as the merged version.
2185
2188
2186 (actual capabilities: binary, symlink)
2189 (actual capabilities: binary, symlink)
2187
2190
2188 ":prompt"
2191 ":prompt"
2189 Asks the user which of the local 'p1()' or the other 'p2()' version to
2192 Asks the user which of the local 'p1()' or the other 'p2()' version to
2190 keep as the merged version.
2193 keep as the merged version.
2191
2194
2192 (actual capabilities: binary, symlink)
2195 (actual capabilities: binary, symlink)
2193
2196
2194 ":tagmerge"
2197 ":tagmerge"
2195 Uses the internal tag merge algorithm (experimental).
2198 Uses the internal tag merge algorithm (experimental).
2196
2199
2197 ":union"
2200 ":union"
2198 Uses the internal non-interactive simple merge algorithm for merging
2201 Uses the internal non-interactive simple merge algorithm for merging
2199 files. It will use both local and other sides for conflict regions by
2202 files. It will use both local and other sides for conflict regions by
2200 adding local on top of other. No markers are inserted.
2203 adding local on top of other. No markers are inserted.
2201
2204
2202 ":union-other-first"
2205 ":union-other-first"
2203 Like :union, but add other on top of local.
2206 Like :union, but add other on top of local.
2204
2207
2205 Internal tools are always available and do not require a GUI but will by
2208 Internal tools are always available and do not require a GUI but will by
2206 default not handle symlinks or binary files. See next section for detail
2209 default not handle symlinks or binary files. See next section for detail
2207 about "actual capabilities" described above.
2210 about "actual capabilities" described above.
2208
2211
2209 Choosing a merge tool
2212 Choosing a merge tool
2210 =====================
2213 =====================
2211
2214
2212 Mercurial uses these rules when deciding which merge tool to use:
2215 Mercurial uses these rules when deciding which merge tool to use:
2213
2216
2214 1. If a tool has been specified with the --tool option to merge or
2217 1. If a tool has been specified with the --tool option to merge or
2215 resolve, it is used. If it is the name of a tool in the merge-tools
2218 resolve, it is used. If it is the name of a tool in the merge-tools
2216 configuration, its configuration is used. Otherwise the specified tool
2219 configuration, its configuration is used. Otherwise the specified tool
2217 must be executable by the shell.
2220 must be executable by the shell.
2218 2. If the "HGMERGE" environment variable is present, its value is used and
2221 2. If the "HGMERGE" environment variable is present, its value is used and
2219 must be executable by the shell.
2222 must be executable by the shell.
2220 3. If the filename of the file to be merged matches any of the patterns in
2223 3. If the filename of the file to be merged matches any of the patterns in
2221 the merge-patterns configuration section, the first usable merge tool
2224 the merge-patterns configuration section, the first usable merge tool
2222 corresponding to a matching pattern is used.
2225 corresponding to a matching pattern is used.
2223 4. If ui.merge is set it will be considered next. If the value is not the
2226 4. If ui.merge is set it will be considered next. If the value is not the
2224 name of a configured tool, the specified value is used and must be
2227 name of a configured tool, the specified value is used and must be
2225 executable by the shell. Otherwise the named tool is used if it is
2228 executable by the shell. Otherwise the named tool is used if it is
2226 usable.
2229 usable.
2227 5. If any usable merge tools are present in the merge-tools configuration
2230 5. If any usable merge tools are present in the merge-tools configuration
2228 section, the one with the highest priority is used.
2231 section, the one with the highest priority is used.
2229 6. If a program named "hgmerge" can be found on the system, it is used -
2232 6. If a program named "hgmerge" can be found on the system, it is used -
2230 but it will by default not be used for symlinks and binary files.
2233 but it will by default not be used for symlinks and binary files.
2231 7. If the file to be merged is not binary and is not a symlink, then
2234 7. If the file to be merged is not binary and is not a symlink, then
2232 internal ":merge" is used.
2235 internal ":merge" is used.
2233 8. Otherwise, ":prompt" is used.
2236 8. Otherwise, ":prompt" is used.
2234
2237
2235 For historical reason, Mercurial treats merge tools as below while
2238 For historical reason, Mercurial treats merge tools as below while
2236 examining rules above.
2239 examining rules above.
2237
2240
2238 step specified via binary symlink
2241 step specified via binary symlink
2239 ----------------------------------
2242 ----------------------------------
2240 1. --tool o/o o/o
2243 1. --tool o/o o/o
2241 2. HGMERGE o/o o/o
2244 2. HGMERGE o/o o/o
2242 3. merge-patterns o/o(*) x/?(*)
2245 3. merge-patterns o/o(*) x/?(*)
2243 4. ui.merge x/?(*) x/?(*)
2246 4. ui.merge x/?(*) x/?(*)
2244
2247
2245 Each capability column indicates Mercurial behavior for internal/external
2248 Each capability column indicates Mercurial behavior for internal/external
2246 merge tools at examining each rule.
2249 merge tools at examining each rule.
2247
2250
2248 - "o": "assume that a tool has capability"
2251 - "o": "assume that a tool has capability"
2249 - "x": "assume that a tool does not have capability"
2252 - "x": "assume that a tool does not have capability"
2250 - "?": "check actual capability of a tool"
2253 - "?": "check actual capability of a tool"
2251
2254
2252 If "merge.strict-capability-check" configuration is true, Mercurial checks
2255 If "merge.strict-capability-check" configuration is true, Mercurial checks
2253 capabilities of merge tools strictly in (*) cases above (= each capability
2256 capabilities of merge tools strictly in (*) cases above (= each capability
2254 column becomes "?/?"). It is false by default for backward compatibility.
2257 column becomes "?/?"). It is false by default for backward compatibility.
2255
2258
2256 Note:
2259 Note:
2257 After selecting a merge program, Mercurial will by default attempt to
2260 After selecting a merge program, Mercurial will by default attempt to
2258 merge the files using a simple merge algorithm first. Only if it
2261 merge the files using a simple merge algorithm first. Only if it
2259 doesn't succeed because of conflicting changes will Mercurial actually
2262 doesn't succeed because of conflicting changes will Mercurial actually
2260 execute the merge program. Whether to use the simple merge algorithm
2263 execute the merge program. Whether to use the simple merge algorithm
2261 first can be controlled by the premerge setting of the merge tool.
2264 first can be controlled by the premerge setting of the merge tool.
2262 Premerge is enabled by default unless the file is binary or a symlink.
2265 Premerge is enabled by default unless the file is binary or a symlink.
2263
2266
2264 See the merge-tools and ui sections of hgrc(5) for details on the
2267 See the merge-tools and ui sections of hgrc(5) for details on the
2265 configuration of merge tools.
2268 configuration of merge tools.
2266
2269
2267 Compression engines listed in `hg help bundlespec`
2270 Compression engines listed in `hg help bundlespec`
2268
2271
2269 $ hg help bundlespec | grep gzip
2272 $ hg help bundlespec | grep gzip
2270 "v1" bundles can only use the "gzip", "bzip2", and "none" compression
2273 "v1" bundles can only use the "gzip", "bzip2", and "none" compression
2271 An algorithm that produces smaller bundles than "gzip".
2274 An algorithm that produces smaller bundles than "gzip".
2272 This engine will likely produce smaller bundles than "gzip" but will be
2275 This engine will likely produce smaller bundles than "gzip" but will be
2273 "gzip"
2276 "gzip"
2274 better compression than "gzip". It also frequently yields better (?)
2277 better compression than "gzip". It also frequently yields better (?)
2275
2278
2276 Test usage of section marks in help documents
2279 Test usage of section marks in help documents
2277
2280
2278 $ cd "$TESTDIR"/../doc
2281 $ cd "$TESTDIR"/../doc
2279 $ "$PYTHON" check-seclevel.py
2282 $ "$PYTHON" check-seclevel.py
2280 $ cd $TESTTMP
2283 $ cd $TESTTMP
2281
2284
2282 #if serve
2285 #if serve
2283
2286
2284 Test the help pages in hgweb.
2287 Test the help pages in hgweb.
2285
2288
2286 Dish up an empty repo; serve it cold.
2289 Dish up an empty repo; serve it cold.
2287
2290
2288 $ hg init "$TESTTMP/test"
2291 $ hg init "$TESTTMP/test"
2289 $ hg serve -R "$TESTTMP/test" -n test -p $HGPORT -d --pid-file=hg.pid
2292 $ hg serve -R "$TESTTMP/test" -n test -p $HGPORT -d --pid-file=hg.pid
2290 $ cat hg.pid >> $DAEMON_PIDS
2293 $ cat hg.pid >> $DAEMON_PIDS
2291
2294
2292 $ get-with-headers.py $LOCALIP:$HGPORT "help"
2295 $ get-with-headers.py $LOCALIP:$HGPORT "help"
2293 200 Script output follows
2296 200 Script output follows
2294
2297
2295 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2298 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2296 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2299 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2297 <head>
2300 <head>
2298 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2301 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2299 <meta name="robots" content="index, nofollow" />
2302 <meta name="robots" content="index, nofollow" />
2300 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2303 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2301 <script type="text/javascript" src="/static/mercurial.js"></script>
2304 <script type="text/javascript" src="/static/mercurial.js"></script>
2302
2305
2303 <title>Help: Index</title>
2306 <title>Help: Index</title>
2304 </head>
2307 </head>
2305 <body>
2308 <body>
2306
2309
2307 <div class="container">
2310 <div class="container">
2308 <div class="menu">
2311 <div class="menu">
2309 <div class="logo">
2312 <div class="logo">
2310 <a href="https://mercurial-scm.org/">
2313 <a href="https://mercurial-scm.org/">
2311 <img src="/static/hglogo.png" alt="mercurial" /></a>
2314 <img src="/static/hglogo.png" alt="mercurial" /></a>
2312 </div>
2315 </div>
2313 <ul>
2316 <ul>
2314 <li><a href="/shortlog">log</a></li>
2317 <li><a href="/shortlog">log</a></li>
2315 <li><a href="/graph">graph</a></li>
2318 <li><a href="/graph">graph</a></li>
2316 <li><a href="/tags">tags</a></li>
2319 <li><a href="/tags">tags</a></li>
2317 <li><a href="/bookmarks">bookmarks</a></li>
2320 <li><a href="/bookmarks">bookmarks</a></li>
2318 <li><a href="/branches">branches</a></li>
2321 <li><a href="/branches">branches</a></li>
2319 </ul>
2322 </ul>
2320 <ul>
2323 <ul>
2321 <li class="active">help</li>
2324 <li class="active">help</li>
2322 </ul>
2325 </ul>
2323 </div>
2326 </div>
2324
2327
2325 <div class="main">
2328 <div class="main">
2326 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
2329 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
2327
2330
2328 <form class="search" action="/log">
2331 <form class="search" action="/log">
2329
2332
2330 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
2333 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
2331 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
2334 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
2332 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
2335 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
2333 </form>
2336 </form>
2334 <table class="bigtable">
2337 <table class="bigtable">
2335 <tr><td colspan="2"><h2><a name="topics" href="#topics">Topics</a></h2></td></tr>
2338 <tr><td colspan="2"><h2><a name="topics" href="#topics">Topics</a></h2></td></tr>
2336
2339
2337 <tr><td>
2340 <tr><td>
2338 <a href="/help/bundlespec">
2341 <a href="/help/bundlespec">
2339 bundlespec
2342 bundlespec
2340 </a>
2343 </a>
2341 </td><td>
2344 </td><td>
2342 Bundle File Formats
2345 Bundle File Formats
2343 </td></tr>
2346 </td></tr>
2344 <tr><td>
2347 <tr><td>
2345 <a href="/help/color">
2348 <a href="/help/color">
2346 color
2349 color
2347 </a>
2350 </a>
2348 </td><td>
2351 </td><td>
2349 Colorizing Outputs
2352 Colorizing Outputs
2350 </td></tr>
2353 </td></tr>
2351 <tr><td>
2354 <tr><td>
2352 <a href="/help/config">
2355 <a href="/help/config">
2353 config
2356 config
2354 </a>
2357 </a>
2355 </td><td>
2358 </td><td>
2356 Configuration Files
2359 Configuration Files
2357 </td></tr>
2360 </td></tr>
2358 <tr><td>
2361 <tr><td>
2359 <a href="/help/dates">
2362 <a href="/help/dates">
2360 dates
2363 dates
2361 </a>
2364 </a>
2362 </td><td>
2365 </td><td>
2363 Date Formats
2366 Date Formats
2364 </td></tr>
2367 </td></tr>
2365 <tr><td>
2368 <tr><td>
2366 <a href="/help/deprecated">
2369 <a href="/help/deprecated">
2367 deprecated
2370 deprecated
2368 </a>
2371 </a>
2369 </td><td>
2372 </td><td>
2370 Deprecated Features
2373 Deprecated Features
2371 </td></tr>
2374 </td></tr>
2372 <tr><td>
2375 <tr><td>
2373 <a href="/help/diffs">
2376 <a href="/help/diffs">
2374 diffs
2377 diffs
2375 </a>
2378 </a>
2376 </td><td>
2379 </td><td>
2377 Diff Formats
2380 Diff Formats
2378 </td></tr>
2381 </td></tr>
2379 <tr><td>
2382 <tr><td>
2380 <a href="/help/environment">
2383 <a href="/help/environment">
2381 environment
2384 environment
2382 </a>
2385 </a>
2383 </td><td>
2386 </td><td>
2384 Environment Variables
2387 Environment Variables
2385 </td></tr>
2388 </td></tr>
2386 <tr><td>
2389 <tr><td>
2387 <a href="/help/evolution">
2390 <a href="/help/evolution">
2388 evolution
2391 evolution
2389 </a>
2392 </a>
2390 </td><td>
2393 </td><td>
2391 Safely rewriting history (EXPERIMENTAL)
2394 Safely rewriting history (EXPERIMENTAL)
2392 </td></tr>
2395 </td></tr>
2393 <tr><td>
2396 <tr><td>
2394 <a href="/help/extensions">
2397 <a href="/help/extensions">
2395 extensions
2398 extensions
2396 </a>
2399 </a>
2397 </td><td>
2400 </td><td>
2398 Using Additional Features
2401 Using Additional Features
2399 </td></tr>
2402 </td></tr>
2400 <tr><td>
2403 <tr><td>
2401 <a href="/help/filesets">
2404 <a href="/help/filesets">
2402 filesets
2405 filesets
2403 </a>
2406 </a>
2404 </td><td>
2407 </td><td>
2405 Specifying File Sets
2408 Specifying File Sets
2406 </td></tr>
2409 </td></tr>
2407 <tr><td>
2410 <tr><td>
2408 <a href="/help/flags">
2411 <a href="/help/flags">
2409 flags
2412 flags
2410 </a>
2413 </a>
2411 </td><td>
2414 </td><td>
2412 Command-line flags
2415 Command-line flags
2413 </td></tr>
2416 </td></tr>
2414 <tr><td>
2417 <tr><td>
2415 <a href="/help/glossary">
2418 <a href="/help/glossary">
2416 glossary
2419 glossary
2417 </a>
2420 </a>
2418 </td><td>
2421 </td><td>
2419 Glossary
2422 Glossary
2420 </td></tr>
2423 </td></tr>
2421 <tr><td>
2424 <tr><td>
2422 <a href="/help/hgignore">
2425 <a href="/help/hgignore">
2423 hgignore
2426 hgignore
2424 </a>
2427 </a>
2425 </td><td>
2428 </td><td>
2426 Syntax for Mercurial Ignore Files
2429 Syntax for Mercurial Ignore Files
2427 </td></tr>
2430 </td></tr>
2428 <tr><td>
2431 <tr><td>
2429 <a href="/help/hgweb">
2432 <a href="/help/hgweb">
2430 hgweb
2433 hgweb
2431 </a>
2434 </a>
2432 </td><td>
2435 </td><td>
2433 Configuring hgweb
2436 Configuring hgweb
2434 </td></tr>
2437 </td></tr>
2435 <tr><td>
2438 <tr><td>
2436 <a href="/help/internals">
2439 <a href="/help/internals">
2437 internals
2440 internals
2438 </a>
2441 </a>
2439 </td><td>
2442 </td><td>
2440 Technical implementation topics
2443 Technical implementation topics
2441 </td></tr>
2444 </td></tr>
2442 <tr><td>
2445 <tr><td>
2443 <a href="/help/merge-tools">
2446 <a href="/help/merge-tools">
2444 merge-tools
2447 merge-tools
2445 </a>
2448 </a>
2446 </td><td>
2449 </td><td>
2447 Merge Tools
2450 Merge Tools
2448 </td></tr>
2451 </td></tr>
2449 <tr><td>
2452 <tr><td>
2450 <a href="/help/pager">
2453 <a href="/help/pager">
2451 pager
2454 pager
2452 </a>
2455 </a>
2453 </td><td>
2456 </td><td>
2454 Pager Support
2457 Pager Support
2455 </td></tr>
2458 </td></tr>
2456 <tr><td>
2459 <tr><td>
2457 <a href="/help/patterns">
2460 <a href="/help/patterns">
2458 patterns
2461 patterns
2459 </a>
2462 </a>
2460 </td><td>
2463 </td><td>
2461 File Name Patterns
2464 File Name Patterns
2462 </td></tr>
2465 </td></tr>
2463 <tr><td>
2466 <tr><td>
2464 <a href="/help/phases">
2467 <a href="/help/phases">
2465 phases
2468 phases
2466 </a>
2469 </a>
2467 </td><td>
2470 </td><td>
2468 Working with Phases
2471 Working with Phases
2469 </td></tr>
2472 </td></tr>
2470 <tr><td>
2473 <tr><td>
2471 <a href="/help/revisions">
2474 <a href="/help/revisions">
2472 revisions
2475 revisions
2473 </a>
2476 </a>
2474 </td><td>
2477 </td><td>
2475 Specifying Revisions
2478 Specifying Revisions
2476 </td></tr>
2479 </td></tr>
2477 <tr><td>
2480 <tr><td>
2478 <a href="/help/rust">
2481 <a href="/help/rust">
2479 rust
2482 rust
2480 </a>
2483 </a>
2481 </td><td>
2484 </td><td>
2482 Rust in Mercurial
2485 Rust in Mercurial
2483 </td></tr>
2486 </td></tr>
2484 <tr><td>
2487 <tr><td>
2485 <a href="/help/scripting">
2488 <a href="/help/scripting">
2486 scripting
2489 scripting
2487 </a>
2490 </a>
2488 </td><td>
2491 </td><td>
2489 Using Mercurial from scripts and automation
2492 Using Mercurial from scripts and automation
2490 </td></tr>
2493 </td></tr>
2491 <tr><td>
2494 <tr><td>
2492 <a href="/help/subrepos">
2495 <a href="/help/subrepos">
2493 subrepos
2496 subrepos
2494 </a>
2497 </a>
2495 </td><td>
2498 </td><td>
2496 Subrepositories
2499 Subrepositories
2497 </td></tr>
2500 </td></tr>
2498 <tr><td>
2501 <tr><td>
2499 <a href="/help/templating">
2502 <a href="/help/templating">
2500 templating
2503 templating
2501 </a>
2504 </a>
2502 </td><td>
2505 </td><td>
2503 Template Usage
2506 Template Usage
2504 </td></tr>
2507 </td></tr>
2505 <tr><td>
2508 <tr><td>
2506 <a href="/help/urls">
2509 <a href="/help/urls">
2507 urls
2510 urls
2508 </a>
2511 </a>
2509 </td><td>
2512 </td><td>
2510 URL Paths
2513 URL Paths
2511 </td></tr>
2514 </td></tr>
2512 <tr><td>
2515 <tr><td>
2513 <a href="/help/topic-containing-verbose">
2516 <a href="/help/topic-containing-verbose">
2514 topic-containing-verbose
2517 topic-containing-verbose
2515 </a>
2518 </a>
2516 </td><td>
2519 </td><td>
2517 This is the topic to test omit indicating.
2520 This is the topic to test omit indicating.
2518 </td></tr>
2521 </td></tr>
2519
2522
2520
2523
2521 <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
2524 <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
2522
2525
2523 <tr><td>
2526 <tr><td>
2524 <a href="/help/abort">
2527 <a href="/help/abort">
2525 abort
2528 abort
2526 </a>
2529 </a>
2527 </td><td>
2530 </td><td>
2528 abort an unfinished operation (EXPERIMENTAL)
2531 abort an unfinished operation (EXPERIMENTAL)
2529 </td></tr>
2532 </td></tr>
2530 <tr><td>
2533 <tr><td>
2531 <a href="/help/add">
2534 <a href="/help/add">
2532 add
2535 add
2533 </a>
2536 </a>
2534 </td><td>
2537 </td><td>
2535 add the specified files on the next commit
2538 add the specified files on the next commit
2536 </td></tr>
2539 </td></tr>
2537 <tr><td>
2540 <tr><td>
2541 <a href="/help/admin::chainsaw-update">
2542 admin::chainsaw-update
2543 </a>
2544 </td><td>
2545 pull and update to a given revision, no matter what, (EXPERIMENTAL)
2546 </td></tr>
2547 <tr><td>
2538 <a href="/help/annotate">
2548 <a href="/help/annotate">
2539 annotate
2549 annotate
2540 </a>
2550 </a>
2541 </td><td>
2551 </td><td>
2542 show changeset information by line for each file
2552 show changeset information by line for each file
2543 </td></tr>
2553 </td></tr>
2544 <tr><td>
2554 <tr><td>
2545 <a href="/help/clone">
2555 <a href="/help/clone">
2546 clone
2556 clone
2547 </a>
2557 </a>
2548 </td><td>
2558 </td><td>
2549 make a copy of an existing repository
2559 make a copy of an existing repository
2550 </td></tr>
2560 </td></tr>
2551 <tr><td>
2561 <tr><td>
2552 <a href="/help/commit">
2562 <a href="/help/commit">
2553 commit
2563 commit
2554 </a>
2564 </a>
2555 </td><td>
2565 </td><td>
2556 commit the specified files or all outstanding changes
2566 commit the specified files or all outstanding changes
2557 </td></tr>
2567 </td></tr>
2558 <tr><td>
2568 <tr><td>
2559 <a href="/help/continue">
2569 <a href="/help/continue">
2560 continue
2570 continue
2561 </a>
2571 </a>
2562 </td><td>
2572 </td><td>
2563 resumes an interrupted operation (EXPERIMENTAL)
2573 resumes an interrupted operation (EXPERIMENTAL)
2564 </td></tr>
2574 </td></tr>
2565 <tr><td>
2575 <tr><td>
2566 <a href="/help/diff">
2576 <a href="/help/diff">
2567 diff
2577 diff
2568 </a>
2578 </a>
2569 </td><td>
2579 </td><td>
2570 diff repository (or selected files)
2580 diff repository (or selected files)
2571 </td></tr>
2581 </td></tr>
2572 <tr><td>
2582 <tr><td>
2573 <a href="/help/export">
2583 <a href="/help/export">
2574 export
2584 export
2575 </a>
2585 </a>
2576 </td><td>
2586 </td><td>
2577 dump the header and diffs for one or more changesets
2587 dump the header and diffs for one or more changesets
2578 </td></tr>
2588 </td></tr>
2579 <tr><td>
2589 <tr><td>
2580 <a href="/help/forget">
2590 <a href="/help/forget">
2581 forget
2591 forget
2582 </a>
2592 </a>
2583 </td><td>
2593 </td><td>
2584 forget the specified files on the next commit
2594 forget the specified files on the next commit
2585 </td></tr>
2595 </td></tr>
2586 <tr><td>
2596 <tr><td>
2587 <a href="/help/init">
2597 <a href="/help/init">
2588 init
2598 init
2589 </a>
2599 </a>
2590 </td><td>
2600 </td><td>
2591 create a new repository in the given directory
2601 create a new repository in the given directory
2592 </td></tr>
2602 </td></tr>
2593 <tr><td>
2603 <tr><td>
2594 <a href="/help/log">
2604 <a href="/help/log">
2595 log
2605 log
2596 </a>
2606 </a>
2597 </td><td>
2607 </td><td>
2598 show revision history of entire repository or files
2608 show revision history of entire repository or files
2599 </td></tr>
2609 </td></tr>
2600 <tr><td>
2610 <tr><td>
2601 <a href="/help/merge">
2611 <a href="/help/merge">
2602 merge
2612 merge
2603 </a>
2613 </a>
2604 </td><td>
2614 </td><td>
2605 merge another revision into working directory
2615 merge another revision into working directory
2606 </td></tr>
2616 </td></tr>
2607 <tr><td>
2617 <tr><td>
2608 <a href="/help/pull">
2618 <a href="/help/pull">
2609 pull
2619 pull
2610 </a>
2620 </a>
2611 </td><td>
2621 </td><td>
2612 pull changes from the specified source
2622 pull changes from the specified source
2613 </td></tr>
2623 </td></tr>
2614 <tr><td>
2624 <tr><td>
2615 <a href="/help/push">
2625 <a href="/help/push">
2616 push
2626 push
2617 </a>
2627 </a>
2618 </td><td>
2628 </td><td>
2619 push changes to the specified destination
2629 push changes to the specified destination
2620 </td></tr>
2630 </td></tr>
2621 <tr><td>
2631 <tr><td>
2622 <a href="/help/remove">
2632 <a href="/help/remove">
2623 remove
2633 remove
2624 </a>
2634 </a>
2625 </td><td>
2635 </td><td>
2626 remove the specified files on the next commit
2636 remove the specified files on the next commit
2627 </td></tr>
2637 </td></tr>
2628 <tr><td>
2638 <tr><td>
2629 <a href="/help/serve">
2639 <a href="/help/serve">
2630 serve
2640 serve
2631 </a>
2641 </a>
2632 </td><td>
2642 </td><td>
2633 start stand-alone webserver
2643 start stand-alone webserver
2634 </td></tr>
2644 </td></tr>
2635 <tr><td>
2645 <tr><td>
2636 <a href="/help/status">
2646 <a href="/help/status">
2637 status
2647 status
2638 </a>
2648 </a>
2639 </td><td>
2649 </td><td>
2640 show changed files in the working directory
2650 show changed files in the working directory
2641 </td></tr>
2651 </td></tr>
2642 <tr><td>
2652 <tr><td>
2643 <a href="/help/summary">
2653 <a href="/help/summary">
2644 summary
2654 summary
2645 </a>
2655 </a>
2646 </td><td>
2656 </td><td>
2647 summarize working directory state
2657 summarize working directory state
2648 </td></tr>
2658 </td></tr>
2649 <tr><td>
2659 <tr><td>
2650 <a href="/help/update">
2660 <a href="/help/update">
2651 update
2661 update
2652 </a>
2662 </a>
2653 </td><td>
2663 </td><td>
2654 update working directory (or switch revisions)
2664 update working directory (or switch revisions)
2655 </td></tr>
2665 </td></tr>
2656
2666
2657
2667
2658
2668
2659 <tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
2669 <tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
2660
2670
2661 <tr><td>
2671 <tr><td>
2662 <a href="/help/addremove">
2672 <a href="/help/addremove">
2663 addremove
2673 addremove
2664 </a>
2674 </a>
2665 </td><td>
2675 </td><td>
2666 add all new files, delete all missing files
2676 add all new files, delete all missing files
2667 </td></tr>
2677 </td></tr>
2668 <tr><td>
2678 <tr><td>
2669 <a href="/help/admin::verify">
2679 <a href="/help/admin::verify">
2670 admin::verify
2680 admin::verify
2671 </a>
2681 </a>
2672 </td><td>
2682 </td><td>
2673 verify the integrity of the repository
2683 verify the integrity of the repository
2674 </td></tr>
2684 </td></tr>
2675 <tr><td>
2685 <tr><td>
2676 <a href="/help/archive">
2686 <a href="/help/archive">
2677 archive
2687 archive
2678 </a>
2688 </a>
2679 </td><td>
2689 </td><td>
2680 create an unversioned archive of a repository revision
2690 create an unversioned archive of a repository revision
2681 </td></tr>
2691 </td></tr>
2682 <tr><td>
2692 <tr><td>
2683 <a href="/help/backout">
2693 <a href="/help/backout">
2684 backout
2694 backout
2685 </a>
2695 </a>
2686 </td><td>
2696 </td><td>
2687 reverse effect of earlier changeset
2697 reverse effect of earlier changeset
2688 </td></tr>
2698 </td></tr>
2689 <tr><td>
2699 <tr><td>
2690 <a href="/help/bisect">
2700 <a href="/help/bisect">
2691 bisect
2701 bisect
2692 </a>
2702 </a>
2693 </td><td>
2703 </td><td>
2694 subdivision search of changesets
2704 subdivision search of changesets
2695 </td></tr>
2705 </td></tr>
2696 <tr><td>
2706 <tr><td>
2697 <a href="/help/bookmarks">
2707 <a href="/help/bookmarks">
2698 bookmarks
2708 bookmarks
2699 </a>
2709 </a>
2700 </td><td>
2710 </td><td>
2701 create a new bookmark or list existing bookmarks
2711 create a new bookmark or list existing bookmarks
2702 </td></tr>
2712 </td></tr>
2703 <tr><td>
2713 <tr><td>
2704 <a href="/help/branch">
2714 <a href="/help/branch">
2705 branch
2715 branch
2706 </a>
2716 </a>
2707 </td><td>
2717 </td><td>
2708 set or show the current branch name
2718 set or show the current branch name
2709 </td></tr>
2719 </td></tr>
2710 <tr><td>
2720 <tr><td>
2711 <a href="/help/branches">
2721 <a href="/help/branches">
2712 branches
2722 branches
2713 </a>
2723 </a>
2714 </td><td>
2724 </td><td>
2715 list repository named branches
2725 list repository named branches
2716 </td></tr>
2726 </td></tr>
2717 <tr><td>
2727 <tr><td>
2718 <a href="/help/bundle">
2728 <a href="/help/bundle">
2719 bundle
2729 bundle
2720 </a>
2730 </a>
2721 </td><td>
2731 </td><td>
2722 create a bundle file
2732 create a bundle file
2723 </td></tr>
2733 </td></tr>
2724 <tr><td>
2734 <tr><td>
2725 <a href="/help/cat">
2735 <a href="/help/cat">
2726 cat
2736 cat
2727 </a>
2737 </a>
2728 </td><td>
2738 </td><td>
2729 output the current or given revision of files
2739 output the current or given revision of files
2730 </td></tr>
2740 </td></tr>
2731 <tr><td>
2741 <tr><td>
2732 <a href="/help/config">
2742 <a href="/help/config">
2733 config
2743 config
2734 </a>
2744 </a>
2735 </td><td>
2745 </td><td>
2736 show combined config settings from all hgrc files
2746 show combined config settings from all hgrc files
2737 </td></tr>
2747 </td></tr>
2738 <tr><td>
2748 <tr><td>
2739 <a href="/help/copy">
2749 <a href="/help/copy">
2740 copy
2750 copy
2741 </a>
2751 </a>
2742 </td><td>
2752 </td><td>
2743 mark files as copied for the next commit
2753 mark files as copied for the next commit
2744 </td></tr>
2754 </td></tr>
2745 <tr><td>
2755 <tr><td>
2746 <a href="/help/files">
2756 <a href="/help/files">
2747 files
2757 files
2748 </a>
2758 </a>
2749 </td><td>
2759 </td><td>
2750 list tracked files
2760 list tracked files
2751 </td></tr>
2761 </td></tr>
2752 <tr><td>
2762 <tr><td>
2753 <a href="/help/graft">
2763 <a href="/help/graft">
2754 graft
2764 graft
2755 </a>
2765 </a>
2756 </td><td>
2766 </td><td>
2757 copy changes from other branches onto the current branch
2767 copy changes from other branches onto the current branch
2758 </td></tr>
2768 </td></tr>
2759 <tr><td>
2769 <tr><td>
2760 <a href="/help/grep">
2770 <a href="/help/grep">
2761 grep
2771 grep
2762 </a>
2772 </a>
2763 </td><td>
2773 </td><td>
2764 search for a pattern in specified files
2774 search for a pattern in specified files
2765 </td></tr>
2775 </td></tr>
2766 <tr><td>
2776 <tr><td>
2767 <a href="/help/hashelp">
2777 <a href="/help/hashelp">
2768 hashelp
2778 hashelp
2769 </a>
2779 </a>
2770 </td><td>
2780 </td><td>
2771 Extension command's help
2781 Extension command's help
2772 </td></tr>
2782 </td></tr>
2773 <tr><td>
2783 <tr><td>
2774 <a href="/help/heads">
2784 <a href="/help/heads">
2775 heads
2785 heads
2776 </a>
2786 </a>
2777 </td><td>
2787 </td><td>
2778 show branch heads
2788 show branch heads
2779 </td></tr>
2789 </td></tr>
2780 <tr><td>
2790 <tr><td>
2781 <a href="/help/help">
2791 <a href="/help/help">
2782 help
2792 help
2783 </a>
2793 </a>
2784 </td><td>
2794 </td><td>
2785 show help for a given topic or a help overview
2795 show help for a given topic or a help overview
2786 </td></tr>
2796 </td></tr>
2787 <tr><td>
2797 <tr><td>
2788 <a href="/help/hgalias">
2798 <a href="/help/hgalias">
2789 hgalias
2799 hgalias
2790 </a>
2800 </a>
2791 </td><td>
2801 </td><td>
2792 My doc
2802 My doc
2793 </td></tr>
2803 </td></tr>
2794 <tr><td>
2804 <tr><td>
2795 <a href="/help/hgaliasnodoc">
2805 <a href="/help/hgaliasnodoc">
2796 hgaliasnodoc
2806 hgaliasnodoc
2797 </a>
2807 </a>
2798 </td><td>
2808 </td><td>
2799 summarize working directory state
2809 summarize working directory state
2800 </td></tr>
2810 </td></tr>
2801 <tr><td>
2811 <tr><td>
2802 <a href="/help/identify">
2812 <a href="/help/identify">
2803 identify
2813 identify
2804 </a>
2814 </a>
2805 </td><td>
2815 </td><td>
2806 identify the working directory or specified revision
2816 identify the working directory or specified revision
2807 </td></tr>
2817 </td></tr>
2808 <tr><td>
2818 <tr><td>
2809 <a href="/help/import">
2819 <a href="/help/import">
2810 import
2820 import
2811 </a>
2821 </a>
2812 </td><td>
2822 </td><td>
2813 import an ordered set of patches
2823 import an ordered set of patches
2814 </td></tr>
2824 </td></tr>
2815 <tr><td>
2825 <tr><td>
2816 <a href="/help/incoming">
2826 <a href="/help/incoming">
2817 incoming
2827 incoming
2818 </a>
2828 </a>
2819 </td><td>
2829 </td><td>
2820 show new changesets found in source
2830 show new changesets found in source
2821 </td></tr>
2831 </td></tr>
2822 <tr><td>
2832 <tr><td>
2823 <a href="/help/manifest">
2833 <a href="/help/manifest">
2824 manifest
2834 manifest
2825 </a>
2835 </a>
2826 </td><td>
2836 </td><td>
2827 output the current or given revision of the project manifest
2837 output the current or given revision of the project manifest
2828 </td></tr>
2838 </td></tr>
2829 <tr><td>
2839 <tr><td>
2830 <a href="/help/nohelp">
2840 <a href="/help/nohelp">
2831 nohelp
2841 nohelp
2832 </a>
2842 </a>
2833 </td><td>
2843 </td><td>
2834 (no help text available)
2844 (no help text available)
2835 </td></tr>
2845 </td></tr>
2836 <tr><td>
2846 <tr><td>
2837 <a href="/help/outgoing">
2847 <a href="/help/outgoing">
2838 outgoing
2848 outgoing
2839 </a>
2849 </a>
2840 </td><td>
2850 </td><td>
2841 show changesets not found in the destination
2851 show changesets not found in the destination
2842 </td></tr>
2852 </td></tr>
2843 <tr><td>
2853 <tr><td>
2844 <a href="/help/paths">
2854 <a href="/help/paths">
2845 paths
2855 paths
2846 </a>
2856 </a>
2847 </td><td>
2857 </td><td>
2848 show aliases for remote repositories
2858 show aliases for remote repositories
2849 </td></tr>
2859 </td></tr>
2850 <tr><td>
2860 <tr><td>
2851 <a href="/help/phase">
2861 <a href="/help/phase">
2852 phase
2862 phase
2853 </a>
2863 </a>
2854 </td><td>
2864 </td><td>
2855 set or show the current phase name
2865 set or show the current phase name
2856 </td></tr>
2866 </td></tr>
2857 <tr><td>
2867 <tr><td>
2858 <a href="/help/purge">
2868 <a href="/help/purge">
2859 purge
2869 purge
2860 </a>
2870 </a>
2861 </td><td>
2871 </td><td>
2862 removes files not tracked by Mercurial
2872 removes files not tracked by Mercurial
2863 </td></tr>
2873 </td></tr>
2864 <tr><td>
2874 <tr><td>
2865 <a href="/help/recover">
2875 <a href="/help/recover">
2866 recover
2876 recover
2867 </a>
2877 </a>
2868 </td><td>
2878 </td><td>
2869 roll back an interrupted transaction
2879 roll back an interrupted transaction
2870 </td></tr>
2880 </td></tr>
2871 <tr><td>
2881 <tr><td>
2872 <a href="/help/rename">
2882 <a href="/help/rename">
2873 rename
2883 rename
2874 </a>
2884 </a>
2875 </td><td>
2885 </td><td>
2876 rename files; equivalent of copy + remove
2886 rename files; equivalent of copy + remove
2877 </td></tr>
2887 </td></tr>
2878 <tr><td>
2888 <tr><td>
2879 <a href="/help/resolve">
2889 <a href="/help/resolve">
2880 resolve
2890 resolve
2881 </a>
2891 </a>
2882 </td><td>
2892 </td><td>
2883 redo merges or set/view the merge status of files
2893 redo merges or set/view the merge status of files
2884 </td></tr>
2894 </td></tr>
2885 <tr><td>
2895 <tr><td>
2886 <a href="/help/revert">
2896 <a href="/help/revert">
2887 revert
2897 revert
2888 </a>
2898 </a>
2889 </td><td>
2899 </td><td>
2890 restore files to their checkout state
2900 restore files to their checkout state
2891 </td></tr>
2901 </td></tr>
2892 <tr><td>
2902 <tr><td>
2893 <a href="/help/root">
2903 <a href="/help/root">
2894 root
2904 root
2895 </a>
2905 </a>
2896 </td><td>
2906 </td><td>
2897 print the root (top) of the current working directory
2907 print the root (top) of the current working directory
2898 </td></tr>
2908 </td></tr>
2899 <tr><td>
2909 <tr><td>
2900 <a href="/help/shellalias">
2910 <a href="/help/shellalias">
2901 shellalias
2911 shellalias
2902 </a>
2912 </a>
2903 </td><td>
2913 </td><td>
2904 (no help text available)
2914 (no help text available)
2905 </td></tr>
2915 </td></tr>
2906 <tr><td>
2916 <tr><td>
2907 <a href="/help/shelve">
2917 <a href="/help/shelve">
2908 shelve
2918 shelve
2909 </a>
2919 </a>
2910 </td><td>
2920 </td><td>
2911 save and set aside changes from the working directory
2921 save and set aside changes from the working directory
2912 </td></tr>
2922 </td></tr>
2913 <tr><td>
2923 <tr><td>
2914 <a href="/help/tag">
2924 <a href="/help/tag">
2915 tag
2925 tag
2916 </a>
2926 </a>
2917 </td><td>
2927 </td><td>
2918 add one or more tags for the current or given revision
2928 add one or more tags for the current or given revision
2919 </td></tr>
2929 </td></tr>
2920 <tr><td>
2930 <tr><td>
2921 <a href="/help/tags">
2931 <a href="/help/tags">
2922 tags
2932 tags
2923 </a>
2933 </a>
2924 </td><td>
2934 </td><td>
2925 list repository tags
2935 list repository tags
2926 </td></tr>
2936 </td></tr>
2927 <tr><td>
2937 <tr><td>
2928 <a href="/help/unbundle">
2938 <a href="/help/unbundle">
2929 unbundle
2939 unbundle
2930 </a>
2940 </a>
2931 </td><td>
2941 </td><td>
2932 apply one or more bundle files
2942 apply one or more bundle files
2933 </td></tr>
2943 </td></tr>
2934 <tr><td>
2944 <tr><td>
2935 <a href="/help/unshelve">
2945 <a href="/help/unshelve">
2936 unshelve
2946 unshelve
2937 </a>
2947 </a>
2938 </td><td>
2948 </td><td>
2939 restore a shelved change to the working directory
2949 restore a shelved change to the working directory
2940 </td></tr>
2950 </td></tr>
2941 <tr><td>
2951 <tr><td>
2942 <a href="/help/verify">
2952 <a href="/help/verify">
2943 verify
2953 verify
2944 </a>
2954 </a>
2945 </td><td>
2955 </td><td>
2946 verify the integrity of the repository
2956 verify the integrity of the repository
2947 </td></tr>
2957 </td></tr>
2948 <tr><td>
2958 <tr><td>
2949 <a href="/help/version">
2959 <a href="/help/version">
2950 version
2960 version
2951 </a>
2961 </a>
2952 </td><td>
2962 </td><td>
2953 output version and copyright information
2963 output version and copyright information
2954 </td></tr>
2964 </td></tr>
2955
2965
2956
2966
2957 </table>
2967 </table>
2958 </div>
2968 </div>
2959 </div>
2969 </div>
2960
2970
2961
2971
2962
2972
2963 </body>
2973 </body>
2964 </html>
2974 </html>
2965
2975
2966
2976
2967 $ get-with-headers.py $LOCALIP:$HGPORT "help/add"
2977 $ get-with-headers.py $LOCALIP:$HGPORT "help/add"
2968 200 Script output follows
2978 200 Script output follows
2969
2979
2970 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2980 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2971 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2981 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2972 <head>
2982 <head>
2973 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2983 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2974 <meta name="robots" content="index, nofollow" />
2984 <meta name="robots" content="index, nofollow" />
2975 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2985 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2976 <script type="text/javascript" src="/static/mercurial.js"></script>
2986 <script type="text/javascript" src="/static/mercurial.js"></script>
2977
2987
2978 <title>Help: add</title>
2988 <title>Help: add</title>
2979 </head>
2989 </head>
2980 <body>
2990 <body>
2981
2991
2982 <div class="container">
2992 <div class="container">
2983 <div class="menu">
2993 <div class="menu">
2984 <div class="logo">
2994 <div class="logo">
2985 <a href="https://mercurial-scm.org/">
2995 <a href="https://mercurial-scm.org/">
2986 <img src="/static/hglogo.png" alt="mercurial" /></a>
2996 <img src="/static/hglogo.png" alt="mercurial" /></a>
2987 </div>
2997 </div>
2988 <ul>
2998 <ul>
2989 <li><a href="/shortlog">log</a></li>
2999 <li><a href="/shortlog">log</a></li>
2990 <li><a href="/graph">graph</a></li>
3000 <li><a href="/graph">graph</a></li>
2991 <li><a href="/tags">tags</a></li>
3001 <li><a href="/tags">tags</a></li>
2992 <li><a href="/bookmarks">bookmarks</a></li>
3002 <li><a href="/bookmarks">bookmarks</a></li>
2993 <li><a href="/branches">branches</a></li>
3003 <li><a href="/branches">branches</a></li>
2994 </ul>
3004 </ul>
2995 <ul>
3005 <ul>
2996 <li class="active"><a href="/help">help</a></li>
3006 <li class="active"><a href="/help">help</a></li>
2997 </ul>
3007 </ul>
2998 </div>
3008 </div>
2999
3009
3000 <div class="main">
3010 <div class="main">
3001 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3011 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3002 <h3>Help: add</h3>
3012 <h3>Help: add</h3>
3003
3013
3004 <form class="search" action="/log">
3014 <form class="search" action="/log">
3005
3015
3006 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3016 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3007 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3017 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3008 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3018 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3009 </form>
3019 </form>
3010 <div id="doc">
3020 <div id="doc">
3011 <p>
3021 <p>
3012 hg add [OPTION]... [FILE]...
3022 hg add [OPTION]... [FILE]...
3013 </p>
3023 </p>
3014 <p>
3024 <p>
3015 add the specified files on the next commit
3025 add the specified files on the next commit
3016 </p>
3026 </p>
3017 <p>
3027 <p>
3018 Schedule files to be version controlled and added to the
3028 Schedule files to be version controlled and added to the
3019 repository.
3029 repository.
3020 </p>
3030 </p>
3021 <p>
3031 <p>
3022 The files will be added to the repository at the next commit. To
3032 The files will be added to the repository at the next commit. To
3023 undo an add before that, see 'hg forget'.
3033 undo an add before that, see 'hg forget'.
3024 </p>
3034 </p>
3025 <p>
3035 <p>
3026 If no names are given, add all files to the repository (except
3036 If no names are given, add all files to the repository (except
3027 files matching &quot;.hgignore&quot;).
3037 files matching &quot;.hgignore&quot;).
3028 </p>
3038 </p>
3029 <p>
3039 <p>
3030 Examples:
3040 Examples:
3031 </p>
3041 </p>
3032 <ul>
3042 <ul>
3033 <li> New (unknown) files are added automatically by 'hg add':
3043 <li> New (unknown) files are added automatically by 'hg add':
3034 <pre>
3044 <pre>
3035 \$ ls (re)
3045 \$ ls (re)
3036 foo.c
3046 foo.c
3037 \$ hg status (re)
3047 \$ hg status (re)
3038 ? foo.c
3048 ? foo.c
3039 \$ hg add (re)
3049 \$ hg add (re)
3040 adding foo.c
3050 adding foo.c
3041 \$ hg status (re)
3051 \$ hg status (re)
3042 A foo.c
3052 A foo.c
3043 </pre>
3053 </pre>
3044 <li> Specific files to be added can be specified:
3054 <li> Specific files to be added can be specified:
3045 <pre>
3055 <pre>
3046 \$ ls (re)
3056 \$ ls (re)
3047 bar.c foo.c
3057 bar.c foo.c
3048 \$ hg status (re)
3058 \$ hg status (re)
3049 ? bar.c
3059 ? bar.c
3050 ? foo.c
3060 ? foo.c
3051 \$ hg add bar.c (re)
3061 \$ hg add bar.c (re)
3052 \$ hg status (re)
3062 \$ hg status (re)
3053 A bar.c
3063 A bar.c
3054 ? foo.c
3064 ? foo.c
3055 </pre>
3065 </pre>
3056 </ul>
3066 </ul>
3057 <p>
3067 <p>
3058 Returns 0 if all files are successfully added.
3068 Returns 0 if all files are successfully added.
3059 </p>
3069 </p>
3060 <p>
3070 <p>
3061 options ([+] can be repeated):
3071 options ([+] can be repeated):
3062 </p>
3072 </p>
3063 <table>
3073 <table>
3064 <tr><td>-I</td>
3074 <tr><td>-I</td>
3065 <td>--include PATTERN [+]</td>
3075 <td>--include PATTERN [+]</td>
3066 <td>include names matching the given patterns</td></tr>
3076 <td>include names matching the given patterns</td></tr>
3067 <tr><td>-X</td>
3077 <tr><td>-X</td>
3068 <td>--exclude PATTERN [+]</td>
3078 <td>--exclude PATTERN [+]</td>
3069 <td>exclude names matching the given patterns</td></tr>
3079 <td>exclude names matching the given patterns</td></tr>
3070 <tr><td>-S</td>
3080 <tr><td>-S</td>
3071 <td>--subrepos</td>
3081 <td>--subrepos</td>
3072 <td>recurse into subrepositories</td></tr>
3082 <td>recurse into subrepositories</td></tr>
3073 <tr><td>-n</td>
3083 <tr><td>-n</td>
3074 <td>--dry-run</td>
3084 <td>--dry-run</td>
3075 <td>do not perform actions, just print output</td></tr>
3085 <td>do not perform actions, just print output</td></tr>
3076 </table>
3086 </table>
3077 <p>
3087 <p>
3078 global options ([+] can be repeated):
3088 global options ([+] can be repeated):
3079 </p>
3089 </p>
3080 <table>
3090 <table>
3081 <tr><td>-R</td>
3091 <tr><td>-R</td>
3082 <td>--repository REPO</td>
3092 <td>--repository REPO</td>
3083 <td>repository root directory or name of overlay bundle file</td></tr>
3093 <td>repository root directory or name of overlay bundle file</td></tr>
3084 <tr><td></td>
3094 <tr><td></td>
3085 <td>--cwd DIR</td>
3095 <td>--cwd DIR</td>
3086 <td>change working directory</td></tr>
3096 <td>change working directory</td></tr>
3087 <tr><td>-y</td>
3097 <tr><td>-y</td>
3088 <td>--noninteractive</td>
3098 <td>--noninteractive</td>
3089 <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
3099 <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
3090 <tr><td>-q</td>
3100 <tr><td>-q</td>
3091 <td>--quiet</td>
3101 <td>--quiet</td>
3092 <td>suppress output</td></tr>
3102 <td>suppress output</td></tr>
3093 <tr><td>-v</td>
3103 <tr><td>-v</td>
3094 <td>--verbose</td>
3104 <td>--verbose</td>
3095 <td>enable additional output</td></tr>
3105 <td>enable additional output</td></tr>
3096 <tr><td></td>
3106 <tr><td></td>
3097 <td>--color TYPE</td>
3107 <td>--color TYPE</td>
3098 <td>when to colorize (boolean, always, auto, never, or debug)</td></tr>
3108 <td>when to colorize (boolean, always, auto, never, or debug)</td></tr>
3099 <tr><td></td>
3109 <tr><td></td>
3100 <td>--config CONFIG [+]</td>
3110 <td>--config CONFIG [+]</td>
3101 <td>set/override config option (use 'section.name=value')</td></tr>
3111 <td>set/override config option (use 'section.name=value')</td></tr>
3102 <tr><td></td>
3112 <tr><td></td>
3103 <td>--debug</td>
3113 <td>--debug</td>
3104 <td>enable debugging output</td></tr>
3114 <td>enable debugging output</td></tr>
3105 <tr><td></td>
3115 <tr><td></td>
3106 <td>--debugger</td>
3116 <td>--debugger</td>
3107 <td>start debugger</td></tr>
3117 <td>start debugger</td></tr>
3108 <tr><td></td>
3118 <tr><td></td>
3109 <td>--encoding ENCODE</td>
3119 <td>--encoding ENCODE</td>
3110 <td>set the charset encoding (default: ascii)</td></tr>
3120 <td>set the charset encoding (default: ascii)</td></tr>
3111 <tr><td></td>
3121 <tr><td></td>
3112 <td>--encodingmode MODE</td>
3122 <td>--encodingmode MODE</td>
3113 <td>set the charset encoding mode (default: strict)</td></tr>
3123 <td>set the charset encoding mode (default: strict)</td></tr>
3114 <tr><td></td>
3124 <tr><td></td>
3115 <td>--traceback</td>
3125 <td>--traceback</td>
3116 <td>always print a traceback on exception</td></tr>
3126 <td>always print a traceback on exception</td></tr>
3117 <tr><td></td>
3127 <tr><td></td>
3118 <td>--time</td>
3128 <td>--time</td>
3119 <td>time how long the command takes</td></tr>
3129 <td>time how long the command takes</td></tr>
3120 <tr><td></td>
3130 <tr><td></td>
3121 <td>--profile</td>
3131 <td>--profile</td>
3122 <td>print command execution profile</td></tr>
3132 <td>print command execution profile</td></tr>
3123 <tr><td></td>
3133 <tr><td></td>
3124 <td>--version</td>
3134 <td>--version</td>
3125 <td>output version information and exit</td></tr>
3135 <td>output version information and exit</td></tr>
3126 <tr><td>-h</td>
3136 <tr><td>-h</td>
3127 <td>--help</td>
3137 <td>--help</td>
3128 <td>display help and exit</td></tr>
3138 <td>display help and exit</td></tr>
3129 <tr><td></td>
3139 <tr><td></td>
3130 <td>--hidden</td>
3140 <td>--hidden</td>
3131 <td>consider hidden changesets</td></tr>
3141 <td>consider hidden changesets</td></tr>
3132 <tr><td></td>
3142 <tr><td></td>
3133 <td>--pager TYPE</td>
3143 <td>--pager TYPE</td>
3134 <td>when to paginate (boolean, always, auto, or never) (default: auto)</td></tr>
3144 <td>when to paginate (boolean, always, auto, or never) (default: auto)</td></tr>
3135 </table>
3145 </table>
3136
3146
3137 </div>
3147 </div>
3138 </div>
3148 </div>
3139 </div>
3149 </div>
3140
3150
3141
3151
3142
3152
3143 </body>
3153 </body>
3144 </html>
3154 </html>
3145
3155
3146
3156
3147 $ get-with-headers.py $LOCALIP:$HGPORT "help/remove"
3157 $ get-with-headers.py $LOCALIP:$HGPORT "help/remove"
3148 200 Script output follows
3158 200 Script output follows
3149
3159
3150 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3160 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3151 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3161 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3152 <head>
3162 <head>
3153 <link rel="icon" href="/static/hgicon.png" type="image/png" />
3163 <link rel="icon" href="/static/hgicon.png" type="image/png" />
3154 <meta name="robots" content="index, nofollow" />
3164 <meta name="robots" content="index, nofollow" />
3155 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
3165 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
3156 <script type="text/javascript" src="/static/mercurial.js"></script>
3166 <script type="text/javascript" src="/static/mercurial.js"></script>
3157
3167
3158 <title>Help: remove</title>
3168 <title>Help: remove</title>
3159 </head>
3169 </head>
3160 <body>
3170 <body>
3161
3171
3162 <div class="container">
3172 <div class="container">
3163 <div class="menu">
3173 <div class="menu">
3164 <div class="logo">
3174 <div class="logo">
3165 <a href="https://mercurial-scm.org/">
3175 <a href="https://mercurial-scm.org/">
3166 <img src="/static/hglogo.png" alt="mercurial" /></a>
3176 <img src="/static/hglogo.png" alt="mercurial" /></a>
3167 </div>
3177 </div>
3168 <ul>
3178 <ul>
3169 <li><a href="/shortlog">log</a></li>
3179 <li><a href="/shortlog">log</a></li>
3170 <li><a href="/graph">graph</a></li>
3180 <li><a href="/graph">graph</a></li>
3171 <li><a href="/tags">tags</a></li>
3181 <li><a href="/tags">tags</a></li>
3172 <li><a href="/bookmarks">bookmarks</a></li>
3182 <li><a href="/bookmarks">bookmarks</a></li>
3173 <li><a href="/branches">branches</a></li>
3183 <li><a href="/branches">branches</a></li>
3174 </ul>
3184 </ul>
3175 <ul>
3185 <ul>
3176 <li class="active"><a href="/help">help</a></li>
3186 <li class="active"><a href="/help">help</a></li>
3177 </ul>
3187 </ul>
3178 </div>
3188 </div>
3179
3189
3180 <div class="main">
3190 <div class="main">
3181 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3191 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3182 <h3>Help: remove</h3>
3192 <h3>Help: remove</h3>
3183
3193
3184 <form class="search" action="/log">
3194 <form class="search" action="/log">
3185
3195
3186 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3196 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3187 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3197 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3188 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3198 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3189 </form>
3199 </form>
3190 <div id="doc">
3200 <div id="doc">
3191 <p>
3201 <p>
3192 hg remove [OPTION]... FILE...
3202 hg remove [OPTION]... FILE...
3193 </p>
3203 </p>
3194 <p>
3204 <p>
3195 aliases: rm
3205 aliases: rm
3196 </p>
3206 </p>
3197 <p>
3207 <p>
3198 remove the specified files on the next commit
3208 remove the specified files on the next commit
3199 </p>
3209 </p>
3200 <p>
3210 <p>
3201 Schedule the indicated files for removal from the current branch.
3211 Schedule the indicated files for removal from the current branch.
3202 </p>
3212 </p>
3203 <p>
3213 <p>
3204 This command schedules the files to be removed at the next commit.
3214 This command schedules the files to be removed at the next commit.
3205 To undo a remove before that, see 'hg revert'. To undo added
3215 To undo a remove before that, see 'hg revert'. To undo added
3206 files, see 'hg forget'.
3216 files, see 'hg forget'.
3207 </p>
3217 </p>
3208 <p>
3218 <p>
3209 -A/--after can be used to remove only files that have already
3219 -A/--after can be used to remove only files that have already
3210 been deleted, -f/--force can be used to force deletion, and -Af
3220 been deleted, -f/--force can be used to force deletion, and -Af
3211 can be used to remove files from the next revision without
3221 can be used to remove files from the next revision without
3212 deleting them from the working directory.
3222 deleting them from the working directory.
3213 </p>
3223 </p>
3214 <p>
3224 <p>
3215 The following table details the behavior of remove for different
3225 The following table details the behavior of remove for different
3216 file states (columns) and option combinations (rows). The file
3226 file states (columns) and option combinations (rows). The file
3217 states are Added [A], Clean [C], Modified [M] and Missing [!]
3227 states are Added [A], Clean [C], Modified [M] and Missing [!]
3218 (as reported by 'hg status'). The actions are Warn, Remove
3228 (as reported by 'hg status'). The actions are Warn, Remove
3219 (from branch) and Delete (from disk):
3229 (from branch) and Delete (from disk):
3220 </p>
3230 </p>
3221 <table>
3231 <table>
3222 <tr><td>opt/state</td>
3232 <tr><td>opt/state</td>
3223 <td>A</td>
3233 <td>A</td>
3224 <td>C</td>
3234 <td>C</td>
3225 <td>M</td>
3235 <td>M</td>
3226 <td>!</td></tr>
3236 <td>!</td></tr>
3227 <tr><td>none</td>
3237 <tr><td>none</td>
3228 <td>W</td>
3238 <td>W</td>
3229 <td>RD</td>
3239 <td>RD</td>
3230 <td>W</td>
3240 <td>W</td>
3231 <td>R</td></tr>
3241 <td>R</td></tr>
3232 <tr><td>-f</td>
3242 <tr><td>-f</td>
3233 <td>R</td>
3243 <td>R</td>
3234 <td>RD</td>
3244 <td>RD</td>
3235 <td>RD</td>
3245 <td>RD</td>
3236 <td>R</td></tr>
3246 <td>R</td></tr>
3237 <tr><td>-A</td>
3247 <tr><td>-A</td>
3238 <td>W</td>
3248 <td>W</td>
3239 <td>W</td>
3249 <td>W</td>
3240 <td>W</td>
3250 <td>W</td>
3241 <td>R</td></tr>
3251 <td>R</td></tr>
3242 <tr><td>-Af</td>
3252 <tr><td>-Af</td>
3243 <td>R</td>
3253 <td>R</td>
3244 <td>R</td>
3254 <td>R</td>
3245 <td>R</td>
3255 <td>R</td>
3246 <td>R</td></tr>
3256 <td>R</td></tr>
3247 </table>
3257 </table>
3248 <p>
3258 <p>
3249 <b>Note:</b>
3259 <b>Note:</b>
3250 </p>
3260 </p>
3251 <p>
3261 <p>
3252 'hg remove' never deletes files in Added [A] state from the
3262 'hg remove' never deletes files in Added [A] state from the
3253 working directory, not even if &quot;--force&quot; is specified.
3263 working directory, not even if &quot;--force&quot; is specified.
3254 </p>
3264 </p>
3255 <p>
3265 <p>
3256 Returns 0 on success, 1 if any warnings encountered.
3266 Returns 0 on success, 1 if any warnings encountered.
3257 </p>
3267 </p>
3258 <p>
3268 <p>
3259 options ([+] can be repeated):
3269 options ([+] can be repeated):
3260 </p>
3270 </p>
3261 <table>
3271 <table>
3262 <tr><td>-A</td>
3272 <tr><td>-A</td>
3263 <td>--after</td>
3273 <td>--after</td>
3264 <td>record delete for missing files</td></tr>
3274 <td>record delete for missing files</td></tr>
3265 <tr><td>-f</td>
3275 <tr><td>-f</td>
3266 <td>--force</td>
3276 <td>--force</td>
3267 <td>forget added files, delete modified files</td></tr>
3277 <td>forget added files, delete modified files</td></tr>
3268 <tr><td>-S</td>
3278 <tr><td>-S</td>
3269 <td>--subrepos</td>
3279 <td>--subrepos</td>
3270 <td>recurse into subrepositories</td></tr>
3280 <td>recurse into subrepositories</td></tr>
3271 <tr><td>-I</td>
3281 <tr><td>-I</td>
3272 <td>--include PATTERN [+]</td>
3282 <td>--include PATTERN [+]</td>
3273 <td>include names matching the given patterns</td></tr>
3283 <td>include names matching the given patterns</td></tr>
3274 <tr><td>-X</td>
3284 <tr><td>-X</td>
3275 <td>--exclude PATTERN [+]</td>
3285 <td>--exclude PATTERN [+]</td>
3276 <td>exclude names matching the given patterns</td></tr>
3286 <td>exclude names matching the given patterns</td></tr>
3277 <tr><td>-n</td>
3287 <tr><td>-n</td>
3278 <td>--dry-run</td>
3288 <td>--dry-run</td>
3279 <td>do not perform actions, just print output</td></tr>
3289 <td>do not perform actions, just print output</td></tr>
3280 </table>
3290 </table>
3281 <p>
3291 <p>
3282 global options ([+] can be repeated):
3292 global options ([+] can be repeated):
3283 </p>
3293 </p>
3284 <table>
3294 <table>
3285 <tr><td>-R</td>
3295 <tr><td>-R</td>
3286 <td>--repository REPO</td>
3296 <td>--repository REPO</td>
3287 <td>repository root directory or name of overlay bundle file</td></tr>
3297 <td>repository root directory or name of overlay bundle file</td></tr>
3288 <tr><td></td>
3298 <tr><td></td>
3289 <td>--cwd DIR</td>
3299 <td>--cwd DIR</td>
3290 <td>change working directory</td></tr>
3300 <td>change working directory</td></tr>
3291 <tr><td>-y</td>
3301 <tr><td>-y</td>
3292 <td>--noninteractive</td>
3302 <td>--noninteractive</td>
3293 <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
3303 <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
3294 <tr><td>-q</td>
3304 <tr><td>-q</td>
3295 <td>--quiet</td>
3305 <td>--quiet</td>
3296 <td>suppress output</td></tr>
3306 <td>suppress output</td></tr>
3297 <tr><td>-v</td>
3307 <tr><td>-v</td>
3298 <td>--verbose</td>
3308 <td>--verbose</td>
3299 <td>enable additional output</td></tr>
3309 <td>enable additional output</td></tr>
3300 <tr><td></td>
3310 <tr><td></td>
3301 <td>--color TYPE</td>
3311 <td>--color TYPE</td>
3302 <td>when to colorize (boolean, always, auto, never, or debug)</td></tr>
3312 <td>when to colorize (boolean, always, auto, never, or debug)</td></tr>
3303 <tr><td></td>
3313 <tr><td></td>
3304 <td>--config CONFIG [+]</td>
3314 <td>--config CONFIG [+]</td>
3305 <td>set/override config option (use 'section.name=value')</td></tr>
3315 <td>set/override config option (use 'section.name=value')</td></tr>
3306 <tr><td></td>
3316 <tr><td></td>
3307 <td>--debug</td>
3317 <td>--debug</td>
3308 <td>enable debugging output</td></tr>
3318 <td>enable debugging output</td></tr>
3309 <tr><td></td>
3319 <tr><td></td>
3310 <td>--debugger</td>
3320 <td>--debugger</td>
3311 <td>start debugger</td></tr>
3321 <td>start debugger</td></tr>
3312 <tr><td></td>
3322 <tr><td></td>
3313 <td>--encoding ENCODE</td>
3323 <td>--encoding ENCODE</td>
3314 <td>set the charset encoding (default: ascii)</td></tr>
3324 <td>set the charset encoding (default: ascii)</td></tr>
3315 <tr><td></td>
3325 <tr><td></td>
3316 <td>--encodingmode MODE</td>
3326 <td>--encodingmode MODE</td>
3317 <td>set the charset encoding mode (default: strict)</td></tr>
3327 <td>set the charset encoding mode (default: strict)</td></tr>
3318 <tr><td></td>
3328 <tr><td></td>
3319 <td>--traceback</td>
3329 <td>--traceback</td>
3320 <td>always print a traceback on exception</td></tr>
3330 <td>always print a traceback on exception</td></tr>
3321 <tr><td></td>
3331 <tr><td></td>
3322 <td>--time</td>
3332 <td>--time</td>
3323 <td>time how long the command takes</td></tr>
3333 <td>time how long the command takes</td></tr>
3324 <tr><td></td>
3334 <tr><td></td>
3325 <td>--profile</td>
3335 <td>--profile</td>
3326 <td>print command execution profile</td></tr>
3336 <td>print command execution profile</td></tr>
3327 <tr><td></td>
3337 <tr><td></td>
3328 <td>--version</td>
3338 <td>--version</td>
3329 <td>output version information and exit</td></tr>
3339 <td>output version information and exit</td></tr>
3330 <tr><td>-h</td>
3340 <tr><td>-h</td>
3331 <td>--help</td>
3341 <td>--help</td>
3332 <td>display help and exit</td></tr>
3342 <td>display help and exit</td></tr>
3333 <tr><td></td>
3343 <tr><td></td>
3334 <td>--hidden</td>
3344 <td>--hidden</td>
3335 <td>consider hidden changesets</td></tr>
3345 <td>consider hidden changesets</td></tr>
3336 <tr><td></td>
3346 <tr><td></td>
3337 <td>--pager TYPE</td>
3347 <td>--pager TYPE</td>
3338 <td>when to paginate (boolean, always, auto, or never) (default: auto)</td></tr>
3348 <td>when to paginate (boolean, always, auto, or never) (default: auto)</td></tr>
3339 </table>
3349 </table>
3340
3350
3341 </div>
3351 </div>
3342 </div>
3352 </div>
3343 </div>
3353 </div>
3344
3354
3345
3355
3346
3356
3347 </body>
3357 </body>
3348 </html>
3358 </html>
3349
3359
3350
3360
3351 $ get-with-headers.py $LOCALIP:$HGPORT "help/dates"
3361 $ get-with-headers.py $LOCALIP:$HGPORT "help/dates"
3352 200 Script output follows
3362 200 Script output follows
3353
3363
3354 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3364 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3355 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3365 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3356 <head>
3366 <head>
3357 <link rel="icon" href="/static/hgicon.png" type="image/png" />
3367 <link rel="icon" href="/static/hgicon.png" type="image/png" />
3358 <meta name="robots" content="index, nofollow" />
3368 <meta name="robots" content="index, nofollow" />
3359 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
3369 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
3360 <script type="text/javascript" src="/static/mercurial.js"></script>
3370 <script type="text/javascript" src="/static/mercurial.js"></script>
3361
3371
3362 <title>Help: dates</title>
3372 <title>Help: dates</title>
3363 </head>
3373 </head>
3364 <body>
3374 <body>
3365
3375
3366 <div class="container">
3376 <div class="container">
3367 <div class="menu">
3377 <div class="menu">
3368 <div class="logo">
3378 <div class="logo">
3369 <a href="https://mercurial-scm.org/">
3379 <a href="https://mercurial-scm.org/">
3370 <img src="/static/hglogo.png" alt="mercurial" /></a>
3380 <img src="/static/hglogo.png" alt="mercurial" /></a>
3371 </div>
3381 </div>
3372 <ul>
3382 <ul>
3373 <li><a href="/shortlog">log</a></li>
3383 <li><a href="/shortlog">log</a></li>
3374 <li><a href="/graph">graph</a></li>
3384 <li><a href="/graph">graph</a></li>
3375 <li><a href="/tags">tags</a></li>
3385 <li><a href="/tags">tags</a></li>
3376 <li><a href="/bookmarks">bookmarks</a></li>
3386 <li><a href="/bookmarks">bookmarks</a></li>
3377 <li><a href="/branches">branches</a></li>
3387 <li><a href="/branches">branches</a></li>
3378 </ul>
3388 </ul>
3379 <ul>
3389 <ul>
3380 <li class="active"><a href="/help">help</a></li>
3390 <li class="active"><a href="/help">help</a></li>
3381 </ul>
3391 </ul>
3382 </div>
3392 </div>
3383
3393
3384 <div class="main">
3394 <div class="main">
3385 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3395 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3386 <h3>Help: dates</h3>
3396 <h3>Help: dates</h3>
3387
3397
3388 <form class="search" action="/log">
3398 <form class="search" action="/log">
3389
3399
3390 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3400 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3391 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3401 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3392 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3402 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3393 </form>
3403 </form>
3394 <div id="doc">
3404 <div id="doc">
3395 <h1>Date Formats</h1>
3405 <h1>Date Formats</h1>
3396 <p>
3406 <p>
3397 Some commands allow the user to specify a date, e.g.:
3407 Some commands allow the user to specify a date, e.g.:
3398 </p>
3408 </p>
3399 <ul>
3409 <ul>
3400 <li> backout, commit, import, tag: Specify the commit date.
3410 <li> backout, commit, import, tag: Specify the commit date.
3401 <li> log, revert, update: Select revision(s) by date.
3411 <li> log, revert, update: Select revision(s) by date.
3402 </ul>
3412 </ul>
3403 <p>
3413 <p>
3404 Many date formats are valid. Here are some examples:
3414 Many date formats are valid. Here are some examples:
3405 </p>
3415 </p>
3406 <ul>
3416 <ul>
3407 <li> &quot;Wed Dec 6 13:18:29 2006&quot; (local timezone assumed)
3417 <li> &quot;Wed Dec 6 13:18:29 2006&quot; (local timezone assumed)
3408 <li> &quot;Dec 6 13:18 -0600&quot; (year assumed, time offset provided)
3418 <li> &quot;Dec 6 13:18 -0600&quot; (year assumed, time offset provided)
3409 <li> &quot;Dec 6 13:18 UTC&quot; (UTC and GMT are aliases for +0000)
3419 <li> &quot;Dec 6 13:18 UTC&quot; (UTC and GMT are aliases for +0000)
3410 <li> &quot;Dec 6&quot; (midnight)
3420 <li> &quot;Dec 6&quot; (midnight)
3411 <li> &quot;13:18&quot; (today assumed)
3421 <li> &quot;13:18&quot; (today assumed)
3412 <li> &quot;3:39&quot; (3:39AM assumed)
3422 <li> &quot;3:39&quot; (3:39AM assumed)
3413 <li> &quot;3:39pm&quot; (15:39)
3423 <li> &quot;3:39pm&quot; (15:39)
3414 <li> &quot;2006-12-06 13:18:29&quot; (ISO 8601 format)
3424 <li> &quot;2006-12-06 13:18:29&quot; (ISO 8601 format)
3415 <li> &quot;2006-12-6 13:18&quot;
3425 <li> &quot;2006-12-6 13:18&quot;
3416 <li> &quot;2006-12-6&quot;
3426 <li> &quot;2006-12-6&quot;
3417 <li> &quot;12-6&quot;
3427 <li> &quot;12-6&quot;
3418 <li> &quot;12/6&quot;
3428 <li> &quot;12/6&quot;
3419 <li> &quot;12/6/6&quot; (Dec 6 2006)
3429 <li> &quot;12/6/6&quot; (Dec 6 2006)
3420 <li> &quot;today&quot; (midnight)
3430 <li> &quot;today&quot; (midnight)
3421 <li> &quot;yesterday&quot; (midnight)
3431 <li> &quot;yesterday&quot; (midnight)
3422 <li> &quot;now&quot; - right now
3432 <li> &quot;now&quot; - right now
3423 </ul>
3433 </ul>
3424 <p>
3434 <p>
3425 Lastly, there is Mercurial's internal format:
3435 Lastly, there is Mercurial's internal format:
3426 </p>
3436 </p>
3427 <ul>
3437 <ul>
3428 <li> &quot;1165411109 0&quot; (Wed Dec 6 13:18:29 2006 UTC)
3438 <li> &quot;1165411109 0&quot; (Wed Dec 6 13:18:29 2006 UTC)
3429 </ul>
3439 </ul>
3430 <p>
3440 <p>
3431 This is the internal representation format for dates. The first number
3441 This is the internal representation format for dates. The first number
3432 is the number of seconds since the epoch (1970-01-01 00:00 UTC). The
3442 is the number of seconds since the epoch (1970-01-01 00:00 UTC). The
3433 second is the offset of the local timezone, in seconds west of UTC
3443 second is the offset of the local timezone, in seconds west of UTC
3434 (negative if the timezone is east of UTC).
3444 (negative if the timezone is east of UTC).
3435 </p>
3445 </p>
3436 <p>
3446 <p>
3437 The log command also accepts date ranges:
3447 The log command also accepts date ranges:
3438 </p>
3448 </p>
3439 <ul>
3449 <ul>
3440 <li> &quot;&lt;DATE&quot; - at or before a given date/time
3450 <li> &quot;&lt;DATE&quot; - at or before a given date/time
3441 <li> &quot;&gt;DATE&quot; - on or after a given date/time
3451 <li> &quot;&gt;DATE&quot; - on or after a given date/time
3442 <li> &quot;DATE to DATE&quot; - a date range, inclusive
3452 <li> &quot;DATE to DATE&quot; - a date range, inclusive
3443 <li> &quot;-DAYS&quot; - within a given number of days from today
3453 <li> &quot;-DAYS&quot; - within a given number of days from today
3444 </ul>
3454 </ul>
3445
3455
3446 </div>
3456 </div>
3447 </div>
3457 </div>
3448 </div>
3458 </div>
3449
3459
3450
3460
3451
3461
3452 </body>
3462 </body>
3453 </html>
3463 </html>
3454
3464
3455
3465
3456 $ get-with-headers.py $LOCALIP:$HGPORT "help/pager"
3466 $ get-with-headers.py $LOCALIP:$HGPORT "help/pager"
3457 200 Script output follows
3467 200 Script output follows
3458
3468
3459 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3469 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3460 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3470 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3461 <head>
3471 <head>
3462 <link rel="icon" href="/static/hgicon.png" type="image/png" />
3472 <link rel="icon" href="/static/hgicon.png" type="image/png" />
3463 <meta name="robots" content="index, nofollow" />
3473 <meta name="robots" content="index, nofollow" />
3464 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
3474 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
3465 <script type="text/javascript" src="/static/mercurial.js"></script>
3475 <script type="text/javascript" src="/static/mercurial.js"></script>
3466
3476
3467 <title>Help: pager</title>
3477 <title>Help: pager</title>
3468 </head>
3478 </head>
3469 <body>
3479 <body>
3470
3480
3471 <div class="container">
3481 <div class="container">
3472 <div class="menu">
3482 <div class="menu">
3473 <div class="logo">
3483 <div class="logo">
3474 <a href="https://mercurial-scm.org/">
3484 <a href="https://mercurial-scm.org/">
3475 <img src="/static/hglogo.png" alt="mercurial" /></a>
3485 <img src="/static/hglogo.png" alt="mercurial" /></a>
3476 </div>
3486 </div>
3477 <ul>
3487 <ul>
3478 <li><a href="/shortlog">log</a></li>
3488 <li><a href="/shortlog">log</a></li>
3479 <li><a href="/graph">graph</a></li>
3489 <li><a href="/graph">graph</a></li>
3480 <li><a href="/tags">tags</a></li>
3490 <li><a href="/tags">tags</a></li>
3481 <li><a href="/bookmarks">bookmarks</a></li>
3491 <li><a href="/bookmarks">bookmarks</a></li>
3482 <li><a href="/branches">branches</a></li>
3492 <li><a href="/branches">branches</a></li>
3483 </ul>
3493 </ul>
3484 <ul>
3494 <ul>
3485 <li class="active"><a href="/help">help</a></li>
3495 <li class="active"><a href="/help">help</a></li>
3486 </ul>
3496 </ul>
3487 </div>
3497 </div>
3488
3498
3489 <div class="main">
3499 <div class="main">
3490 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3500 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3491 <h3>Help: pager</h3>
3501 <h3>Help: pager</h3>
3492
3502
3493 <form class="search" action="/log">
3503 <form class="search" action="/log">
3494
3504
3495 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3505 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3496 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3506 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3497 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3507 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3498 </form>
3508 </form>
3499 <div id="doc">
3509 <div id="doc">
3500 <h1>Pager Support</h1>
3510 <h1>Pager Support</h1>
3501 <p>
3511 <p>
3502 Some Mercurial commands can produce a lot of output, and Mercurial will
3512 Some Mercurial commands can produce a lot of output, and Mercurial will
3503 attempt to use a pager to make those commands more pleasant.
3513 attempt to use a pager to make those commands more pleasant.
3504 </p>
3514 </p>
3505 <p>
3515 <p>
3506 To set the pager that should be used, set the application variable:
3516 To set the pager that should be used, set the application variable:
3507 </p>
3517 </p>
3508 <pre>
3518 <pre>
3509 [pager]
3519 [pager]
3510 pager = less -FRX
3520 pager = less -FRX
3511 </pre>
3521 </pre>
3512 <p>
3522 <p>
3513 If no pager is set in the user or repository configuration, Mercurial uses the
3523 If no pager is set in the user or repository configuration, Mercurial uses the
3514 environment variable $PAGER. If $PAGER is not set, pager.pager from the default
3524 environment variable $PAGER. If $PAGER is not set, pager.pager from the default
3515 or system configuration is used. If none of these are set, a default pager will
3525 or system configuration is used. If none of these are set, a default pager will
3516 be used, typically 'less' on Unix and 'more' on Windows.
3526 be used, typically 'less' on Unix and 'more' on Windows.
3517 </p>
3527 </p>
3518 <p>
3528 <p>
3519 You can disable the pager for certain commands by adding them to the
3529 You can disable the pager for certain commands by adding them to the
3520 pager.ignore list:
3530 pager.ignore list:
3521 </p>
3531 </p>
3522 <pre>
3532 <pre>
3523 [pager]
3533 [pager]
3524 ignore = version, help, update
3534 ignore = version, help, update
3525 </pre>
3535 </pre>
3526 <p>
3536 <p>
3527 To ignore global commands like 'hg version' or 'hg help', you have
3537 To ignore global commands like 'hg version' or 'hg help', you have
3528 to specify them in your user configuration file.
3538 to specify them in your user configuration file.
3529 </p>
3539 </p>
3530 <p>
3540 <p>
3531 To control whether the pager is used at all for an individual command,
3541 To control whether the pager is used at all for an individual command,
3532 you can use --pager=&lt;value&gt;:
3542 you can use --pager=&lt;value&gt;:
3533 </p>
3543 </p>
3534 <ul>
3544 <ul>
3535 <li> use as needed: 'auto'.
3545 <li> use as needed: 'auto'.
3536 <li> require the pager: 'yes' or 'on'.
3546 <li> require the pager: 'yes' or 'on'.
3537 <li> suppress the pager: 'no' or 'off' (any unrecognized value will also work).
3547 <li> suppress the pager: 'no' or 'off' (any unrecognized value will also work).
3538 </ul>
3548 </ul>
3539 <p>
3549 <p>
3540 To globally turn off all attempts to use a pager, set:
3550 To globally turn off all attempts to use a pager, set:
3541 </p>
3551 </p>
3542 <pre>
3552 <pre>
3543 [ui]
3553 [ui]
3544 paginate = never
3554 paginate = never
3545 </pre>
3555 </pre>
3546 <p>
3556 <p>
3547 which will prevent the pager from running.
3557 which will prevent the pager from running.
3548 </p>
3558 </p>
3549
3559
3550 </div>
3560 </div>
3551 </div>
3561 </div>
3552 </div>
3562 </div>
3553
3563
3554
3564
3555
3565
3556 </body>
3566 </body>
3557 </html>
3567 </html>
3558
3568
3559
3569
3560 Sub-topic indexes rendered properly
3570 Sub-topic indexes rendered properly
3561
3571
3562 $ get-with-headers.py $LOCALIP:$HGPORT "help/internals"
3572 $ get-with-headers.py $LOCALIP:$HGPORT "help/internals"
3563 200 Script output follows
3573 200 Script output follows
3564
3574
3565 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3575 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3566 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3576 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3567 <head>
3577 <head>
3568 <link rel="icon" href="/static/hgicon.png" type="image/png" />
3578 <link rel="icon" href="/static/hgicon.png" type="image/png" />
3569 <meta name="robots" content="index, nofollow" />
3579 <meta name="robots" content="index, nofollow" />
3570 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
3580 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
3571 <script type="text/javascript" src="/static/mercurial.js"></script>
3581 <script type="text/javascript" src="/static/mercurial.js"></script>
3572
3582
3573 <title>Help: internals</title>
3583 <title>Help: internals</title>
3574 </head>
3584 </head>
3575 <body>
3585 <body>
3576
3586
3577 <div class="container">
3587 <div class="container">
3578 <div class="menu">
3588 <div class="menu">
3579 <div class="logo">
3589 <div class="logo">
3580 <a href="https://mercurial-scm.org/">
3590 <a href="https://mercurial-scm.org/">
3581 <img src="/static/hglogo.png" alt="mercurial" /></a>
3591 <img src="/static/hglogo.png" alt="mercurial" /></a>
3582 </div>
3592 </div>
3583 <ul>
3593 <ul>
3584 <li><a href="/shortlog">log</a></li>
3594 <li><a href="/shortlog">log</a></li>
3585 <li><a href="/graph">graph</a></li>
3595 <li><a href="/graph">graph</a></li>
3586 <li><a href="/tags">tags</a></li>
3596 <li><a href="/tags">tags</a></li>
3587 <li><a href="/bookmarks">bookmarks</a></li>
3597 <li><a href="/bookmarks">bookmarks</a></li>
3588 <li><a href="/branches">branches</a></li>
3598 <li><a href="/branches">branches</a></li>
3589 </ul>
3599 </ul>
3590 <ul>
3600 <ul>
3591 <li><a href="/help">help</a></li>
3601 <li><a href="/help">help</a></li>
3592 </ul>
3602 </ul>
3593 </div>
3603 </div>
3594
3604
3595 <div class="main">
3605 <div class="main">
3596 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3606 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3597
3607
3598 <form class="search" action="/log">
3608 <form class="search" action="/log">
3599
3609
3600 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3610 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3601 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3611 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3602 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3612 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3603 </form>
3613 </form>
3604 <table class="bigtable">
3614 <table class="bigtable">
3605 <tr><td colspan="2"><h2><a name="topics" href="#topics">Topics</a></h2></td></tr>
3615 <tr><td colspan="2"><h2><a name="topics" href="#topics">Topics</a></h2></td></tr>
3606
3616
3607 <tr><td>
3617 <tr><td>
3608 <a href="/help/internals.bid-merge">
3618 <a href="/help/internals.bid-merge">
3609 bid-merge
3619 bid-merge
3610 </a>
3620 </a>
3611 </td><td>
3621 </td><td>
3612 Bid Merge Algorithm
3622 Bid Merge Algorithm
3613 </td></tr>
3623 </td></tr>
3614 <tr><td>
3624 <tr><td>
3615 <a href="/help/internals.bundle2">
3625 <a href="/help/internals.bundle2">
3616 bundle2
3626 bundle2
3617 </a>
3627 </a>
3618 </td><td>
3628 </td><td>
3619 Bundle2
3629 Bundle2
3620 </td></tr>
3630 </td></tr>
3621 <tr><td>
3631 <tr><td>
3622 <a href="/help/internals.bundles">
3632 <a href="/help/internals.bundles">
3623 bundles
3633 bundles
3624 </a>
3634 </a>
3625 </td><td>
3635 </td><td>
3626 Bundles
3636 Bundles
3627 </td></tr>
3637 </td></tr>
3628 <tr><td>
3638 <tr><td>
3629 <a href="/help/internals.cbor">
3639 <a href="/help/internals.cbor">
3630 cbor
3640 cbor
3631 </a>
3641 </a>
3632 </td><td>
3642 </td><td>
3633 CBOR
3643 CBOR
3634 </td></tr>
3644 </td></tr>
3635 <tr><td>
3645 <tr><td>
3636 <a href="/help/internals.censor">
3646 <a href="/help/internals.censor">
3637 censor
3647 censor
3638 </a>
3648 </a>
3639 </td><td>
3649 </td><td>
3640 Censor
3650 Censor
3641 </td></tr>
3651 </td></tr>
3642 <tr><td>
3652 <tr><td>
3643 <a href="/help/internals.changegroups">
3653 <a href="/help/internals.changegroups">
3644 changegroups
3654 changegroups
3645 </a>
3655 </a>
3646 </td><td>
3656 </td><td>
3647 Changegroups
3657 Changegroups
3648 </td></tr>
3658 </td></tr>
3649 <tr><td>
3659 <tr><td>
3650 <a href="/help/internals.config">
3660 <a href="/help/internals.config">
3651 config
3661 config
3652 </a>
3662 </a>
3653 </td><td>
3663 </td><td>
3654 Config Registrar
3664 Config Registrar
3655 </td></tr>
3665 </td></tr>
3656 <tr><td>
3666 <tr><td>
3657 <a href="/help/internals.dirstate-v2">
3667 <a href="/help/internals.dirstate-v2">
3658 dirstate-v2
3668 dirstate-v2
3659 </a>
3669 </a>
3660 </td><td>
3670 </td><td>
3661 dirstate-v2 file format
3671 dirstate-v2 file format
3662 </td></tr>
3672 </td></tr>
3663 <tr><td>
3673 <tr><td>
3664 <a href="/help/internals.extensions">
3674 <a href="/help/internals.extensions">
3665 extensions
3675 extensions
3666 </a>
3676 </a>
3667 </td><td>
3677 </td><td>
3668 Extension API
3678 Extension API
3669 </td></tr>
3679 </td></tr>
3670 <tr><td>
3680 <tr><td>
3671 <a href="/help/internals.mergestate">
3681 <a href="/help/internals.mergestate">
3672 mergestate
3682 mergestate
3673 </a>
3683 </a>
3674 </td><td>
3684 </td><td>
3675 Mergestate
3685 Mergestate
3676 </td></tr>
3686 </td></tr>
3677 <tr><td>
3687 <tr><td>
3678 <a href="/help/internals.requirements">
3688 <a href="/help/internals.requirements">
3679 requirements
3689 requirements
3680 </a>
3690 </a>
3681 </td><td>
3691 </td><td>
3682 Repository Requirements
3692 Repository Requirements
3683 </td></tr>
3693 </td></tr>
3684 <tr><td>
3694 <tr><td>
3685 <a href="/help/internals.revlogs">
3695 <a href="/help/internals.revlogs">
3686 revlogs
3696 revlogs
3687 </a>
3697 </a>
3688 </td><td>
3698 </td><td>
3689 Revision Logs
3699 Revision Logs
3690 </td></tr>
3700 </td></tr>
3691 <tr><td>
3701 <tr><td>
3692 <a href="/help/internals.wireprotocol">
3702 <a href="/help/internals.wireprotocol">
3693 wireprotocol
3703 wireprotocol
3694 </a>
3704 </a>
3695 </td><td>
3705 </td><td>
3696 Wire Protocol
3706 Wire Protocol
3697 </td></tr>
3707 </td></tr>
3698 <tr><td>
3708 <tr><td>
3699 <a href="/help/internals.wireprotocolrpc">
3709 <a href="/help/internals.wireprotocolrpc">
3700 wireprotocolrpc
3710 wireprotocolrpc
3701 </a>
3711 </a>
3702 </td><td>
3712 </td><td>
3703 Wire Protocol RPC
3713 Wire Protocol RPC
3704 </td></tr>
3714 </td></tr>
3705 <tr><td>
3715 <tr><td>
3706 <a href="/help/internals.wireprotocolv2">
3716 <a href="/help/internals.wireprotocolv2">
3707 wireprotocolv2
3717 wireprotocolv2
3708 </a>
3718 </a>
3709 </td><td>
3719 </td><td>
3710 Wire Protocol Version 2
3720 Wire Protocol Version 2
3711 </td></tr>
3721 </td></tr>
3712
3722
3713
3723
3714
3724
3715
3725
3716
3726
3717 </table>
3727 </table>
3718 </div>
3728 </div>
3719 </div>
3729 </div>
3720
3730
3721
3731
3722
3732
3723 </body>
3733 </body>
3724 </html>
3734 </html>
3725
3735
3726
3736
3727 Sub-topic topics rendered properly
3737 Sub-topic topics rendered properly
3728
3738
3729 $ get-with-headers.py $LOCALIP:$HGPORT "help/internals.changegroups"
3739 $ get-with-headers.py $LOCALIP:$HGPORT "help/internals.changegroups"
3730 200 Script output follows
3740 200 Script output follows
3731
3741
3732 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3742 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3733 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3743 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3734 <head>
3744 <head>
3735 <link rel="icon" href="/static/hgicon.png" type="image/png" />
3745 <link rel="icon" href="/static/hgicon.png" type="image/png" />
3736 <meta name="robots" content="index, nofollow" />
3746 <meta name="robots" content="index, nofollow" />
3737 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
3747 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
3738 <script type="text/javascript" src="/static/mercurial.js"></script>
3748 <script type="text/javascript" src="/static/mercurial.js"></script>
3739
3749
3740 <title>Help: internals.changegroups</title>
3750 <title>Help: internals.changegroups</title>
3741 </head>
3751 </head>
3742 <body>
3752 <body>
3743
3753
3744 <div class="container">
3754 <div class="container">
3745 <div class="menu">
3755 <div class="menu">
3746 <div class="logo">
3756 <div class="logo">
3747 <a href="https://mercurial-scm.org/">
3757 <a href="https://mercurial-scm.org/">
3748 <img src="/static/hglogo.png" alt="mercurial" /></a>
3758 <img src="/static/hglogo.png" alt="mercurial" /></a>
3749 </div>
3759 </div>
3750 <ul>
3760 <ul>
3751 <li><a href="/shortlog">log</a></li>
3761 <li><a href="/shortlog">log</a></li>
3752 <li><a href="/graph">graph</a></li>
3762 <li><a href="/graph">graph</a></li>
3753 <li><a href="/tags">tags</a></li>
3763 <li><a href="/tags">tags</a></li>
3754 <li><a href="/bookmarks">bookmarks</a></li>
3764 <li><a href="/bookmarks">bookmarks</a></li>
3755 <li><a href="/branches">branches</a></li>
3765 <li><a href="/branches">branches</a></li>
3756 </ul>
3766 </ul>
3757 <ul>
3767 <ul>
3758 <li class="active"><a href="/help">help</a></li>
3768 <li class="active"><a href="/help">help</a></li>
3759 </ul>
3769 </ul>
3760 </div>
3770 </div>
3761
3771
3762 <div class="main">
3772 <div class="main">
3763 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3773 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3764 <h3>Help: internals.changegroups</h3>
3774 <h3>Help: internals.changegroups</h3>
3765
3775
3766 <form class="search" action="/log">
3776 <form class="search" action="/log">
3767
3777
3768 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3778 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
3769 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3779 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3770 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3780 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3771 </form>
3781 </form>
3772 <div id="doc">
3782 <div id="doc">
3773 <h1>Changegroups</h1>
3783 <h1>Changegroups</h1>
3774 <p>
3784 <p>
3775 Changegroups are representations of repository revlog data, specifically
3785 Changegroups are representations of repository revlog data, specifically
3776 the changelog data, root/flat manifest data, treemanifest data, and
3786 the changelog data, root/flat manifest data, treemanifest data, and
3777 filelogs.
3787 filelogs.
3778 </p>
3788 </p>
3779 <p>
3789 <p>
3780 There are 4 versions of changegroups: &quot;1&quot;, &quot;2&quot;, &quot;3&quot; and &quot;4&quot;. From a
3790 There are 4 versions of changegroups: &quot;1&quot;, &quot;2&quot;, &quot;3&quot; and &quot;4&quot;. From a
3781 high-level, versions &quot;1&quot; and &quot;2&quot; are almost exactly the same, with the
3791 high-level, versions &quot;1&quot; and &quot;2&quot; are almost exactly the same, with the
3782 only difference being an additional item in the *delta header*. Version
3792 only difference being an additional item in the *delta header*. Version
3783 &quot;3&quot; adds support for storage flags in the *delta header* and optionally
3793 &quot;3&quot; adds support for storage flags in the *delta header* and optionally
3784 exchanging treemanifests (enabled by setting an option on the
3794 exchanging treemanifests (enabled by setting an option on the
3785 &quot;changegroup&quot; part in the bundle2). Version &quot;4&quot; adds support for exchanging
3795 &quot;changegroup&quot; part in the bundle2). Version &quot;4&quot; adds support for exchanging
3786 sidedata (additional revision metadata not part of the digest).
3796 sidedata (additional revision metadata not part of the digest).
3787 </p>
3797 </p>
3788 <p>
3798 <p>
3789 Changegroups when not exchanging treemanifests consist of 3 logical
3799 Changegroups when not exchanging treemanifests consist of 3 logical
3790 segments:
3800 segments:
3791 </p>
3801 </p>
3792 <pre>
3802 <pre>
3793 +---------------------------------+
3803 +---------------------------------+
3794 | | | |
3804 | | | |
3795 | changeset | manifest | filelogs |
3805 | changeset | manifest | filelogs |
3796 | | | |
3806 | | | |
3797 | | | |
3807 | | | |
3798 +---------------------------------+
3808 +---------------------------------+
3799 </pre>
3809 </pre>
3800 <p>
3810 <p>
3801 When exchanging treemanifests, there are 4 logical segments:
3811 When exchanging treemanifests, there are 4 logical segments:
3802 </p>
3812 </p>
3803 <pre>
3813 <pre>
3804 +-------------------------------------------------+
3814 +-------------------------------------------------+
3805 | | | | |
3815 | | | | |
3806 | changeset | root | treemanifests | filelogs |
3816 | changeset | root | treemanifests | filelogs |
3807 | | manifest | | |
3817 | | manifest | | |
3808 | | | | |
3818 | | | | |
3809 +-------------------------------------------------+
3819 +-------------------------------------------------+
3810 </pre>
3820 </pre>
3811 <p>
3821 <p>
3812 The principle building block of each segment is a *chunk*. A *chunk*
3822 The principle building block of each segment is a *chunk*. A *chunk*
3813 is a framed piece of data:
3823 is a framed piece of data:
3814 </p>
3824 </p>
3815 <pre>
3825 <pre>
3816 +---------------------------------------+
3826 +---------------------------------------+
3817 | | |
3827 | | |
3818 | length | data |
3828 | length | data |
3819 | (4 bytes) | (&lt;length - 4&gt; bytes) |
3829 | (4 bytes) | (&lt;length - 4&gt; bytes) |
3820 | | |
3830 | | |
3821 +---------------------------------------+
3831 +---------------------------------------+
3822 </pre>
3832 </pre>
3823 <p>
3833 <p>
3824 All integers are big-endian signed integers. Each chunk starts with a 32-bit
3834 All integers are big-endian signed integers. Each chunk starts with a 32-bit
3825 integer indicating the length of the entire chunk (including the length field
3835 integer indicating the length of the entire chunk (including the length field
3826 itself).
3836 itself).
3827 </p>
3837 </p>
3828 <p>
3838 <p>
3829 There is a special case chunk that has a value of 0 for the length
3839 There is a special case chunk that has a value of 0 for the length
3830 (&quot;0x00000000&quot;). We call this an *empty chunk*.
3840 (&quot;0x00000000&quot;). We call this an *empty chunk*.
3831 </p>
3841 </p>
3832 <h2>Delta Groups</h2>
3842 <h2>Delta Groups</h2>
3833 <p>
3843 <p>
3834 A *delta group* expresses the content of a revlog as a series of deltas,
3844 A *delta group* expresses the content of a revlog as a series of deltas,
3835 or patches against previous revisions.
3845 or patches against previous revisions.
3836 </p>
3846 </p>
3837 <p>
3847 <p>
3838 Delta groups consist of 0 or more *chunks* followed by the *empty chunk*
3848 Delta groups consist of 0 or more *chunks* followed by the *empty chunk*
3839 to signal the end of the delta group:
3849 to signal the end of the delta group:
3840 </p>
3850 </p>
3841 <pre>
3851 <pre>
3842 +------------------------------------------------------------------------+
3852 +------------------------------------------------------------------------+
3843 | | | | | |
3853 | | | | | |
3844 | chunk0 length | chunk0 data | chunk1 length | chunk1 data | 0x0 |
3854 | chunk0 length | chunk0 data | chunk1 length | chunk1 data | 0x0 |
3845 | (4 bytes) | (various) | (4 bytes) | (various) | (4 bytes) |
3855 | (4 bytes) | (various) | (4 bytes) | (various) | (4 bytes) |
3846 | | | | | |
3856 | | | | | |
3847 +------------------------------------------------------------------------+
3857 +------------------------------------------------------------------------+
3848 </pre>
3858 </pre>
3849 <p>
3859 <p>
3850 Each *chunk*'s data consists of the following:
3860 Each *chunk*'s data consists of the following:
3851 </p>
3861 </p>
3852 <pre>
3862 <pre>
3853 +---------------------------------------+
3863 +---------------------------------------+
3854 | | |
3864 | | |
3855 | delta header | delta data |
3865 | delta header | delta data |
3856 | (various by version) | (various) |
3866 | (various by version) | (various) |
3857 | | |
3867 | | |
3858 +---------------------------------------+
3868 +---------------------------------------+
3859 </pre>
3869 </pre>
3860 <p>
3870 <p>
3861 The *delta data* is a series of *delta*s that describe a diff from an existing
3871 The *delta data* is a series of *delta*s that describe a diff from an existing
3862 entry (either that the recipient already has, or previously specified in the
3872 entry (either that the recipient already has, or previously specified in the
3863 bundle/changegroup).
3873 bundle/changegroup).
3864 </p>
3874 </p>
3865 <p>
3875 <p>
3866 The *delta header* is different between versions &quot;1&quot;, &quot;2&quot;, &quot;3&quot; and &quot;4&quot;
3876 The *delta header* is different between versions &quot;1&quot;, &quot;2&quot;, &quot;3&quot; and &quot;4&quot;
3867 of the changegroup format.
3877 of the changegroup format.
3868 </p>
3878 </p>
3869 <p>
3879 <p>
3870 Version 1 (headerlen=80):
3880 Version 1 (headerlen=80):
3871 </p>
3881 </p>
3872 <pre>
3882 <pre>
3873 +------------------------------------------------------+
3883 +------------------------------------------------------+
3874 | | | | |
3884 | | | | |
3875 | node | p1 node | p2 node | link node |
3885 | node | p1 node | p2 node | link node |
3876 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
3886 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
3877 | | | | |
3887 | | | | |
3878 +------------------------------------------------------+
3888 +------------------------------------------------------+
3879 </pre>
3889 </pre>
3880 <p>
3890 <p>
3881 Version 2 (headerlen=100):
3891 Version 2 (headerlen=100):
3882 </p>
3892 </p>
3883 <pre>
3893 <pre>
3884 +------------------------------------------------------------------+
3894 +------------------------------------------------------------------+
3885 | | | | | |
3895 | | | | | |
3886 | node | p1 node | p2 node | base node | link node |
3896 | node | p1 node | p2 node | base node | link node |
3887 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
3897 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
3888 | | | | | |
3898 | | | | | |
3889 +------------------------------------------------------------------+
3899 +------------------------------------------------------------------+
3890 </pre>
3900 </pre>
3891 <p>
3901 <p>
3892 Version 3 (headerlen=102):
3902 Version 3 (headerlen=102):
3893 </p>
3903 </p>
3894 <pre>
3904 <pre>
3895 +------------------------------------------------------------------------------+
3905 +------------------------------------------------------------------------------+
3896 | | | | | | |
3906 | | | | | | |
3897 | node | p1 node | p2 node | base node | link node | flags |
3907 | node | p1 node | p2 node | base node | link node | flags |
3898 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (2 bytes) |
3908 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (2 bytes) |
3899 | | | | | | |
3909 | | | | | | |
3900 +------------------------------------------------------------------------------+
3910 +------------------------------------------------------------------------------+
3901 </pre>
3911 </pre>
3902 <p>
3912 <p>
3903 Version 4 (headerlen=103):
3913 Version 4 (headerlen=103):
3904 </p>
3914 </p>
3905 <pre>
3915 <pre>
3906 +------------------------------------------------------------------------------+----------+
3916 +------------------------------------------------------------------------------+----------+
3907 | | | | | | | |
3917 | | | | | | | |
3908 | node | p1 node | p2 node | base node | link node | flags | pflags |
3918 | node | p1 node | p2 node | base node | link node | flags | pflags |
3909 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (2 bytes) | (1 byte) |
3919 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (2 bytes) | (1 byte) |
3910 | | | | | | | |
3920 | | | | | | | |
3911 +------------------------------------------------------------------------------+----------+
3921 +------------------------------------------------------------------------------+----------+
3912 </pre>
3922 </pre>
3913 <p>
3923 <p>
3914 The *delta data* consists of &quot;chunklen - 4 - headerlen&quot; bytes, which contain a
3924 The *delta data* consists of &quot;chunklen - 4 - headerlen&quot; bytes, which contain a
3915 series of *delta*s, densely packed (no separators). These deltas describe a diff
3925 series of *delta*s, densely packed (no separators). These deltas describe a diff
3916 from an existing entry (either that the recipient already has, or previously
3926 from an existing entry (either that the recipient already has, or previously
3917 specified in the bundle/changegroup). The format is described more fully in
3927 specified in the bundle/changegroup). The format is described more fully in
3918 &quot;hg help internals.bdiff&quot;, but briefly:
3928 &quot;hg help internals.bdiff&quot;, but briefly:
3919 </p>
3929 </p>
3920 <pre>
3930 <pre>
3921 +---------------------------------------------------------------+
3931 +---------------------------------------------------------------+
3922 | | | | |
3932 | | | | |
3923 | start offset | end offset | new length | content |
3933 | start offset | end offset | new length | content |
3924 | (4 bytes) | (4 bytes) | (4 bytes) | (&lt;new length&gt; bytes) |
3934 | (4 bytes) | (4 bytes) | (4 bytes) | (&lt;new length&gt; bytes) |
3925 | | | | |
3935 | | | | |
3926 +---------------------------------------------------------------+
3936 +---------------------------------------------------------------+
3927 </pre>
3937 </pre>
3928 <p>
3938 <p>
3929 Please note that the length field in the delta data does *not* include itself.
3939 Please note that the length field in the delta data does *not* include itself.
3930 </p>
3940 </p>
3931 <p>
3941 <p>
3932 In version 1, the delta is always applied against the previous node from
3942 In version 1, the delta is always applied against the previous node from
3933 the changegroup or the first parent if this is the first entry in the
3943 the changegroup or the first parent if this is the first entry in the
3934 changegroup.
3944 changegroup.
3935 </p>
3945 </p>
3936 <p>
3946 <p>
3937 In version 2 and up, the delta base node is encoded in the entry in the
3947 In version 2 and up, the delta base node is encoded in the entry in the
3938 changegroup. This allows the delta to be expressed against any parent,
3948 changegroup. This allows the delta to be expressed against any parent,
3939 which can result in smaller deltas and more efficient encoding of data.
3949 which can result in smaller deltas and more efficient encoding of data.
3940 </p>
3950 </p>
3941 <p>
3951 <p>
3942 The *flags* field holds bitwise flags affecting the processing of revision
3952 The *flags* field holds bitwise flags affecting the processing of revision
3943 data. The following flags are defined:
3953 data. The following flags are defined:
3944 </p>
3954 </p>
3945 <dl>
3955 <dl>
3946 <dt>32768
3956 <dt>32768
3947 <dd>Censored revision. The revision's fulltext has been replaced by censor metadata. May only occur on file revisions.
3957 <dd>Censored revision. The revision's fulltext has been replaced by censor metadata. May only occur on file revisions.
3948 <dt>16384
3958 <dt>16384
3949 <dd>Ellipsis revision. Revision hash does not match data (likely due to rewritten parents).
3959 <dd>Ellipsis revision. Revision hash does not match data (likely due to rewritten parents).
3950 <dt>8192
3960 <dt>8192
3951 <dd>Externally stored. The revision fulltext contains &quot;key:value&quot; &quot;\n&quot; delimited metadata defining an object stored elsewhere. Used by the LFS extension.
3961 <dd>Externally stored. The revision fulltext contains &quot;key:value&quot; &quot;\n&quot; delimited metadata defining an object stored elsewhere. Used by the LFS extension.
3952 <dt>4096
3962 <dt>4096
3953 <dd>Contains copy information. This revision changes files in a way that could affect copy tracing. This does *not* affect changegroup handling, but is relevant for other parts of Mercurial.
3963 <dd>Contains copy information. This revision changes files in a way that could affect copy tracing. This does *not* affect changegroup handling, but is relevant for other parts of Mercurial.
3954 </dl>
3964 </dl>
3955 <p>
3965 <p>
3956 For historical reasons, the integer values are identical to revlog version 1
3966 For historical reasons, the integer values are identical to revlog version 1
3957 per-revision storage flags and correspond to bits being set in this 2-byte
3967 per-revision storage flags and correspond to bits being set in this 2-byte
3958 field. Bits were allocated starting from the most-significant bit, hence the
3968 field. Bits were allocated starting from the most-significant bit, hence the
3959 reverse ordering and allocation of these flags.
3969 reverse ordering and allocation of these flags.
3960 </p>
3970 </p>
3961 <p>
3971 <p>
3962 The *pflags* (protocol flags) field holds bitwise flags affecting the protocol
3972 The *pflags* (protocol flags) field holds bitwise flags affecting the protocol
3963 itself. They are first in the header since they may affect the handling of the
3973 itself. They are first in the header since they may affect the handling of the
3964 rest of the fields in a future version. They are defined as such:
3974 rest of the fields in a future version. They are defined as such:
3965 </p>
3975 </p>
3966 <dl>
3976 <dl>
3967 <dt>1 indicates whether to read a chunk of sidedata (of variable length) right
3977 <dt>1 indicates whether to read a chunk of sidedata (of variable length) right
3968 <dd>after the revision flags.
3978 <dd>after the revision flags.
3969 </dl>
3979 </dl>
3970 <h2>Changeset Segment</h2>
3980 <h2>Changeset Segment</h2>
3971 <p>
3981 <p>
3972 The *changeset segment* consists of a single *delta group* holding
3982 The *changeset segment* consists of a single *delta group* holding
3973 changelog data. The *empty chunk* at the end of the *delta group* denotes
3983 changelog data. The *empty chunk* at the end of the *delta group* denotes
3974 the boundary to the *manifest segment*.
3984 the boundary to the *manifest segment*.
3975 </p>
3985 </p>
3976 <h2>Manifest Segment</h2>
3986 <h2>Manifest Segment</h2>
3977 <p>
3987 <p>
3978 The *manifest segment* consists of a single *delta group* holding manifest
3988 The *manifest segment* consists of a single *delta group* holding manifest
3979 data. If treemanifests are in use, it contains only the manifest for the
3989 data. If treemanifests are in use, it contains only the manifest for the
3980 root directory of the repository. Otherwise, it contains the entire
3990 root directory of the repository. Otherwise, it contains the entire
3981 manifest data. The *empty chunk* at the end of the *delta group* denotes
3991 manifest data. The *empty chunk* at the end of the *delta group* denotes
3982 the boundary to the next segment (either the *treemanifests segment* or the
3992 the boundary to the next segment (either the *treemanifests segment* or the
3983 *filelogs segment*, depending on version and the request options).
3993 *filelogs segment*, depending on version and the request options).
3984 </p>
3994 </p>
3985 <h3>Treemanifests Segment</h3>
3995 <h3>Treemanifests Segment</h3>
3986 <p>
3996 <p>
3987 The *treemanifests segment* only exists in changegroup version &quot;3&quot; and &quot;4&quot;,
3997 The *treemanifests segment* only exists in changegroup version &quot;3&quot; and &quot;4&quot;,
3988 and only if the 'treemanifest' param is part of the bundle2 changegroup part
3998 and only if the 'treemanifest' param is part of the bundle2 changegroup part
3989 (it is not possible to use changegroup version 3 or 4 outside of bundle2).
3999 (it is not possible to use changegroup version 3 or 4 outside of bundle2).
3990 Aside from the filenames in the *treemanifests segment* containing a
4000 Aside from the filenames in the *treemanifests segment* containing a
3991 trailing &quot;/&quot; character, it behaves identically to the *filelogs segment*
4001 trailing &quot;/&quot; character, it behaves identically to the *filelogs segment*
3992 (see below). The final sub-segment is followed by an *empty chunk* (logically,
4002 (see below). The final sub-segment is followed by an *empty chunk* (logically,
3993 a sub-segment with filename size 0). This denotes the boundary to the
4003 a sub-segment with filename size 0). This denotes the boundary to the
3994 *filelogs segment*.
4004 *filelogs segment*.
3995 </p>
4005 </p>
3996 <h2>Filelogs Segment</h2>
4006 <h2>Filelogs Segment</h2>
3997 <p>
4007 <p>
3998 The *filelogs segment* consists of multiple sub-segments, each
4008 The *filelogs segment* consists of multiple sub-segments, each
3999 corresponding to an individual file whose data is being described:
4009 corresponding to an individual file whose data is being described:
4000 </p>
4010 </p>
4001 <pre>
4011 <pre>
4002 +--------------------------------------------------+
4012 +--------------------------------------------------+
4003 | | | | | |
4013 | | | | | |
4004 | filelog0 | filelog1 | filelog2 | ... | 0x0 |
4014 | filelog0 | filelog1 | filelog2 | ... | 0x0 |
4005 | | | | | (4 bytes) |
4015 | | | | | (4 bytes) |
4006 | | | | | |
4016 | | | | | |
4007 +--------------------------------------------------+
4017 +--------------------------------------------------+
4008 </pre>
4018 </pre>
4009 <p>
4019 <p>
4010 The final filelog sub-segment is followed by an *empty chunk* (logically,
4020 The final filelog sub-segment is followed by an *empty chunk* (logically,
4011 a sub-segment with filename size 0). This denotes the end of the segment
4021 a sub-segment with filename size 0). This denotes the end of the segment
4012 and of the overall changegroup.
4022 and of the overall changegroup.
4013 </p>
4023 </p>
4014 <p>
4024 <p>
4015 Each filelog sub-segment consists of the following:
4025 Each filelog sub-segment consists of the following:
4016 </p>
4026 </p>
4017 <pre>
4027 <pre>
4018 +------------------------------------------------------+
4028 +------------------------------------------------------+
4019 | | | |
4029 | | | |
4020 | filename length | filename | delta group |
4030 | filename length | filename | delta group |
4021 | (4 bytes) | (&lt;length - 4&gt; bytes) | (various) |
4031 | (4 bytes) | (&lt;length - 4&gt; bytes) | (various) |
4022 | | | |
4032 | | | |
4023 +------------------------------------------------------+
4033 +------------------------------------------------------+
4024 </pre>
4034 </pre>
4025 <p>
4035 <p>
4026 That is, a *chunk* consisting of the filename (not terminated or padded)
4036 That is, a *chunk* consisting of the filename (not terminated or padded)
4027 followed by N chunks constituting the *delta group* for this file. The
4037 followed by N chunks constituting the *delta group* for this file. The
4028 *empty chunk* at the end of each *delta group* denotes the boundary to the
4038 *empty chunk* at the end of each *delta group* denotes the boundary to the
4029 next filelog sub-segment.
4039 next filelog sub-segment.
4030 </p>
4040 </p>
4031
4041
4032 </div>
4042 </div>
4033 </div>
4043 </div>
4034 </div>
4044 </div>
4035
4045
4036
4046
4037
4047
4038 </body>
4048 </body>
4039 </html>
4049 </html>
4040
4050
4041
4051
4042 $ get-with-headers.py 127.0.0.1:$HGPORT "help/unknowntopic"
4052 $ get-with-headers.py 127.0.0.1:$HGPORT "help/unknowntopic"
4043 404 Not Found
4053 404 Not Found
4044
4054
4045 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
4055 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
4046 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
4056 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
4047 <head>
4057 <head>
4048 <link rel="icon" href="/static/hgicon.png" type="image/png" />
4058 <link rel="icon" href="/static/hgicon.png" type="image/png" />
4049 <meta name="robots" content="index, nofollow" />
4059 <meta name="robots" content="index, nofollow" />
4050 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
4060 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
4051 <script type="text/javascript" src="/static/mercurial.js"></script>
4061 <script type="text/javascript" src="/static/mercurial.js"></script>
4052
4062
4053 <title>test: error</title>
4063 <title>test: error</title>
4054 </head>
4064 </head>
4055 <body>
4065 <body>
4056
4066
4057 <div class="container">
4067 <div class="container">
4058 <div class="menu">
4068 <div class="menu">
4059 <div class="logo">
4069 <div class="logo">
4060 <a href="https://mercurial-scm.org/">
4070 <a href="https://mercurial-scm.org/">
4061 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
4071 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
4062 </div>
4072 </div>
4063 <ul>
4073 <ul>
4064 <li><a href="/shortlog">log</a></li>
4074 <li><a href="/shortlog">log</a></li>
4065 <li><a href="/graph">graph</a></li>
4075 <li><a href="/graph">graph</a></li>
4066 <li><a href="/tags">tags</a></li>
4076 <li><a href="/tags">tags</a></li>
4067 <li><a href="/bookmarks">bookmarks</a></li>
4077 <li><a href="/bookmarks">bookmarks</a></li>
4068 <li><a href="/branches">branches</a></li>
4078 <li><a href="/branches">branches</a></li>
4069 </ul>
4079 </ul>
4070 <ul>
4080 <ul>
4071 <li><a href="/help">help</a></li>
4081 <li><a href="/help">help</a></li>
4072 </ul>
4082 </ul>
4073 </div>
4083 </div>
4074
4084
4075 <div class="main">
4085 <div class="main">
4076
4086
4077 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
4087 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
4078 <h3>error</h3>
4088 <h3>error</h3>
4079
4089
4080
4090
4081 <form class="search" action="/log">
4091 <form class="search" action="/log">
4082
4092
4083 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
4093 <p><input name="rev" id="search1" type="text" size="30" value="" /></p>
4084 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
4094 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
4085 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
4095 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
4086 </form>
4096 </form>
4087
4097
4088 <div class="description">
4098 <div class="description">
4089 <p>
4099 <p>
4090 An error occurred while processing your request:
4100 An error occurred while processing your request:
4091 </p>
4101 </p>
4092 <p>
4102 <p>
4093 Not Found
4103 Not Found
4094 </p>
4104 </p>
4095 </div>
4105 </div>
4096 </div>
4106 </div>
4097 </div>
4107 </div>
4098
4108
4099
4109
4100
4110
4101 </body>
4111 </body>
4102 </html>
4112 </html>
4103
4113
4104 [1]
4114 [1]
4105
4115
4106 $ killdaemons.py
4116 $ killdaemons.py
4107
4117
4108 #endif
4118 #endif
@@ -1,2407 +1,2411 b''
1 #require serve
1 #require serve
2
2
3 $ request() {
3 $ request() {
4 > get-with-headers.py --json localhost:$HGPORT "$1"
4 > get-with-headers.py --json localhost:$HGPORT "$1"
5 > }
5 > }
6
6
7 $ hg init test
7 $ hg init test
8 $ cd test
8 $ cd test
9 $ mkdir da
9 $ mkdir da
10 $ echo foo > da/foo
10 $ echo foo > da/foo
11 $ echo foo > foo
11 $ echo foo > foo
12 $ hg -q ci -A -m initial
12 $ hg -q ci -A -m initial
13 $ echo bar > foo
13 $ echo bar > foo
14 $ hg ci -m 'modify foo'
14 $ hg ci -m 'modify foo'
15 $ echo bar > da/foo
15 $ echo bar > da/foo
16 $ hg ci -m 'modify da/foo'
16 $ hg ci -m 'modify da/foo'
17 $ hg bookmark bookmark1
17 $ hg bookmark bookmark1
18 $ hg up default
18 $ hg up default
19 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
19 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
20 (leaving bookmark bookmark1)
20 (leaving bookmark bookmark1)
21 $ hg mv foo foo-new
21 $ hg mv foo foo-new
22 $ hg commit -m 'move foo'
22 $ hg commit -m 'move foo'
23 $ hg tag -m 'create tag' tag1
23 $ hg tag -m 'create tag' tag1
24 $ hg phase --public -r .
24 $ hg phase --public -r .
25 $ echo baz > da/foo
25 $ echo baz > da/foo
26 $ hg commit -m 'another commit to da/foo'
26 $ hg commit -m 'another commit to da/foo'
27 $ hg tag -m 'create tag2' tag2
27 $ hg tag -m 'create tag2' tag2
28 $ hg bookmark bookmark2
28 $ hg bookmark bookmark2
29 $ hg -q up -r 0
29 $ hg -q up -r 0
30 $ hg -q branch test-branch
30 $ hg -q branch test-branch
31 $ echo branch > foo
31 $ echo branch > foo
32 $ hg commit -m 'create test branch'
32 $ hg commit -m 'create test branch'
33 $ echo branch_commit_2 > foo
33 $ echo branch_commit_2 > foo
34 $ hg commit -m 'another commit in test-branch'
34 $ hg commit -m 'another commit in test-branch'
35 $ hg -q up default
35 $ hg -q up default
36 $ hg merge --tool :local test-branch
36 $ hg merge --tool :local test-branch
37 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
37 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
38 (branch merge, don't forget to commit)
38 (branch merge, don't forget to commit)
39 $ hg commit -m 'merge test-branch into default'
39 $ hg commit -m 'merge test-branch into default'
40
40
41 $ hg log -G
41 $ hg log -G
42 @ changeset: 9:cc725e08502a
42 @ changeset: 9:cc725e08502a
43 |\ tag: tip
43 |\ tag: tip
44 | | parent: 6:ceed296fe500
44 | | parent: 6:ceed296fe500
45 | | parent: 8:ed66c30e87eb
45 | | parent: 8:ed66c30e87eb
46 | | user: test
46 | | user: test
47 | | date: Thu Jan 01 00:00:00 1970 +0000
47 | | date: Thu Jan 01 00:00:00 1970 +0000
48 | | summary: merge test-branch into default
48 | | summary: merge test-branch into default
49 | |
49 | |
50 | o changeset: 8:ed66c30e87eb
50 | o changeset: 8:ed66c30e87eb
51 | | branch: test-branch
51 | | branch: test-branch
52 | | user: test
52 | | user: test
53 | | date: Thu Jan 01 00:00:00 1970 +0000
53 | | date: Thu Jan 01 00:00:00 1970 +0000
54 | | summary: another commit in test-branch
54 | | summary: another commit in test-branch
55 | |
55 | |
56 | o changeset: 7:6ab967a8ab34
56 | o changeset: 7:6ab967a8ab34
57 | | branch: test-branch
57 | | branch: test-branch
58 | | parent: 0:06e557f3edf6
58 | | parent: 0:06e557f3edf6
59 | | user: test
59 | | user: test
60 | | date: Thu Jan 01 00:00:00 1970 +0000
60 | | date: Thu Jan 01 00:00:00 1970 +0000
61 | | summary: create test branch
61 | | summary: create test branch
62 | |
62 | |
63 o | changeset: 6:ceed296fe500
63 o | changeset: 6:ceed296fe500
64 | | bookmark: bookmark2
64 | | bookmark: bookmark2
65 | | user: test
65 | | user: test
66 | | date: Thu Jan 01 00:00:00 1970 +0000
66 | | date: Thu Jan 01 00:00:00 1970 +0000
67 | | summary: create tag2
67 | | summary: create tag2
68 | |
68 | |
69 o | changeset: 5:f2890a05fea4
69 o | changeset: 5:f2890a05fea4
70 | | tag: tag2
70 | | tag: tag2
71 | | user: test
71 | | user: test
72 | | date: Thu Jan 01 00:00:00 1970 +0000
72 | | date: Thu Jan 01 00:00:00 1970 +0000
73 | | summary: another commit to da/foo
73 | | summary: another commit to da/foo
74 | |
74 | |
75 o | changeset: 4:93a8ce14f891
75 o | changeset: 4:93a8ce14f891
76 | | user: test
76 | | user: test
77 | | date: Thu Jan 01 00:00:00 1970 +0000
77 | | date: Thu Jan 01 00:00:00 1970 +0000
78 | | summary: create tag
78 | | summary: create tag
79 | |
79 | |
80 o | changeset: 3:78896eb0e102
80 o | changeset: 3:78896eb0e102
81 | | tag: tag1
81 | | tag: tag1
82 | | user: test
82 | | user: test
83 | | date: Thu Jan 01 00:00:00 1970 +0000
83 | | date: Thu Jan 01 00:00:00 1970 +0000
84 | | summary: move foo
84 | | summary: move foo
85 | |
85 | |
86 o | changeset: 2:8d7c456572ac
86 o | changeset: 2:8d7c456572ac
87 | | bookmark: bookmark1
87 | | bookmark: bookmark1
88 | | user: test
88 | | user: test
89 | | date: Thu Jan 01 00:00:00 1970 +0000
89 | | date: Thu Jan 01 00:00:00 1970 +0000
90 | | summary: modify da/foo
90 | | summary: modify da/foo
91 | |
91 | |
92 o | changeset: 1:f8bbb9024b10
92 o | changeset: 1:f8bbb9024b10
93 |/ user: test
93 |/ user: test
94 | date: Thu Jan 01 00:00:00 1970 +0000
94 | date: Thu Jan 01 00:00:00 1970 +0000
95 | summary: modify foo
95 | summary: modify foo
96 |
96 |
97 o changeset: 0:06e557f3edf6
97 o changeset: 0:06e557f3edf6
98 user: test
98 user: test
99 date: Thu Jan 01 00:00:00 1970 +0000
99 date: Thu Jan 01 00:00:00 1970 +0000
100 summary: initial
100 summary: initial
101
101
102
102
103 $ echo '[web]' >> .hg/hgrc
103 $ echo '[web]' >> .hg/hgrc
104 $ echo 'allow-archive = bz2' >> .hg/hgrc
104 $ echo 'allow-archive = bz2' >> .hg/hgrc
105 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E error.log
105 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E error.log
106 $ cat hg.pid >> $DAEMON_PIDS
106 $ cat hg.pid >> $DAEMON_PIDS
107
107
108 (Try to keep these in roughly the order they are defined in webcommands.py)
108 (Try to keep these in roughly the order they are defined in webcommands.py)
109
109
110 (log is handled by filelog/ and changelog/ - ignore it)
110 (log is handled by filelog/ and changelog/ - ignore it)
111
111
112 (rawfile/ doesn't use templating - nothing to test)
112 (rawfile/ doesn't use templating - nothing to test)
113
113
114 file/{revision}/{path} shows file revision
114 file/{revision}/{path} shows file revision
115
115
116 $ request json-file/78896eb0e102/foo-new
116 $ request json-file/78896eb0e102/foo-new
117 200 Script output follows
117 200 Script output follows
118
118
119 {
119 {
120 "bookmarks": [],
120 "bookmarks": [],
121 "branch": "default",
121 "branch": "default",
122 "date": [
122 "date": [
123 0.0,
123 0.0,
124 0
124 0
125 ],
125 ],
126 "desc": "move foo",
126 "desc": "move foo",
127 "lines": [
127 "lines": [
128 {
128 {
129 "line": "bar\n"
129 "line": "bar\n"
130 }
130 }
131 ],
131 ],
132 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
132 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
133 "parents": [
133 "parents": [
134 "f8bbb9024b10f93cdbb8d940337398291d40dea8"
134 "f8bbb9024b10f93cdbb8d940337398291d40dea8"
135 ],
135 ],
136 "path": "foo-new",
136 "path": "foo-new",
137 "phase": "public",
137 "phase": "public",
138 "tags": [
138 "tags": [
139 "tag1"
139 "tag1"
140 ],
140 ],
141 "user": "test"
141 "user": "test"
142 }
142 }
143
143
144 file/{revision} shows root directory info
144 file/{revision} shows root directory info
145
145
146 $ request json-file/cc725e08502a
146 $ request json-file/cc725e08502a
147 200 Script output follows
147 200 Script output follows
148
148
149 {
149 {
150 "abspath": "/",
150 "abspath": "/",
151 "bookmarks": [],
151 "bookmarks": [],
152 "directories": [
152 "directories": [
153 {
153 {
154 "abspath": "/da",
154 "abspath": "/da",
155 "basename": "da",
155 "basename": "da",
156 "emptydirs": ""
156 "emptydirs": ""
157 }
157 }
158 ],
158 ],
159 "files": [
159 "files": [
160 {
160 {
161 "abspath": ".hgtags",
161 "abspath": ".hgtags",
162 "basename": ".hgtags",
162 "basename": ".hgtags",
163 "date": [
163 "date": [
164 0.0,
164 0.0,
165 0
165 0
166 ],
166 ],
167 "flags": "",
167 "flags": "",
168 "size": 92
168 "size": 92
169 },
169 },
170 {
170 {
171 "abspath": "foo-new",
171 "abspath": "foo-new",
172 "basename": "foo-new",
172 "basename": "foo-new",
173 "date": [
173 "date": [
174 0.0,
174 0.0,
175 0
175 0
176 ],
176 ],
177 "flags": "",
177 "flags": "",
178 "size": 4
178 "size": 4
179 }
179 }
180 ],
180 ],
181 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
181 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
182 "tags": [
182 "tags": [
183 "tip"
183 "tip"
184 ]
184 ]
185 }
185 }
186
186
187 changelog/ shows information about several changesets
187 changelog/ shows information about several changesets
188
188
189 $ request json-changelog
189 $ request json-changelog
190 200 Script output follows
190 200 Script output follows
191
191
192 {
192 {
193 "changeset_count": 10,
193 "changeset_count": 10,
194 "changesets": [
194 "changesets": [
195 {
195 {
196 "bookmarks": [],
196 "bookmarks": [],
197 "branch": "default",
197 "branch": "default",
198 "date": [
198 "date": [
199 0.0,
199 0.0,
200 0
200 0
201 ],
201 ],
202 "desc": "merge test-branch into default",
202 "desc": "merge test-branch into default",
203 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
203 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
204 "parents": [
204 "parents": [
205 "ceed296fe500c3fac9541e31dad860cb49c89e45",
205 "ceed296fe500c3fac9541e31dad860cb49c89e45",
206 "ed66c30e87eb65337c05a4229efaa5f1d5285a90"
206 "ed66c30e87eb65337c05a4229efaa5f1d5285a90"
207 ],
207 ],
208 "phase": "draft",
208 "phase": "draft",
209 "tags": [
209 "tags": [
210 "tip"
210 "tip"
211 ],
211 ],
212 "user": "test"
212 "user": "test"
213 },
213 },
214 {
214 {
215 "bookmarks": [],
215 "bookmarks": [],
216 "branch": "test-branch",
216 "branch": "test-branch",
217 "date": [
217 "date": [
218 0.0,
218 0.0,
219 0
219 0
220 ],
220 ],
221 "desc": "another commit in test-branch",
221 "desc": "another commit in test-branch",
222 "node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
222 "node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
223 "parents": [
223 "parents": [
224 "6ab967a8ab3489227a83f80e920faa039a71819f"
224 "6ab967a8ab3489227a83f80e920faa039a71819f"
225 ],
225 ],
226 "phase": "draft",
226 "phase": "draft",
227 "tags": [],
227 "tags": [],
228 "user": "test"
228 "user": "test"
229 },
229 },
230 {
230 {
231 "bookmarks": [],
231 "bookmarks": [],
232 "branch": "test-branch",
232 "branch": "test-branch",
233 "date": [
233 "date": [
234 0.0,
234 0.0,
235 0
235 0
236 ],
236 ],
237 "desc": "create test branch",
237 "desc": "create test branch",
238 "node": "6ab967a8ab3489227a83f80e920faa039a71819f",
238 "node": "6ab967a8ab3489227a83f80e920faa039a71819f",
239 "parents": [
239 "parents": [
240 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
240 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
241 ],
241 ],
242 "phase": "draft",
242 "phase": "draft",
243 "tags": [],
243 "tags": [],
244 "user": "test"
244 "user": "test"
245 },
245 },
246 {
246 {
247 "bookmarks": [
247 "bookmarks": [
248 "bookmark2"
248 "bookmark2"
249 ],
249 ],
250 "branch": "default",
250 "branch": "default",
251 "date": [
251 "date": [
252 0.0,
252 0.0,
253 0
253 0
254 ],
254 ],
255 "desc": "create tag2",
255 "desc": "create tag2",
256 "node": "ceed296fe500c3fac9541e31dad860cb49c89e45",
256 "node": "ceed296fe500c3fac9541e31dad860cb49c89e45",
257 "parents": [
257 "parents": [
258 "f2890a05fea49bfaf9fb27ed5490894eba32da78"
258 "f2890a05fea49bfaf9fb27ed5490894eba32da78"
259 ],
259 ],
260 "phase": "draft",
260 "phase": "draft",
261 "tags": [],
261 "tags": [],
262 "user": "test"
262 "user": "test"
263 },
263 },
264 {
264 {
265 "bookmarks": [],
265 "bookmarks": [],
266 "branch": "default",
266 "branch": "default",
267 "date": [
267 "date": [
268 0.0,
268 0.0,
269 0
269 0
270 ],
270 ],
271 "desc": "another commit to da/foo",
271 "desc": "another commit to da/foo",
272 "node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
272 "node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
273 "parents": [
273 "parents": [
274 "93a8ce14f89156426b7fa981af8042da53f03aa0"
274 "93a8ce14f89156426b7fa981af8042da53f03aa0"
275 ],
275 ],
276 "phase": "draft",
276 "phase": "draft",
277 "tags": [
277 "tags": [
278 "tag2"
278 "tag2"
279 ],
279 ],
280 "user": "test"
280 "user": "test"
281 },
281 },
282 {
282 {
283 "bookmarks": [],
283 "bookmarks": [],
284 "branch": "default",
284 "branch": "default",
285 "date": [
285 "date": [
286 0.0,
286 0.0,
287 0
287 0
288 ],
288 ],
289 "desc": "create tag",
289 "desc": "create tag",
290 "node": "93a8ce14f89156426b7fa981af8042da53f03aa0",
290 "node": "93a8ce14f89156426b7fa981af8042da53f03aa0",
291 "parents": [
291 "parents": [
292 "78896eb0e102174ce9278438a95e12543e4367a7"
292 "78896eb0e102174ce9278438a95e12543e4367a7"
293 ],
293 ],
294 "phase": "public",
294 "phase": "public",
295 "tags": [],
295 "tags": [],
296 "user": "test"
296 "user": "test"
297 },
297 },
298 {
298 {
299 "bookmarks": [],
299 "bookmarks": [],
300 "branch": "default",
300 "branch": "default",
301 "date": [
301 "date": [
302 0.0,
302 0.0,
303 0
303 0
304 ],
304 ],
305 "desc": "move foo",
305 "desc": "move foo",
306 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
306 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
307 "parents": [
307 "parents": [
308 "8d7c456572acf3557e8ed8a07286b10c408bcec5"
308 "8d7c456572acf3557e8ed8a07286b10c408bcec5"
309 ],
309 ],
310 "phase": "public",
310 "phase": "public",
311 "tags": [
311 "tags": [
312 "tag1"
312 "tag1"
313 ],
313 ],
314 "user": "test"
314 "user": "test"
315 },
315 },
316 {
316 {
317 "bookmarks": [
317 "bookmarks": [
318 "bookmark1"
318 "bookmark1"
319 ],
319 ],
320 "branch": "default",
320 "branch": "default",
321 "date": [
321 "date": [
322 0.0,
322 0.0,
323 0
323 0
324 ],
324 ],
325 "desc": "modify da/foo",
325 "desc": "modify da/foo",
326 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
326 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
327 "parents": [
327 "parents": [
328 "f8bbb9024b10f93cdbb8d940337398291d40dea8"
328 "f8bbb9024b10f93cdbb8d940337398291d40dea8"
329 ],
329 ],
330 "phase": "public",
330 "phase": "public",
331 "tags": [],
331 "tags": [],
332 "user": "test"
332 "user": "test"
333 },
333 },
334 {
334 {
335 "bookmarks": [],
335 "bookmarks": [],
336 "branch": "default",
336 "branch": "default",
337 "date": [
337 "date": [
338 0.0,
338 0.0,
339 0
339 0
340 ],
340 ],
341 "desc": "modify foo",
341 "desc": "modify foo",
342 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
342 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
343 "parents": [
343 "parents": [
344 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
344 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
345 ],
345 ],
346 "phase": "public",
346 "phase": "public",
347 "tags": [],
347 "tags": [],
348 "user": "test"
348 "user": "test"
349 },
349 },
350 {
350 {
351 "bookmarks": [],
351 "bookmarks": [],
352 "branch": "default",
352 "branch": "default",
353 "date": [
353 "date": [
354 0.0,
354 0.0,
355 0
355 0
356 ],
356 ],
357 "desc": "initial",
357 "desc": "initial",
358 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
358 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
359 "parents": [],
359 "parents": [],
360 "phase": "public",
360 "phase": "public",
361 "tags": [],
361 "tags": [],
362 "user": "test"
362 "user": "test"
363 }
363 }
364 ],
364 ],
365 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7"
365 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7"
366 }
366 }
367
367
368 changelog/{revision} shows information starting at a specific changeset
368 changelog/{revision} shows information starting at a specific changeset
369
369
370 $ request json-changelog/f8bbb9024b10
370 $ request json-changelog/f8bbb9024b10
371 200 Script output follows
371 200 Script output follows
372
372
373 {
373 {
374 "changeset_count": 10,
374 "changeset_count": 10,
375 "changesets": [
375 "changesets": [
376 {
376 {
377 "bookmarks": [],
377 "bookmarks": [],
378 "branch": "default",
378 "branch": "default",
379 "date": [
379 "date": [
380 0.0,
380 0.0,
381 0
381 0
382 ],
382 ],
383 "desc": "modify foo",
383 "desc": "modify foo",
384 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
384 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
385 "parents": [
385 "parents": [
386 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
386 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
387 ],
387 ],
388 "phase": "public",
388 "phase": "public",
389 "tags": [],
389 "tags": [],
390 "user": "test"
390 "user": "test"
391 },
391 },
392 {
392 {
393 "bookmarks": [],
393 "bookmarks": [],
394 "branch": "default",
394 "branch": "default",
395 "date": [
395 "date": [
396 0.0,
396 0.0,
397 0
397 0
398 ],
398 ],
399 "desc": "initial",
399 "desc": "initial",
400 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
400 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
401 "parents": [],
401 "parents": [],
402 "phase": "public",
402 "phase": "public",
403 "tags": [],
403 "tags": [],
404 "user": "test"
404 "user": "test"
405 }
405 }
406 ],
406 ],
407 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8"
407 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8"
408 }
408 }
409
409
410 shortlog/ shows information about a set of changesets
410 shortlog/ shows information about a set of changesets
411
411
412 $ request json-shortlog
412 $ request json-shortlog
413 200 Script output follows
413 200 Script output follows
414
414
415 {
415 {
416 "changeset_count": 10,
416 "changeset_count": 10,
417 "changesets": [
417 "changesets": [
418 {
418 {
419 "bookmarks": [],
419 "bookmarks": [],
420 "branch": "default",
420 "branch": "default",
421 "date": [
421 "date": [
422 0.0,
422 0.0,
423 0
423 0
424 ],
424 ],
425 "desc": "merge test-branch into default",
425 "desc": "merge test-branch into default",
426 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
426 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
427 "parents": [
427 "parents": [
428 "ceed296fe500c3fac9541e31dad860cb49c89e45",
428 "ceed296fe500c3fac9541e31dad860cb49c89e45",
429 "ed66c30e87eb65337c05a4229efaa5f1d5285a90"
429 "ed66c30e87eb65337c05a4229efaa5f1d5285a90"
430 ],
430 ],
431 "phase": "draft",
431 "phase": "draft",
432 "tags": [
432 "tags": [
433 "tip"
433 "tip"
434 ],
434 ],
435 "user": "test"
435 "user": "test"
436 },
436 },
437 {
437 {
438 "bookmarks": [],
438 "bookmarks": [],
439 "branch": "test-branch",
439 "branch": "test-branch",
440 "date": [
440 "date": [
441 0.0,
441 0.0,
442 0
442 0
443 ],
443 ],
444 "desc": "another commit in test-branch",
444 "desc": "another commit in test-branch",
445 "node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
445 "node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
446 "parents": [
446 "parents": [
447 "6ab967a8ab3489227a83f80e920faa039a71819f"
447 "6ab967a8ab3489227a83f80e920faa039a71819f"
448 ],
448 ],
449 "phase": "draft",
449 "phase": "draft",
450 "tags": [],
450 "tags": [],
451 "user": "test"
451 "user": "test"
452 },
452 },
453 {
453 {
454 "bookmarks": [],
454 "bookmarks": [],
455 "branch": "test-branch",
455 "branch": "test-branch",
456 "date": [
456 "date": [
457 0.0,
457 0.0,
458 0
458 0
459 ],
459 ],
460 "desc": "create test branch",
460 "desc": "create test branch",
461 "node": "6ab967a8ab3489227a83f80e920faa039a71819f",
461 "node": "6ab967a8ab3489227a83f80e920faa039a71819f",
462 "parents": [
462 "parents": [
463 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
463 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
464 ],
464 ],
465 "phase": "draft",
465 "phase": "draft",
466 "tags": [],
466 "tags": [],
467 "user": "test"
467 "user": "test"
468 },
468 },
469 {
469 {
470 "bookmarks": [
470 "bookmarks": [
471 "bookmark2"
471 "bookmark2"
472 ],
472 ],
473 "branch": "default",
473 "branch": "default",
474 "date": [
474 "date": [
475 0.0,
475 0.0,
476 0
476 0
477 ],
477 ],
478 "desc": "create tag2",
478 "desc": "create tag2",
479 "node": "ceed296fe500c3fac9541e31dad860cb49c89e45",
479 "node": "ceed296fe500c3fac9541e31dad860cb49c89e45",
480 "parents": [
480 "parents": [
481 "f2890a05fea49bfaf9fb27ed5490894eba32da78"
481 "f2890a05fea49bfaf9fb27ed5490894eba32da78"
482 ],
482 ],
483 "phase": "draft",
483 "phase": "draft",
484 "tags": [],
484 "tags": [],
485 "user": "test"
485 "user": "test"
486 },
486 },
487 {
487 {
488 "bookmarks": [],
488 "bookmarks": [],
489 "branch": "default",
489 "branch": "default",
490 "date": [
490 "date": [
491 0.0,
491 0.0,
492 0
492 0
493 ],
493 ],
494 "desc": "another commit to da/foo",
494 "desc": "another commit to da/foo",
495 "node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
495 "node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
496 "parents": [
496 "parents": [
497 "93a8ce14f89156426b7fa981af8042da53f03aa0"
497 "93a8ce14f89156426b7fa981af8042da53f03aa0"
498 ],
498 ],
499 "phase": "draft",
499 "phase": "draft",
500 "tags": [
500 "tags": [
501 "tag2"
501 "tag2"
502 ],
502 ],
503 "user": "test"
503 "user": "test"
504 },
504 },
505 {
505 {
506 "bookmarks": [],
506 "bookmarks": [],
507 "branch": "default",
507 "branch": "default",
508 "date": [
508 "date": [
509 0.0,
509 0.0,
510 0
510 0
511 ],
511 ],
512 "desc": "create tag",
512 "desc": "create tag",
513 "node": "93a8ce14f89156426b7fa981af8042da53f03aa0",
513 "node": "93a8ce14f89156426b7fa981af8042da53f03aa0",
514 "parents": [
514 "parents": [
515 "78896eb0e102174ce9278438a95e12543e4367a7"
515 "78896eb0e102174ce9278438a95e12543e4367a7"
516 ],
516 ],
517 "phase": "public",
517 "phase": "public",
518 "tags": [],
518 "tags": [],
519 "user": "test"
519 "user": "test"
520 },
520 },
521 {
521 {
522 "bookmarks": [],
522 "bookmarks": [],
523 "branch": "default",
523 "branch": "default",
524 "date": [
524 "date": [
525 0.0,
525 0.0,
526 0
526 0
527 ],
527 ],
528 "desc": "move foo",
528 "desc": "move foo",
529 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
529 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
530 "parents": [
530 "parents": [
531 "8d7c456572acf3557e8ed8a07286b10c408bcec5"
531 "8d7c456572acf3557e8ed8a07286b10c408bcec5"
532 ],
532 ],
533 "phase": "public",
533 "phase": "public",
534 "tags": [
534 "tags": [
535 "tag1"
535 "tag1"
536 ],
536 ],
537 "user": "test"
537 "user": "test"
538 },
538 },
539 {
539 {
540 "bookmarks": [
540 "bookmarks": [
541 "bookmark1"
541 "bookmark1"
542 ],
542 ],
543 "branch": "default",
543 "branch": "default",
544 "date": [
544 "date": [
545 0.0,
545 0.0,
546 0
546 0
547 ],
547 ],
548 "desc": "modify da/foo",
548 "desc": "modify da/foo",
549 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
549 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
550 "parents": [
550 "parents": [
551 "f8bbb9024b10f93cdbb8d940337398291d40dea8"
551 "f8bbb9024b10f93cdbb8d940337398291d40dea8"
552 ],
552 ],
553 "phase": "public",
553 "phase": "public",
554 "tags": [],
554 "tags": [],
555 "user": "test"
555 "user": "test"
556 },
556 },
557 {
557 {
558 "bookmarks": [],
558 "bookmarks": [],
559 "branch": "default",
559 "branch": "default",
560 "date": [
560 "date": [
561 0.0,
561 0.0,
562 0
562 0
563 ],
563 ],
564 "desc": "modify foo",
564 "desc": "modify foo",
565 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
565 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
566 "parents": [
566 "parents": [
567 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
567 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
568 ],
568 ],
569 "phase": "public",
569 "phase": "public",
570 "tags": [],
570 "tags": [],
571 "user": "test"
571 "user": "test"
572 },
572 },
573 {
573 {
574 "bookmarks": [],
574 "bookmarks": [],
575 "branch": "default",
575 "branch": "default",
576 "date": [
576 "date": [
577 0.0,
577 0.0,
578 0
578 0
579 ],
579 ],
580 "desc": "initial",
580 "desc": "initial",
581 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
581 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
582 "parents": [],
582 "parents": [],
583 "phase": "public",
583 "phase": "public",
584 "tags": [],
584 "tags": [],
585 "user": "test"
585 "user": "test"
586 }
586 }
587 ],
587 ],
588 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7"
588 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7"
589 }
589 }
590
590
591 shortlog is displayed by default (issue5978)
591 shortlog is displayed by default (issue5978)
592
592
593 $ request '?style=json'
593 $ request '?style=json'
594 200 Script output follows
594 200 Script output follows
595
595
596 {
596 {
597 "changeset_count": 10,
597 "changeset_count": 10,
598 "changesets": [
598 "changesets": [
599 {
599 {
600 "bookmarks": [],
600 "bookmarks": [],
601 "branch": "default",
601 "branch": "default",
602 "date": [
602 "date": [
603 0.0,
603 0.0,
604 0
604 0
605 ],
605 ],
606 "desc": "merge test-branch into default",
606 "desc": "merge test-branch into default",
607 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
607 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
608 "parents": [
608 "parents": [
609 "ceed296fe500c3fac9541e31dad860cb49c89e45",
609 "ceed296fe500c3fac9541e31dad860cb49c89e45",
610 "ed66c30e87eb65337c05a4229efaa5f1d5285a90"
610 "ed66c30e87eb65337c05a4229efaa5f1d5285a90"
611 ],
611 ],
612 "phase": "draft",
612 "phase": "draft",
613 "tags": [
613 "tags": [
614 "tip"
614 "tip"
615 ],
615 ],
616 "user": "test"
616 "user": "test"
617 },
617 },
618 {
618 {
619 "bookmarks": [],
619 "bookmarks": [],
620 "branch": "test-branch",
620 "branch": "test-branch",
621 "date": [
621 "date": [
622 0.0,
622 0.0,
623 0
623 0
624 ],
624 ],
625 "desc": "another commit in test-branch",
625 "desc": "another commit in test-branch",
626 "node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
626 "node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
627 "parents": [
627 "parents": [
628 "6ab967a8ab3489227a83f80e920faa039a71819f"
628 "6ab967a8ab3489227a83f80e920faa039a71819f"
629 ],
629 ],
630 "phase": "draft",
630 "phase": "draft",
631 "tags": [],
631 "tags": [],
632 "user": "test"
632 "user": "test"
633 },
633 },
634 {
634 {
635 "bookmarks": [],
635 "bookmarks": [],
636 "branch": "test-branch",
636 "branch": "test-branch",
637 "date": [
637 "date": [
638 0.0,
638 0.0,
639 0
639 0
640 ],
640 ],
641 "desc": "create test branch",
641 "desc": "create test branch",
642 "node": "6ab967a8ab3489227a83f80e920faa039a71819f",
642 "node": "6ab967a8ab3489227a83f80e920faa039a71819f",
643 "parents": [
643 "parents": [
644 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
644 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
645 ],
645 ],
646 "phase": "draft",
646 "phase": "draft",
647 "tags": [],
647 "tags": [],
648 "user": "test"
648 "user": "test"
649 },
649 },
650 {
650 {
651 "bookmarks": [
651 "bookmarks": [
652 "bookmark2"
652 "bookmark2"
653 ],
653 ],
654 "branch": "default",
654 "branch": "default",
655 "date": [
655 "date": [
656 0.0,
656 0.0,
657 0
657 0
658 ],
658 ],
659 "desc": "create tag2",
659 "desc": "create tag2",
660 "node": "ceed296fe500c3fac9541e31dad860cb49c89e45",
660 "node": "ceed296fe500c3fac9541e31dad860cb49c89e45",
661 "parents": [
661 "parents": [
662 "f2890a05fea49bfaf9fb27ed5490894eba32da78"
662 "f2890a05fea49bfaf9fb27ed5490894eba32da78"
663 ],
663 ],
664 "phase": "draft",
664 "phase": "draft",
665 "tags": [],
665 "tags": [],
666 "user": "test"
666 "user": "test"
667 },
667 },
668 {
668 {
669 "bookmarks": [],
669 "bookmarks": [],
670 "branch": "default",
670 "branch": "default",
671 "date": [
671 "date": [
672 0.0,
672 0.0,
673 0
673 0
674 ],
674 ],
675 "desc": "another commit to da/foo",
675 "desc": "another commit to da/foo",
676 "node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
676 "node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
677 "parents": [
677 "parents": [
678 "93a8ce14f89156426b7fa981af8042da53f03aa0"
678 "93a8ce14f89156426b7fa981af8042da53f03aa0"
679 ],
679 ],
680 "phase": "draft",
680 "phase": "draft",
681 "tags": [
681 "tags": [
682 "tag2"
682 "tag2"
683 ],
683 ],
684 "user": "test"
684 "user": "test"
685 },
685 },
686 {
686 {
687 "bookmarks": [],
687 "bookmarks": [],
688 "branch": "default",
688 "branch": "default",
689 "date": [
689 "date": [
690 0.0,
690 0.0,
691 0
691 0
692 ],
692 ],
693 "desc": "create tag",
693 "desc": "create tag",
694 "node": "93a8ce14f89156426b7fa981af8042da53f03aa0",
694 "node": "93a8ce14f89156426b7fa981af8042da53f03aa0",
695 "parents": [
695 "parents": [
696 "78896eb0e102174ce9278438a95e12543e4367a7"
696 "78896eb0e102174ce9278438a95e12543e4367a7"
697 ],
697 ],
698 "phase": "public",
698 "phase": "public",
699 "tags": [],
699 "tags": [],
700 "user": "test"
700 "user": "test"
701 },
701 },
702 {
702 {
703 "bookmarks": [],
703 "bookmarks": [],
704 "branch": "default",
704 "branch": "default",
705 "date": [
705 "date": [
706 0.0,
706 0.0,
707 0
707 0
708 ],
708 ],
709 "desc": "move foo",
709 "desc": "move foo",
710 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
710 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
711 "parents": [
711 "parents": [
712 "8d7c456572acf3557e8ed8a07286b10c408bcec5"
712 "8d7c456572acf3557e8ed8a07286b10c408bcec5"
713 ],
713 ],
714 "phase": "public",
714 "phase": "public",
715 "tags": [
715 "tags": [
716 "tag1"
716 "tag1"
717 ],
717 ],
718 "user": "test"
718 "user": "test"
719 },
719 },
720 {
720 {
721 "bookmarks": [
721 "bookmarks": [
722 "bookmark1"
722 "bookmark1"
723 ],
723 ],
724 "branch": "default",
724 "branch": "default",
725 "date": [
725 "date": [
726 0.0,
726 0.0,
727 0
727 0
728 ],
728 ],
729 "desc": "modify da/foo",
729 "desc": "modify da/foo",
730 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
730 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
731 "parents": [
731 "parents": [
732 "f8bbb9024b10f93cdbb8d940337398291d40dea8"
732 "f8bbb9024b10f93cdbb8d940337398291d40dea8"
733 ],
733 ],
734 "phase": "public",
734 "phase": "public",
735 "tags": [],
735 "tags": [],
736 "user": "test"
736 "user": "test"
737 },
737 },
738 {
738 {
739 "bookmarks": [],
739 "bookmarks": [],
740 "branch": "default",
740 "branch": "default",
741 "date": [
741 "date": [
742 0.0,
742 0.0,
743 0
743 0
744 ],
744 ],
745 "desc": "modify foo",
745 "desc": "modify foo",
746 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
746 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
747 "parents": [
747 "parents": [
748 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
748 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
749 ],
749 ],
750 "phase": "public",
750 "phase": "public",
751 "tags": [],
751 "tags": [],
752 "user": "test"
752 "user": "test"
753 },
753 },
754 {
754 {
755 "bookmarks": [],
755 "bookmarks": [],
756 "branch": "default",
756 "branch": "default",
757 "date": [
757 "date": [
758 0.0,
758 0.0,
759 0
759 0
760 ],
760 ],
761 "desc": "initial",
761 "desc": "initial",
762 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
762 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
763 "parents": [],
763 "parents": [],
764 "phase": "public",
764 "phase": "public",
765 "tags": [],
765 "tags": [],
766 "user": "test"
766 "user": "test"
767 }
767 }
768 ],
768 ],
769 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7"
769 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7"
770 }
770 }
771
771
772 changeset/ renders the tip changeset
772 changeset/ renders the tip changeset
773
773
774 $ request json-rev
774 $ request json-rev
775 200 Script output follows
775 200 Script output follows
776
776
777 {
777 {
778 "bookmarks": [],
778 "bookmarks": [],
779 "branch": "default",
779 "branch": "default",
780 "children": [],
780 "children": [],
781 "date": [
781 "date": [
782 0.0,
782 0.0,
783 0
783 0
784 ],
784 ],
785 "desc": "merge test-branch into default",
785 "desc": "merge test-branch into default",
786 "diff": [],
786 "diff": [],
787 "files": [
787 "files": [
788 {
788 {
789 "file": "foo-new",
789 "file": "foo-new",
790 "status": "modified"
790 "status": "modified"
791 }
791 }
792 ],
792 ],
793 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
793 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
794 "parents": [
794 "parents": [
795 "ceed296fe500c3fac9541e31dad860cb49c89e45",
795 "ceed296fe500c3fac9541e31dad860cb49c89e45",
796 "ed66c30e87eb65337c05a4229efaa5f1d5285a90"
796 "ed66c30e87eb65337c05a4229efaa5f1d5285a90"
797 ],
797 ],
798 "phase": "draft",
798 "phase": "draft",
799 "tags": [
799 "tags": [
800 "tip"
800 "tip"
801 ],
801 ],
802 "user": "test"
802 "user": "test"
803 }
803 }
804
804
805 changeset/{revision} shows tags
805 changeset/{revision} shows tags
806
806
807 $ request json-rev/78896eb0e102
807 $ request json-rev/78896eb0e102
808 200 Script output follows
808 200 Script output follows
809
809
810 {
810 {
811 "bookmarks": [],
811 "bookmarks": [],
812 "branch": "default",
812 "branch": "default",
813 "children": [
813 "children": [
814 "93a8ce14f89156426b7fa981af8042da53f03aa0"
814 "93a8ce14f89156426b7fa981af8042da53f03aa0"
815 ],
815 ],
816 "date": [
816 "date": [
817 0.0,
817 0.0,
818 0
818 0
819 ],
819 ],
820 "desc": "move foo",
820 "desc": "move foo",
821 "diff": [
821 "diff": [
822 {
822 {
823 "blockno": 1,
823 "blockno": 1,
824 "lines": [
824 "lines": [
825 {
825 {
826 "l": "--- a/foo\tThu Jan 01 00:00:00 1970 +0000\n",
826 "l": "--- a/foo\tThu Jan 01 00:00:00 1970 +0000\n",
827 "n": 1,
827 "n": 1,
828 "t": "-"
828 "t": "-"
829 },
829 },
830 {
830 {
831 "l": "+++ /dev/null\tThu Jan 01 00:00:00 1970 +0000\n",
831 "l": "+++ /dev/null\tThu Jan 01 00:00:00 1970 +0000\n",
832 "n": 2,
832 "n": 2,
833 "t": "+"
833 "t": "+"
834 },
834 },
835 {
835 {
836 "l": "@@ -1,1 +0,0 @@\n",
836 "l": "@@ -1,1 +0,0 @@\n",
837 "n": 3,
837 "n": 3,
838 "t": "@"
838 "t": "@"
839 },
839 },
840 {
840 {
841 "l": "-bar\n",
841 "l": "-bar\n",
842 "n": 4,
842 "n": 4,
843 "t": "-"
843 "t": "-"
844 }
844 }
845 ]
845 ]
846 },
846 },
847 {
847 {
848 "blockno": 2,
848 "blockno": 2,
849 "lines": [
849 "lines": [
850 {
850 {
851 "l": "--- /dev/null\tThu Jan 01 00:00:00 1970 +0000\n",
851 "l": "--- /dev/null\tThu Jan 01 00:00:00 1970 +0000\n",
852 "n": 1,
852 "n": 1,
853 "t": "-"
853 "t": "-"
854 },
854 },
855 {
855 {
856 "l": "+++ b/foo-new\tThu Jan 01 00:00:00 1970 +0000\n",
856 "l": "+++ b/foo-new\tThu Jan 01 00:00:00 1970 +0000\n",
857 "n": 2,
857 "n": 2,
858 "t": "+"
858 "t": "+"
859 },
859 },
860 {
860 {
861 "l": "@@ -0,0 +1,1 @@\n",
861 "l": "@@ -0,0 +1,1 @@\n",
862 "n": 3,
862 "n": 3,
863 "t": "@"
863 "t": "@"
864 },
864 },
865 {
865 {
866 "l": "+bar\n",
866 "l": "+bar\n",
867 "n": 4,
867 "n": 4,
868 "t": "+"
868 "t": "+"
869 }
869 }
870 ]
870 ]
871 }
871 }
872 ],
872 ],
873 "files": [
873 "files": [
874 {
874 {
875 "file": "foo",
875 "file": "foo",
876 "status": "removed"
876 "status": "removed"
877 },
877 },
878 {
878 {
879 "file": "foo-new",
879 "file": "foo-new",
880 "status": "added"
880 "status": "added"
881 }
881 }
882 ],
882 ],
883 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
883 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
884 "parents": [
884 "parents": [
885 "8d7c456572acf3557e8ed8a07286b10c408bcec5"
885 "8d7c456572acf3557e8ed8a07286b10c408bcec5"
886 ],
886 ],
887 "phase": "public",
887 "phase": "public",
888 "tags": [
888 "tags": [
889 "tag1"
889 "tag1"
890 ],
890 ],
891 "user": "test"
891 "user": "test"
892 }
892 }
893
893
894 changeset/{revision} shows bookmarks
894 changeset/{revision} shows bookmarks
895
895
896 $ request json-rev/8d7c456572ac
896 $ request json-rev/8d7c456572ac
897 200 Script output follows
897 200 Script output follows
898
898
899 {
899 {
900 "bookmarks": [
900 "bookmarks": [
901 "bookmark1"
901 "bookmark1"
902 ],
902 ],
903 "branch": "default",
903 "branch": "default",
904 "children": [
904 "children": [
905 "78896eb0e102174ce9278438a95e12543e4367a7"
905 "78896eb0e102174ce9278438a95e12543e4367a7"
906 ],
906 ],
907 "date": [
907 "date": [
908 0.0,
908 0.0,
909 0
909 0
910 ],
910 ],
911 "desc": "modify da/foo",
911 "desc": "modify da/foo",
912 "diff": [
912 "diff": [
913 {
913 {
914 "blockno": 1,
914 "blockno": 1,
915 "lines": [
915 "lines": [
916 {
916 {
917 "l": "--- a/da/foo\tThu Jan 01 00:00:00 1970 +0000\n",
917 "l": "--- a/da/foo\tThu Jan 01 00:00:00 1970 +0000\n",
918 "n": 1,
918 "n": 1,
919 "t": "-"
919 "t": "-"
920 },
920 },
921 {
921 {
922 "l": "+++ b/da/foo\tThu Jan 01 00:00:00 1970 +0000\n",
922 "l": "+++ b/da/foo\tThu Jan 01 00:00:00 1970 +0000\n",
923 "n": 2,
923 "n": 2,
924 "t": "+"
924 "t": "+"
925 },
925 },
926 {
926 {
927 "l": "@@ -1,1 +1,1 @@\n",
927 "l": "@@ -1,1 +1,1 @@\n",
928 "n": 3,
928 "n": 3,
929 "t": "@"
929 "t": "@"
930 },
930 },
931 {
931 {
932 "l": "-foo\n",
932 "l": "-foo\n",
933 "n": 4,
933 "n": 4,
934 "t": "-"
934 "t": "-"
935 },
935 },
936 {
936 {
937 "l": "+bar\n",
937 "l": "+bar\n",
938 "n": 5,
938 "n": 5,
939 "t": "+"
939 "t": "+"
940 }
940 }
941 ]
941 ]
942 }
942 }
943 ],
943 ],
944 "files": [
944 "files": [
945 {
945 {
946 "file": "da/foo",
946 "file": "da/foo",
947 "status": "modified"
947 "status": "modified"
948 }
948 }
949 ],
949 ],
950 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
950 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
951 "parents": [
951 "parents": [
952 "f8bbb9024b10f93cdbb8d940337398291d40dea8"
952 "f8bbb9024b10f93cdbb8d940337398291d40dea8"
953 ],
953 ],
954 "phase": "public",
954 "phase": "public",
955 "tags": [],
955 "tags": [],
956 "user": "test"
956 "user": "test"
957 }
957 }
958
958
959 changeset/{revision} shows branches
959 changeset/{revision} shows branches
960
960
961 $ request json-rev/6ab967a8ab34
961 $ request json-rev/6ab967a8ab34
962 200 Script output follows
962 200 Script output follows
963
963
964 {
964 {
965 "bookmarks": [],
965 "bookmarks": [],
966 "branch": "test-branch",
966 "branch": "test-branch",
967 "children": [
967 "children": [
968 "ed66c30e87eb65337c05a4229efaa5f1d5285a90"
968 "ed66c30e87eb65337c05a4229efaa5f1d5285a90"
969 ],
969 ],
970 "date": [
970 "date": [
971 0.0,
971 0.0,
972 0
972 0
973 ],
973 ],
974 "desc": "create test branch",
974 "desc": "create test branch",
975 "diff": [
975 "diff": [
976 {
976 {
977 "blockno": 1,
977 "blockno": 1,
978 "lines": [
978 "lines": [
979 {
979 {
980 "l": "--- a/foo\tThu Jan 01 00:00:00 1970 +0000\n",
980 "l": "--- a/foo\tThu Jan 01 00:00:00 1970 +0000\n",
981 "n": 1,
981 "n": 1,
982 "t": "-"
982 "t": "-"
983 },
983 },
984 {
984 {
985 "l": "+++ b/foo\tThu Jan 01 00:00:00 1970 +0000\n",
985 "l": "+++ b/foo\tThu Jan 01 00:00:00 1970 +0000\n",
986 "n": 2,
986 "n": 2,
987 "t": "+"
987 "t": "+"
988 },
988 },
989 {
989 {
990 "l": "@@ -1,1 +1,1 @@\n",
990 "l": "@@ -1,1 +1,1 @@\n",
991 "n": 3,
991 "n": 3,
992 "t": "@"
992 "t": "@"
993 },
993 },
994 {
994 {
995 "l": "-foo\n",
995 "l": "-foo\n",
996 "n": 4,
996 "n": 4,
997 "t": "-"
997 "t": "-"
998 },
998 },
999 {
999 {
1000 "l": "+branch\n",
1000 "l": "+branch\n",
1001 "n": 5,
1001 "n": 5,
1002 "t": "+"
1002 "t": "+"
1003 }
1003 }
1004 ]
1004 ]
1005 }
1005 }
1006 ],
1006 ],
1007 "files": [
1007 "files": [
1008 {
1008 {
1009 "file": "foo",
1009 "file": "foo",
1010 "status": "modified"
1010 "status": "modified"
1011 }
1011 }
1012 ],
1012 ],
1013 "node": "6ab967a8ab3489227a83f80e920faa039a71819f",
1013 "node": "6ab967a8ab3489227a83f80e920faa039a71819f",
1014 "parents": [
1014 "parents": [
1015 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1015 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1016 ],
1016 ],
1017 "phase": "draft",
1017 "phase": "draft",
1018 "tags": [],
1018 "tags": [],
1019 "user": "test"
1019 "user": "test"
1020 }
1020 }
1021
1021
1022 manifest/{revision}/{path} shows info about a directory at a revision
1022 manifest/{revision}/{path} shows info about a directory at a revision
1023
1023
1024 $ request json-manifest/06e557f3edf6/
1024 $ request json-manifest/06e557f3edf6/
1025 200 Script output follows
1025 200 Script output follows
1026
1026
1027 {
1027 {
1028 "abspath": "/",
1028 "abspath": "/",
1029 "bookmarks": [],
1029 "bookmarks": [],
1030 "directories": [
1030 "directories": [
1031 {
1031 {
1032 "abspath": "/da",
1032 "abspath": "/da",
1033 "basename": "da",
1033 "basename": "da",
1034 "emptydirs": ""
1034 "emptydirs": ""
1035 }
1035 }
1036 ],
1036 ],
1037 "files": [
1037 "files": [
1038 {
1038 {
1039 "abspath": "foo",
1039 "abspath": "foo",
1040 "basename": "foo",
1040 "basename": "foo",
1041 "date": [
1041 "date": [
1042 0.0,
1042 0.0,
1043 0
1043 0
1044 ],
1044 ],
1045 "flags": "",
1045 "flags": "",
1046 "size": 4
1046 "size": 4
1047 }
1047 }
1048 ],
1048 ],
1049 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
1049 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
1050 "tags": []
1050 "tags": []
1051 }
1051 }
1052
1052
1053 tags/ shows tags info
1053 tags/ shows tags info
1054
1054
1055 $ request json-tags
1055 $ request json-tags
1056 200 Script output follows
1056 200 Script output follows
1057
1057
1058 {
1058 {
1059 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
1059 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
1060 "tags": [
1060 "tags": [
1061 {
1061 {
1062 "date": [
1062 "date": [
1063 0.0,
1063 0.0,
1064 0
1064 0
1065 ],
1065 ],
1066 "node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
1066 "node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
1067 "tag": "tag2"
1067 "tag": "tag2"
1068 },
1068 },
1069 {
1069 {
1070 "date": [
1070 "date": [
1071 0.0,
1071 0.0,
1072 0
1072 0
1073 ],
1073 ],
1074 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
1074 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
1075 "tag": "tag1"
1075 "tag": "tag1"
1076 }
1076 }
1077 ]
1077 ]
1078 }
1078 }
1079
1079
1080 bookmarks/ shows bookmarks info
1080 bookmarks/ shows bookmarks info
1081
1081
1082 $ request json-bookmarks
1082 $ request json-bookmarks
1083 200 Script output follows
1083 200 Script output follows
1084
1084
1085 {
1085 {
1086 "bookmarks": [
1086 "bookmarks": [
1087 {
1087 {
1088 "bookmark": "bookmark2",
1088 "bookmark": "bookmark2",
1089 "date": [
1089 "date": [
1090 0.0,
1090 0.0,
1091 0
1091 0
1092 ],
1092 ],
1093 "node": "ceed296fe500c3fac9541e31dad860cb49c89e45"
1093 "node": "ceed296fe500c3fac9541e31dad860cb49c89e45"
1094 },
1094 },
1095 {
1095 {
1096 "bookmark": "bookmark1",
1096 "bookmark": "bookmark1",
1097 "date": [
1097 "date": [
1098 0.0,
1098 0.0,
1099 0
1099 0
1100 ],
1100 ],
1101 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5"
1101 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5"
1102 }
1102 }
1103 ],
1103 ],
1104 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7"
1104 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7"
1105 }
1105 }
1106
1106
1107 branches/ shows branches info
1107 branches/ shows branches info
1108
1108
1109 $ request json-branches
1109 $ request json-branches
1110 200 Script output follows
1110 200 Script output follows
1111
1111
1112 {
1112 {
1113 "branches": [
1113 "branches": [
1114 {
1114 {
1115 "branch": "default",
1115 "branch": "default",
1116 "date": [
1116 "date": [
1117 0.0,
1117 0.0,
1118 0
1118 0
1119 ],
1119 ],
1120 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
1120 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
1121 "status": "open"
1121 "status": "open"
1122 },
1122 },
1123 {
1123 {
1124 "branch": "test-branch",
1124 "branch": "test-branch",
1125 "date": [
1125 "date": [
1126 0.0,
1126 0.0,
1127 0
1127 0
1128 ],
1128 ],
1129 "node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
1129 "node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
1130 "status": "inactive"
1130 "status": "inactive"
1131 }
1131 }
1132 ]
1132 ]
1133 }
1133 }
1134
1134
1135 summary/ shows a summary of repository state
1135 summary/ shows a summary of repository state
1136
1136
1137 $ request json-summary
1137 $ request json-summary
1138 200 Script output follows
1138 200 Script output follows
1139
1139
1140 {
1140 {
1141 "archives": [
1141 "archives": [
1142 {
1142 {
1143 "extension": ".tar.bz2",
1143 "extension": ".tar.bz2",
1144 "node": "tip",
1144 "node": "tip",
1145 "type": "bz2",
1145 "type": "bz2",
1146 "url": "http://*:$HGPORT/archive/tip.tar.bz2" (glob)
1146 "url": "http://*:$HGPORT/archive/tip.tar.bz2" (glob)
1147 }
1147 }
1148 ],
1148 ],
1149 "bookmarks": [
1149 "bookmarks": [
1150 {
1150 {
1151 "bookmark": "bookmark2",
1151 "bookmark": "bookmark2",
1152 "date": [
1152 "date": [
1153 0.0,
1153 0.0,
1154 0
1154 0
1155 ],
1155 ],
1156 "node": "ceed296fe500c3fac9541e31dad860cb49c89e45"
1156 "node": "ceed296fe500c3fac9541e31dad860cb49c89e45"
1157 },
1157 },
1158 {
1158 {
1159 "bookmark": "bookmark1",
1159 "bookmark": "bookmark1",
1160 "date": [
1160 "date": [
1161 0.0,
1161 0.0,
1162 0
1162 0
1163 ],
1163 ],
1164 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5"
1164 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5"
1165 }
1165 }
1166 ],
1166 ],
1167 "branches": [
1167 "branches": [
1168 {
1168 {
1169 "branch": "default",
1169 "branch": "default",
1170 "date": [
1170 "date": [
1171 0.0,
1171 0.0,
1172 0
1172 0
1173 ],
1173 ],
1174 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
1174 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
1175 "status": "open"
1175 "status": "open"
1176 },
1176 },
1177 {
1177 {
1178 "branch": "test-branch",
1178 "branch": "test-branch",
1179 "date": [
1179 "date": [
1180 0.0,
1180 0.0,
1181 0
1181 0
1182 ],
1182 ],
1183 "node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
1183 "node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
1184 "status": "inactive"
1184 "status": "inactive"
1185 }
1185 }
1186 ],
1186 ],
1187 "labels": [],
1187 "labels": [],
1188 "lastchange": [
1188 "lastchange": [
1189 0.0,
1189 0.0,
1190 0
1190 0
1191 ],
1191 ],
1192 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
1192 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
1193 "shortlog": [
1193 "shortlog": [
1194 {
1194 {
1195 "bookmarks": [],
1195 "bookmarks": [],
1196 "branch": "default",
1196 "branch": "default",
1197 "date": [
1197 "date": [
1198 0.0,
1198 0.0,
1199 0
1199 0
1200 ],
1200 ],
1201 "desc": "merge test-branch into default",
1201 "desc": "merge test-branch into default",
1202 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
1202 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
1203 "parents": [
1203 "parents": [
1204 "ceed296fe500c3fac9541e31dad860cb49c89e45",
1204 "ceed296fe500c3fac9541e31dad860cb49c89e45",
1205 "ed66c30e87eb65337c05a4229efaa5f1d5285a90"
1205 "ed66c30e87eb65337c05a4229efaa5f1d5285a90"
1206 ],
1206 ],
1207 "phase": "draft",
1207 "phase": "draft",
1208 "tags": [
1208 "tags": [
1209 "tip"
1209 "tip"
1210 ],
1210 ],
1211 "user": "test"
1211 "user": "test"
1212 },
1212 },
1213 {
1213 {
1214 "bookmarks": [],
1214 "bookmarks": [],
1215 "branch": "test-branch",
1215 "branch": "test-branch",
1216 "date": [
1216 "date": [
1217 0.0,
1217 0.0,
1218 0
1218 0
1219 ],
1219 ],
1220 "desc": "another commit in test-branch",
1220 "desc": "another commit in test-branch",
1221 "node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
1221 "node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
1222 "parents": [
1222 "parents": [
1223 "6ab967a8ab3489227a83f80e920faa039a71819f"
1223 "6ab967a8ab3489227a83f80e920faa039a71819f"
1224 ],
1224 ],
1225 "phase": "draft",
1225 "phase": "draft",
1226 "tags": [],
1226 "tags": [],
1227 "user": "test"
1227 "user": "test"
1228 },
1228 },
1229 {
1229 {
1230 "bookmarks": [],
1230 "bookmarks": [],
1231 "branch": "test-branch",
1231 "branch": "test-branch",
1232 "date": [
1232 "date": [
1233 0.0,
1233 0.0,
1234 0
1234 0
1235 ],
1235 ],
1236 "desc": "create test branch",
1236 "desc": "create test branch",
1237 "node": "6ab967a8ab3489227a83f80e920faa039a71819f",
1237 "node": "6ab967a8ab3489227a83f80e920faa039a71819f",
1238 "parents": [
1238 "parents": [
1239 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1239 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1240 ],
1240 ],
1241 "phase": "draft",
1241 "phase": "draft",
1242 "tags": [],
1242 "tags": [],
1243 "user": "test"
1243 "user": "test"
1244 },
1244 },
1245 {
1245 {
1246 "bookmarks": [
1246 "bookmarks": [
1247 "bookmark2"
1247 "bookmark2"
1248 ],
1248 ],
1249 "branch": "default",
1249 "branch": "default",
1250 "date": [
1250 "date": [
1251 0.0,
1251 0.0,
1252 0
1252 0
1253 ],
1253 ],
1254 "desc": "create tag2",
1254 "desc": "create tag2",
1255 "node": "ceed296fe500c3fac9541e31dad860cb49c89e45",
1255 "node": "ceed296fe500c3fac9541e31dad860cb49c89e45",
1256 "parents": [
1256 "parents": [
1257 "f2890a05fea49bfaf9fb27ed5490894eba32da78"
1257 "f2890a05fea49bfaf9fb27ed5490894eba32da78"
1258 ],
1258 ],
1259 "phase": "draft",
1259 "phase": "draft",
1260 "tags": [],
1260 "tags": [],
1261 "user": "test"
1261 "user": "test"
1262 },
1262 },
1263 {
1263 {
1264 "bookmarks": [],
1264 "bookmarks": [],
1265 "branch": "default",
1265 "branch": "default",
1266 "date": [
1266 "date": [
1267 0.0,
1267 0.0,
1268 0
1268 0
1269 ],
1269 ],
1270 "desc": "another commit to da/foo",
1270 "desc": "another commit to da/foo",
1271 "node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
1271 "node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
1272 "parents": [
1272 "parents": [
1273 "93a8ce14f89156426b7fa981af8042da53f03aa0"
1273 "93a8ce14f89156426b7fa981af8042da53f03aa0"
1274 ],
1274 ],
1275 "phase": "draft",
1275 "phase": "draft",
1276 "tags": [
1276 "tags": [
1277 "tag2"
1277 "tag2"
1278 ],
1278 ],
1279 "user": "test"
1279 "user": "test"
1280 },
1280 },
1281 {
1281 {
1282 "bookmarks": [],
1282 "bookmarks": [],
1283 "branch": "default",
1283 "branch": "default",
1284 "date": [
1284 "date": [
1285 0.0,
1285 0.0,
1286 0
1286 0
1287 ],
1287 ],
1288 "desc": "create tag",
1288 "desc": "create tag",
1289 "node": "93a8ce14f89156426b7fa981af8042da53f03aa0",
1289 "node": "93a8ce14f89156426b7fa981af8042da53f03aa0",
1290 "parents": [
1290 "parents": [
1291 "78896eb0e102174ce9278438a95e12543e4367a7"
1291 "78896eb0e102174ce9278438a95e12543e4367a7"
1292 ],
1292 ],
1293 "phase": "public",
1293 "phase": "public",
1294 "tags": [],
1294 "tags": [],
1295 "user": "test"
1295 "user": "test"
1296 },
1296 },
1297 {
1297 {
1298 "bookmarks": [],
1298 "bookmarks": [],
1299 "branch": "default",
1299 "branch": "default",
1300 "date": [
1300 "date": [
1301 0.0,
1301 0.0,
1302 0
1302 0
1303 ],
1303 ],
1304 "desc": "move foo",
1304 "desc": "move foo",
1305 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
1305 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
1306 "parents": [
1306 "parents": [
1307 "8d7c456572acf3557e8ed8a07286b10c408bcec5"
1307 "8d7c456572acf3557e8ed8a07286b10c408bcec5"
1308 ],
1308 ],
1309 "phase": "public",
1309 "phase": "public",
1310 "tags": [
1310 "tags": [
1311 "tag1"
1311 "tag1"
1312 ],
1312 ],
1313 "user": "test"
1313 "user": "test"
1314 },
1314 },
1315 {
1315 {
1316 "bookmarks": [
1316 "bookmarks": [
1317 "bookmark1"
1317 "bookmark1"
1318 ],
1318 ],
1319 "branch": "default",
1319 "branch": "default",
1320 "date": [
1320 "date": [
1321 0.0,
1321 0.0,
1322 0
1322 0
1323 ],
1323 ],
1324 "desc": "modify da/foo",
1324 "desc": "modify da/foo",
1325 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
1325 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
1326 "parents": [
1326 "parents": [
1327 "f8bbb9024b10f93cdbb8d940337398291d40dea8"
1327 "f8bbb9024b10f93cdbb8d940337398291d40dea8"
1328 ],
1328 ],
1329 "phase": "public",
1329 "phase": "public",
1330 "tags": [],
1330 "tags": [],
1331 "user": "test"
1331 "user": "test"
1332 },
1332 },
1333 {
1333 {
1334 "bookmarks": [],
1334 "bookmarks": [],
1335 "branch": "default",
1335 "branch": "default",
1336 "date": [
1336 "date": [
1337 0.0,
1337 0.0,
1338 0
1338 0
1339 ],
1339 ],
1340 "desc": "modify foo",
1340 "desc": "modify foo",
1341 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
1341 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
1342 "parents": [
1342 "parents": [
1343 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1343 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1344 ],
1344 ],
1345 "phase": "public",
1345 "phase": "public",
1346 "tags": [],
1346 "tags": [],
1347 "user": "test"
1347 "user": "test"
1348 },
1348 },
1349 {
1349 {
1350 "bookmarks": [],
1350 "bookmarks": [],
1351 "branch": "default",
1351 "branch": "default",
1352 "date": [
1352 "date": [
1353 0.0,
1353 0.0,
1354 0
1354 0
1355 ],
1355 ],
1356 "desc": "initial",
1356 "desc": "initial",
1357 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
1357 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
1358 "parents": [],
1358 "parents": [],
1359 "phase": "public",
1359 "phase": "public",
1360 "tags": [],
1360 "tags": [],
1361 "user": "test"
1361 "user": "test"
1362 }
1362 }
1363 ],
1363 ],
1364 "tags": [
1364 "tags": [
1365 {
1365 {
1366 "date": [
1366 "date": [
1367 0.0,
1367 0.0,
1368 0
1368 0
1369 ],
1369 ],
1370 "node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
1370 "node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
1371 "tag": "tag2"
1371 "tag": "tag2"
1372 },
1372 },
1373 {
1373 {
1374 "date": [
1374 "date": [
1375 0.0,
1375 0.0,
1376 0
1376 0
1377 ],
1377 ],
1378 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
1378 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
1379 "tag": "tag1"
1379 "tag": "tag1"
1380 }
1380 }
1381 ]
1381 ]
1382 }
1382 }
1383
1383
1384 $ request json-changelog?rev=create
1384 $ request json-changelog?rev=create
1385 200 Script output follows
1385 200 Script output follows
1386
1386
1387 {
1387 {
1388 "entries": [
1388 "entries": [
1389 {
1389 {
1390 "bookmarks": [],
1390 "bookmarks": [],
1391 "branch": "test-branch",
1391 "branch": "test-branch",
1392 "date": [
1392 "date": [
1393 0.0,
1393 0.0,
1394 0
1394 0
1395 ],
1395 ],
1396 "desc": "create test branch",
1396 "desc": "create test branch",
1397 "node": "6ab967a8ab3489227a83f80e920faa039a71819f",
1397 "node": "6ab967a8ab3489227a83f80e920faa039a71819f",
1398 "parents": [
1398 "parents": [
1399 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1399 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1400 ],
1400 ],
1401 "phase": "draft",
1401 "phase": "draft",
1402 "tags": [],
1402 "tags": [],
1403 "user": "test"
1403 "user": "test"
1404 },
1404 },
1405 {
1405 {
1406 "bookmarks": [
1406 "bookmarks": [
1407 "bookmark2"
1407 "bookmark2"
1408 ],
1408 ],
1409 "branch": "default",
1409 "branch": "default",
1410 "date": [
1410 "date": [
1411 0.0,
1411 0.0,
1412 0
1412 0
1413 ],
1413 ],
1414 "desc": "create tag2",
1414 "desc": "create tag2",
1415 "node": "ceed296fe500c3fac9541e31dad860cb49c89e45",
1415 "node": "ceed296fe500c3fac9541e31dad860cb49c89e45",
1416 "parents": [
1416 "parents": [
1417 "f2890a05fea49bfaf9fb27ed5490894eba32da78"
1417 "f2890a05fea49bfaf9fb27ed5490894eba32da78"
1418 ],
1418 ],
1419 "phase": "draft",
1419 "phase": "draft",
1420 "tags": [],
1420 "tags": [],
1421 "user": "test"
1421 "user": "test"
1422 },
1422 },
1423 {
1423 {
1424 "bookmarks": [],
1424 "bookmarks": [],
1425 "branch": "default",
1425 "branch": "default",
1426 "date": [
1426 "date": [
1427 0.0,
1427 0.0,
1428 0
1428 0
1429 ],
1429 ],
1430 "desc": "create tag",
1430 "desc": "create tag",
1431 "node": "93a8ce14f89156426b7fa981af8042da53f03aa0",
1431 "node": "93a8ce14f89156426b7fa981af8042da53f03aa0",
1432 "parents": [
1432 "parents": [
1433 "78896eb0e102174ce9278438a95e12543e4367a7"
1433 "78896eb0e102174ce9278438a95e12543e4367a7"
1434 ],
1434 ],
1435 "phase": "public",
1435 "phase": "public",
1436 "tags": [],
1436 "tags": [],
1437 "user": "test"
1437 "user": "test"
1438 }
1438 }
1439 ],
1439 ],
1440 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
1440 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
1441 "query": "create"
1441 "query": "create"
1442 }
1442 }
1443
1443
1444 filediff/{revision}/{path} shows changes to a file in a revision
1444 filediff/{revision}/{path} shows changes to a file in a revision
1445
1445
1446 $ request json-diff/f8bbb9024b10/foo
1446 $ request json-diff/f8bbb9024b10/foo
1447 200 Script output follows
1447 200 Script output follows
1448
1448
1449 {
1449 {
1450 "author": "test",
1450 "author": "test",
1451 "children": [],
1451 "children": [],
1452 "date": [
1452 "date": [
1453 0.0,
1453 0.0,
1454 0
1454 0
1455 ],
1455 ],
1456 "desc": "modify foo",
1456 "desc": "modify foo",
1457 "diff": [
1457 "diff": [
1458 {
1458 {
1459 "blockno": 1,
1459 "blockno": 1,
1460 "lines": [
1460 "lines": [
1461 {
1461 {
1462 "l": "--- a/foo\tThu Jan 01 00:00:00 1970 +0000\n",
1462 "l": "--- a/foo\tThu Jan 01 00:00:00 1970 +0000\n",
1463 "n": 1,
1463 "n": 1,
1464 "t": "-"
1464 "t": "-"
1465 },
1465 },
1466 {
1466 {
1467 "l": "+++ b/foo\tThu Jan 01 00:00:00 1970 +0000\n",
1467 "l": "+++ b/foo\tThu Jan 01 00:00:00 1970 +0000\n",
1468 "n": 2,
1468 "n": 2,
1469 "t": "+"
1469 "t": "+"
1470 },
1470 },
1471 {
1471 {
1472 "l": "@@ -1,1 +1,1 @@\n",
1472 "l": "@@ -1,1 +1,1 @@\n",
1473 "n": 3,
1473 "n": 3,
1474 "t": "@"
1474 "t": "@"
1475 },
1475 },
1476 {
1476 {
1477 "l": "-foo\n",
1477 "l": "-foo\n",
1478 "n": 4,
1478 "n": 4,
1479 "t": "-"
1479 "t": "-"
1480 },
1480 },
1481 {
1481 {
1482 "l": "+bar\n",
1482 "l": "+bar\n",
1483 "n": 5,
1483 "n": 5,
1484 "t": "+"
1484 "t": "+"
1485 }
1485 }
1486 ]
1486 ]
1487 }
1487 }
1488 ],
1488 ],
1489 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
1489 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
1490 "parents": [
1490 "parents": [
1491 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1491 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1492 ],
1492 ],
1493 "path": "foo"
1493 "path": "foo"
1494 }
1494 }
1495
1495
1496 comparison/{revision}/{path} shows information about before and after for a file
1496 comparison/{revision}/{path} shows information about before and after for a file
1497
1497
1498 $ request json-comparison/f8bbb9024b10/foo
1498 $ request json-comparison/f8bbb9024b10/foo
1499 200 Script output follows
1499 200 Script output follows
1500
1500
1501 {
1501 {
1502 "author": "test",
1502 "author": "test",
1503 "children": [],
1503 "children": [],
1504 "comparison": [
1504 "comparison": [
1505 {
1505 {
1506 "lines": [
1506 "lines": [
1507 {
1507 {
1508 "ll": "foo",
1508 "ll": "foo",
1509 "ln": 1,
1509 "ln": 1,
1510 "rl": "bar",
1510 "rl": "bar",
1511 "rn": 1,
1511 "rn": 1,
1512 "t": "replace"
1512 "t": "replace"
1513 }
1513 }
1514 ]
1514 ]
1515 }
1515 }
1516 ],
1516 ],
1517 "date": [
1517 "date": [
1518 0.0,
1518 0.0,
1519 0
1519 0
1520 ],
1520 ],
1521 "desc": "modify foo",
1521 "desc": "modify foo",
1522 "leftnode": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
1522 "leftnode": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
1523 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
1523 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
1524 "parents": [
1524 "parents": [
1525 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1525 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1526 ],
1526 ],
1527 "path": "foo",
1527 "path": "foo",
1528 "rightnode": "f8bbb9024b10f93cdbb8d940337398291d40dea8"
1528 "rightnode": "f8bbb9024b10f93cdbb8d940337398291d40dea8"
1529 }
1529 }
1530
1530
1531 annotate/{revision}/{path} shows annotations for each line
1531 annotate/{revision}/{path} shows annotations for each line
1532
1532
1533 $ request json-annotate/f8bbb9024b10/foo
1533 $ request json-annotate/f8bbb9024b10/foo
1534 200 Script output follows
1534 200 Script output follows
1535
1535
1536 {
1536 {
1537 "abspath": "foo",
1537 "abspath": "foo",
1538 "annotate": [
1538 "annotate": [
1539 {
1539 {
1540 "abspath": "foo",
1540 "abspath": "foo",
1541 "author": "test",
1541 "author": "test",
1542 "desc": "modify foo",
1542 "desc": "modify foo",
1543 "line": "bar\n",
1543 "line": "bar\n",
1544 "lineno": 1,
1544 "lineno": 1,
1545 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
1545 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
1546 "revdate": [
1546 "revdate": [
1547 0.0,
1547 0.0,
1548 0
1548 0
1549 ],
1549 ],
1550 "targetline": 1
1550 "targetline": 1
1551 }
1551 }
1552 ],
1552 ],
1553 "author": "test",
1553 "author": "test",
1554 "children": [],
1554 "children": [],
1555 "date": [
1555 "date": [
1556 0.0,
1556 0.0,
1557 0
1557 0
1558 ],
1558 ],
1559 "desc": "modify foo",
1559 "desc": "modify foo",
1560 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
1560 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
1561 "parents": [
1561 "parents": [
1562 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1562 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1563 ],
1563 ],
1564 "permissions": ""
1564 "permissions": ""
1565 }
1565 }
1566
1566
1567 filelog/{revision}/{path} shows history of a single file
1567 filelog/{revision}/{path} shows history of a single file
1568
1568
1569 $ request json-filelog/f8bbb9024b10/foo
1569 $ request json-filelog/f8bbb9024b10/foo
1570 200 Script output follows
1570 200 Script output follows
1571
1571
1572 {
1572 {
1573 "entries": [
1573 "entries": [
1574 {
1574 {
1575 "bookmarks": [],
1575 "bookmarks": [],
1576 "branch": "default",
1576 "branch": "default",
1577 "date": [
1577 "date": [
1578 0.0,
1578 0.0,
1579 0
1579 0
1580 ],
1580 ],
1581 "desc": "modify foo",
1581 "desc": "modify foo",
1582 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
1582 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
1583 "parents": [
1583 "parents": [
1584 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1584 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1585 ],
1585 ],
1586 "phase": "public",
1586 "phase": "public",
1587 "tags": [],
1587 "tags": [],
1588 "user": "test"
1588 "user": "test"
1589 },
1589 },
1590 {
1590 {
1591 "bookmarks": [],
1591 "bookmarks": [],
1592 "branch": "default",
1592 "branch": "default",
1593 "date": [
1593 "date": [
1594 0.0,
1594 0.0,
1595 0
1595 0
1596 ],
1596 ],
1597 "desc": "initial",
1597 "desc": "initial",
1598 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
1598 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
1599 "parents": [],
1599 "parents": [],
1600 "phase": "public",
1600 "phase": "public",
1601 "tags": [],
1601 "tags": [],
1602 "user": "test"
1602 "user": "test"
1603 }
1603 }
1604 ]
1604 ]
1605 }
1605 }
1606
1606
1607 $ request json-filelog/cc725e08502a/da/foo
1607 $ request json-filelog/cc725e08502a/da/foo
1608 200 Script output follows
1608 200 Script output follows
1609
1609
1610 {
1610 {
1611 "entries": [
1611 "entries": [
1612 {
1612 {
1613 "bookmarks": [],
1613 "bookmarks": [],
1614 "branch": "default",
1614 "branch": "default",
1615 "date": [
1615 "date": [
1616 0.0,
1616 0.0,
1617 0
1617 0
1618 ],
1618 ],
1619 "desc": "another commit to da/foo",
1619 "desc": "another commit to da/foo",
1620 "node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
1620 "node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
1621 "parents": [
1621 "parents": [
1622 "8d7c456572acf3557e8ed8a07286b10c408bcec5"
1622 "8d7c456572acf3557e8ed8a07286b10c408bcec5"
1623 ],
1623 ],
1624 "phase": "draft",
1624 "phase": "draft",
1625 "tags": [
1625 "tags": [
1626 "tag2"
1626 "tag2"
1627 ],
1627 ],
1628 "user": "test"
1628 "user": "test"
1629 },
1629 },
1630 {
1630 {
1631 "bookmarks": [
1631 "bookmarks": [
1632 "bookmark1"
1632 "bookmark1"
1633 ],
1633 ],
1634 "branch": "default",
1634 "branch": "default",
1635 "date": [
1635 "date": [
1636 0.0,
1636 0.0,
1637 0
1637 0
1638 ],
1638 ],
1639 "desc": "modify da/foo",
1639 "desc": "modify da/foo",
1640 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
1640 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
1641 "parents": [
1641 "parents": [
1642 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1642 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1643 ],
1643 ],
1644 "phase": "public",
1644 "phase": "public",
1645 "tags": [],
1645 "tags": [],
1646 "user": "test"
1646 "user": "test"
1647 },
1647 },
1648 {
1648 {
1649 "bookmarks": [],
1649 "bookmarks": [],
1650 "branch": "default",
1650 "branch": "default",
1651 "date": [
1651 "date": [
1652 0.0,
1652 0.0,
1653 0
1653 0
1654 ],
1654 ],
1655 "desc": "initial",
1655 "desc": "initial",
1656 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
1656 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
1657 "parents": [],
1657 "parents": [],
1658 "phase": "public",
1658 "phase": "public",
1659 "tags": [],
1659 "tags": [],
1660 "user": "test"
1660 "user": "test"
1661 }
1661 }
1662 ]
1662 ]
1663 }
1663 }
1664
1664
1665 (archive/ doesn't use templating, so ignore it)
1665 (archive/ doesn't use templating, so ignore it)
1666
1666
1667 (static/ doesn't use templating, so ignore it)
1667 (static/ doesn't use templating, so ignore it)
1668
1668
1669 graph/ shows information that can be used to render a graph of the DAG
1669 graph/ shows information that can be used to render a graph of the DAG
1670
1670
1671 $ request json-graph
1671 $ request json-graph
1672 200 Script output follows
1672 200 Script output follows
1673
1673
1674 {
1674 {
1675 "changeset_count": 10,
1675 "changeset_count": 10,
1676 "changesets": [
1676 "changesets": [
1677 {
1677 {
1678 "bookmarks": [],
1678 "bookmarks": [],
1679 "branch": "default",
1679 "branch": "default",
1680 "col": 0,
1680 "col": 0,
1681 "color": 1,
1681 "color": 1,
1682 "date": [
1682 "date": [
1683 0.0,
1683 0.0,
1684 0
1684 0
1685 ],
1685 ],
1686 "desc": "merge test-branch into default",
1686 "desc": "merge test-branch into default",
1687 "edges": [
1687 "edges": [
1688 {
1688 {
1689 "bcolor": "",
1689 "bcolor": "",
1690 "col": 0,
1690 "col": 0,
1691 "color": 1,
1691 "color": 1,
1692 "nextcol": 0,
1692 "nextcol": 0,
1693 "width": -1
1693 "width": -1
1694 },
1694 },
1695 {
1695 {
1696 "bcolor": "",
1696 "bcolor": "",
1697 "col": 0,
1697 "col": 0,
1698 "color": 1,
1698 "color": 1,
1699 "nextcol": 1,
1699 "nextcol": 1,
1700 "width": -1
1700 "width": -1
1701 }
1701 }
1702 ],
1702 ],
1703 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
1703 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
1704 "parents": [
1704 "parents": [
1705 "ceed296fe500c3fac9541e31dad860cb49c89e45",
1705 "ceed296fe500c3fac9541e31dad860cb49c89e45",
1706 "ed66c30e87eb65337c05a4229efaa5f1d5285a90"
1706 "ed66c30e87eb65337c05a4229efaa5f1d5285a90"
1707 ],
1707 ],
1708 "phase": "draft",
1708 "phase": "draft",
1709 "row": 0,
1709 "row": 0,
1710 "tags": [
1710 "tags": [
1711 "tip"
1711 "tip"
1712 ],
1712 ],
1713 "user": "test"
1713 "user": "test"
1714 },
1714 },
1715 {
1715 {
1716 "bookmarks": [],
1716 "bookmarks": [],
1717 "branch": "test-branch",
1717 "branch": "test-branch",
1718 "col": 1,
1718 "col": 1,
1719 "color": 2,
1719 "color": 2,
1720 "date": [
1720 "date": [
1721 0.0,
1721 0.0,
1722 0
1722 0
1723 ],
1723 ],
1724 "desc": "another commit in test-branch",
1724 "desc": "another commit in test-branch",
1725 "edges": [
1725 "edges": [
1726 {
1726 {
1727 "bcolor": "",
1727 "bcolor": "",
1728 "col": 0,
1728 "col": 0,
1729 "color": 1,
1729 "color": 1,
1730 "nextcol": 0,
1730 "nextcol": 0,
1731 "width": -1
1731 "width": -1
1732 },
1732 },
1733 {
1733 {
1734 "bcolor": "",
1734 "bcolor": "",
1735 "col": 1,
1735 "col": 1,
1736 "color": 2,
1736 "color": 2,
1737 "nextcol": 1,
1737 "nextcol": 1,
1738 "width": -1
1738 "width": -1
1739 }
1739 }
1740 ],
1740 ],
1741 "node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
1741 "node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
1742 "parents": [
1742 "parents": [
1743 "6ab967a8ab3489227a83f80e920faa039a71819f"
1743 "6ab967a8ab3489227a83f80e920faa039a71819f"
1744 ],
1744 ],
1745 "phase": "draft",
1745 "phase": "draft",
1746 "row": 1,
1746 "row": 1,
1747 "tags": [],
1747 "tags": [],
1748 "user": "test"
1748 "user": "test"
1749 },
1749 },
1750 {
1750 {
1751 "bookmarks": [],
1751 "bookmarks": [],
1752 "branch": "test-branch",
1752 "branch": "test-branch",
1753 "col": 1,
1753 "col": 1,
1754 "color": 2,
1754 "color": 2,
1755 "date": [
1755 "date": [
1756 0.0,
1756 0.0,
1757 0
1757 0
1758 ],
1758 ],
1759 "desc": "create test branch",
1759 "desc": "create test branch",
1760 "edges": [
1760 "edges": [
1761 {
1761 {
1762 "bcolor": "",
1762 "bcolor": "",
1763 "col": 0,
1763 "col": 0,
1764 "color": 1,
1764 "color": 1,
1765 "nextcol": 0,
1765 "nextcol": 0,
1766 "width": -1
1766 "width": -1
1767 },
1767 },
1768 {
1768 {
1769 "bcolor": "",
1769 "bcolor": "",
1770 "col": 1,
1770 "col": 1,
1771 "color": 2,
1771 "color": 2,
1772 "nextcol": 1,
1772 "nextcol": 1,
1773 "width": -1
1773 "width": -1
1774 }
1774 }
1775 ],
1775 ],
1776 "node": "6ab967a8ab3489227a83f80e920faa039a71819f",
1776 "node": "6ab967a8ab3489227a83f80e920faa039a71819f",
1777 "parents": [
1777 "parents": [
1778 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1778 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1779 ],
1779 ],
1780 "phase": "draft",
1780 "phase": "draft",
1781 "row": 2,
1781 "row": 2,
1782 "tags": [],
1782 "tags": [],
1783 "user": "test"
1783 "user": "test"
1784 },
1784 },
1785 {
1785 {
1786 "bookmarks": [
1786 "bookmarks": [
1787 "bookmark2"
1787 "bookmark2"
1788 ],
1788 ],
1789 "branch": "default",
1789 "branch": "default",
1790 "col": 0,
1790 "col": 0,
1791 "color": 1,
1791 "color": 1,
1792 "date": [
1792 "date": [
1793 0.0,
1793 0.0,
1794 0
1794 0
1795 ],
1795 ],
1796 "desc": "create tag2",
1796 "desc": "create tag2",
1797 "edges": [
1797 "edges": [
1798 {
1798 {
1799 "bcolor": "",
1799 "bcolor": "",
1800 "col": 0,
1800 "col": 0,
1801 "color": 1,
1801 "color": 1,
1802 "nextcol": 0,
1802 "nextcol": 0,
1803 "width": -1
1803 "width": -1
1804 },
1804 },
1805 {
1805 {
1806 "bcolor": "",
1806 "bcolor": "",
1807 "col": 1,
1807 "col": 1,
1808 "color": 2,
1808 "color": 2,
1809 "nextcol": 1,
1809 "nextcol": 1,
1810 "width": -1
1810 "width": -1
1811 }
1811 }
1812 ],
1812 ],
1813 "node": "ceed296fe500c3fac9541e31dad860cb49c89e45",
1813 "node": "ceed296fe500c3fac9541e31dad860cb49c89e45",
1814 "parents": [
1814 "parents": [
1815 "f2890a05fea49bfaf9fb27ed5490894eba32da78"
1815 "f2890a05fea49bfaf9fb27ed5490894eba32da78"
1816 ],
1816 ],
1817 "phase": "draft",
1817 "phase": "draft",
1818 "row": 3,
1818 "row": 3,
1819 "tags": [],
1819 "tags": [],
1820 "user": "test"
1820 "user": "test"
1821 },
1821 },
1822 {
1822 {
1823 "bookmarks": [],
1823 "bookmarks": [],
1824 "branch": "default",
1824 "branch": "default",
1825 "col": 0,
1825 "col": 0,
1826 "color": 1,
1826 "color": 1,
1827 "date": [
1827 "date": [
1828 0.0,
1828 0.0,
1829 0
1829 0
1830 ],
1830 ],
1831 "desc": "another commit to da/foo",
1831 "desc": "another commit to da/foo",
1832 "edges": [
1832 "edges": [
1833 {
1833 {
1834 "bcolor": "",
1834 "bcolor": "",
1835 "col": 0,
1835 "col": 0,
1836 "color": 1,
1836 "color": 1,
1837 "nextcol": 0,
1837 "nextcol": 0,
1838 "width": -1
1838 "width": -1
1839 },
1839 },
1840 {
1840 {
1841 "bcolor": "",
1841 "bcolor": "",
1842 "col": 1,
1842 "col": 1,
1843 "color": 2,
1843 "color": 2,
1844 "nextcol": 1,
1844 "nextcol": 1,
1845 "width": -1
1845 "width": -1
1846 }
1846 }
1847 ],
1847 ],
1848 "node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
1848 "node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
1849 "parents": [
1849 "parents": [
1850 "93a8ce14f89156426b7fa981af8042da53f03aa0"
1850 "93a8ce14f89156426b7fa981af8042da53f03aa0"
1851 ],
1851 ],
1852 "phase": "draft",
1852 "phase": "draft",
1853 "row": 4,
1853 "row": 4,
1854 "tags": [
1854 "tags": [
1855 "tag2"
1855 "tag2"
1856 ],
1856 ],
1857 "user": "test"
1857 "user": "test"
1858 },
1858 },
1859 {
1859 {
1860 "bookmarks": [],
1860 "bookmarks": [],
1861 "branch": "default",
1861 "branch": "default",
1862 "col": 0,
1862 "col": 0,
1863 "color": 1,
1863 "color": 1,
1864 "date": [
1864 "date": [
1865 0.0,
1865 0.0,
1866 0
1866 0
1867 ],
1867 ],
1868 "desc": "create tag",
1868 "desc": "create tag",
1869 "edges": [
1869 "edges": [
1870 {
1870 {
1871 "bcolor": "",
1871 "bcolor": "",
1872 "col": 0,
1872 "col": 0,
1873 "color": 1,
1873 "color": 1,
1874 "nextcol": 0,
1874 "nextcol": 0,
1875 "width": -1
1875 "width": -1
1876 },
1876 },
1877 {
1877 {
1878 "bcolor": "",
1878 "bcolor": "",
1879 "col": 1,
1879 "col": 1,
1880 "color": 2,
1880 "color": 2,
1881 "nextcol": 1,
1881 "nextcol": 1,
1882 "width": -1
1882 "width": -1
1883 }
1883 }
1884 ],
1884 ],
1885 "node": "93a8ce14f89156426b7fa981af8042da53f03aa0",
1885 "node": "93a8ce14f89156426b7fa981af8042da53f03aa0",
1886 "parents": [
1886 "parents": [
1887 "78896eb0e102174ce9278438a95e12543e4367a7"
1887 "78896eb0e102174ce9278438a95e12543e4367a7"
1888 ],
1888 ],
1889 "phase": "public",
1889 "phase": "public",
1890 "row": 5,
1890 "row": 5,
1891 "tags": [],
1891 "tags": [],
1892 "user": "test"
1892 "user": "test"
1893 },
1893 },
1894 {
1894 {
1895 "bookmarks": [],
1895 "bookmarks": [],
1896 "branch": "default",
1896 "branch": "default",
1897 "col": 0,
1897 "col": 0,
1898 "color": 1,
1898 "color": 1,
1899 "date": [
1899 "date": [
1900 0.0,
1900 0.0,
1901 0
1901 0
1902 ],
1902 ],
1903 "desc": "move foo",
1903 "desc": "move foo",
1904 "edges": [
1904 "edges": [
1905 {
1905 {
1906 "bcolor": "",
1906 "bcolor": "",
1907 "col": 0,
1907 "col": 0,
1908 "color": 1,
1908 "color": 1,
1909 "nextcol": 0,
1909 "nextcol": 0,
1910 "width": -1
1910 "width": -1
1911 },
1911 },
1912 {
1912 {
1913 "bcolor": "",
1913 "bcolor": "",
1914 "col": 1,
1914 "col": 1,
1915 "color": 2,
1915 "color": 2,
1916 "nextcol": 1,
1916 "nextcol": 1,
1917 "width": -1
1917 "width": -1
1918 }
1918 }
1919 ],
1919 ],
1920 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
1920 "node": "78896eb0e102174ce9278438a95e12543e4367a7",
1921 "parents": [
1921 "parents": [
1922 "8d7c456572acf3557e8ed8a07286b10c408bcec5"
1922 "8d7c456572acf3557e8ed8a07286b10c408bcec5"
1923 ],
1923 ],
1924 "phase": "public",
1924 "phase": "public",
1925 "row": 6,
1925 "row": 6,
1926 "tags": [
1926 "tags": [
1927 "tag1"
1927 "tag1"
1928 ],
1928 ],
1929 "user": "test"
1929 "user": "test"
1930 },
1930 },
1931 {
1931 {
1932 "bookmarks": [
1932 "bookmarks": [
1933 "bookmark1"
1933 "bookmark1"
1934 ],
1934 ],
1935 "branch": "default",
1935 "branch": "default",
1936 "col": 0,
1936 "col": 0,
1937 "color": 1,
1937 "color": 1,
1938 "date": [
1938 "date": [
1939 0.0,
1939 0.0,
1940 0
1940 0
1941 ],
1941 ],
1942 "desc": "modify da/foo",
1942 "desc": "modify da/foo",
1943 "edges": [
1943 "edges": [
1944 {
1944 {
1945 "bcolor": "",
1945 "bcolor": "",
1946 "col": 0,
1946 "col": 0,
1947 "color": 1,
1947 "color": 1,
1948 "nextcol": 0,
1948 "nextcol": 0,
1949 "width": -1
1949 "width": -1
1950 },
1950 },
1951 {
1951 {
1952 "bcolor": "",
1952 "bcolor": "",
1953 "col": 1,
1953 "col": 1,
1954 "color": 2,
1954 "color": 2,
1955 "nextcol": 1,
1955 "nextcol": 1,
1956 "width": -1
1956 "width": -1
1957 }
1957 }
1958 ],
1958 ],
1959 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
1959 "node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
1960 "parents": [
1960 "parents": [
1961 "f8bbb9024b10f93cdbb8d940337398291d40dea8"
1961 "f8bbb9024b10f93cdbb8d940337398291d40dea8"
1962 ],
1962 ],
1963 "phase": "public",
1963 "phase": "public",
1964 "row": 7,
1964 "row": 7,
1965 "tags": [],
1965 "tags": [],
1966 "user": "test"
1966 "user": "test"
1967 },
1967 },
1968 {
1968 {
1969 "bookmarks": [],
1969 "bookmarks": [],
1970 "branch": "default",
1970 "branch": "default",
1971 "col": 0,
1971 "col": 0,
1972 "color": 1,
1972 "color": 1,
1973 "date": [
1973 "date": [
1974 0.0,
1974 0.0,
1975 0
1975 0
1976 ],
1976 ],
1977 "desc": "modify foo",
1977 "desc": "modify foo",
1978 "edges": [
1978 "edges": [
1979 {
1979 {
1980 "bcolor": "",
1980 "bcolor": "",
1981 "col": 0,
1981 "col": 0,
1982 "color": 1,
1982 "color": 1,
1983 "nextcol": 0,
1983 "nextcol": 0,
1984 "width": -1
1984 "width": -1
1985 },
1985 },
1986 {
1986 {
1987 "bcolor": "",
1987 "bcolor": "",
1988 "col": 1,
1988 "col": 1,
1989 "color": 2,
1989 "color": 2,
1990 "nextcol": 0,
1990 "nextcol": 0,
1991 "width": -1
1991 "width": -1
1992 }
1992 }
1993 ],
1993 ],
1994 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
1994 "node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
1995 "parents": [
1995 "parents": [
1996 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1996 "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
1997 ],
1997 ],
1998 "phase": "public",
1998 "phase": "public",
1999 "row": 8,
1999 "row": 8,
2000 "tags": [],
2000 "tags": [],
2001 "user": "test"
2001 "user": "test"
2002 },
2002 },
2003 {
2003 {
2004 "bookmarks": [],
2004 "bookmarks": [],
2005 "branch": "default",
2005 "branch": "default",
2006 "col": 0,
2006 "col": 0,
2007 "color": 2,
2007 "color": 2,
2008 "date": [
2008 "date": [
2009 0.0,
2009 0.0,
2010 0
2010 0
2011 ],
2011 ],
2012 "desc": "initial",
2012 "desc": "initial",
2013 "edges": [],
2013 "edges": [],
2014 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
2014 "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
2015 "parents": [],
2015 "parents": [],
2016 "phase": "public",
2016 "phase": "public",
2017 "row": 9,
2017 "row": 9,
2018 "tags": [],
2018 "tags": [],
2019 "user": "test"
2019 "user": "test"
2020 }
2020 }
2021 ],
2021 ],
2022 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7"
2022 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7"
2023 }
2023 }
2024
2024
2025 help/ shows help topics
2025 help/ shows help topics
2026
2026
2027 $ request json-help
2027 $ request json-help
2028 200 Script output follows
2028 200 Script output follows
2029
2029
2030 {
2030 {
2031 "earlycommands": [
2031 "earlycommands": [
2032 {
2032 {
2033 "summary": "abort an unfinished operation (EXPERIMENTAL)",
2033 "summary": "abort an unfinished operation (EXPERIMENTAL)",
2034 "topic": "abort"
2034 "topic": "abort"
2035 },
2035 },
2036 {
2036 {
2037 "summary": "add the specified files on the next commit",
2037 "summary": "add the specified files on the next commit",
2038 "topic": "add"
2038 "topic": "add"
2039 },
2039 },
2040 {
2040 {
2041 "summary": "pull and update to a given revision, no matter what, (EXPERIMENTAL)",
2042 "topic": "admin::chainsaw-update"
2043 },
2044 {
2041 "summary": "show changeset information by line for each file",
2045 "summary": "show changeset information by line for each file",
2042 "topic": "annotate"
2046 "topic": "annotate"
2043 },
2047 },
2044 {
2048 {
2045 "summary": "make a copy of an existing repository",
2049 "summary": "make a copy of an existing repository",
2046 "topic": "clone"
2050 "topic": "clone"
2047 },
2051 },
2048 {
2052 {
2049 "summary": "commit the specified files or all outstanding changes",
2053 "summary": "commit the specified files or all outstanding changes",
2050 "topic": "commit"
2054 "topic": "commit"
2051 },
2055 },
2052 {
2056 {
2053 "summary": "resumes an interrupted operation (EXPERIMENTAL)",
2057 "summary": "resumes an interrupted operation (EXPERIMENTAL)",
2054 "topic": "continue"
2058 "topic": "continue"
2055 },
2059 },
2056 {
2060 {
2057 "summary": "diff repository (or selected files)",
2061 "summary": "diff repository (or selected files)",
2058 "topic": "diff"
2062 "topic": "diff"
2059 },
2063 },
2060 {
2064 {
2061 "summary": "dump the header and diffs for one or more changesets",
2065 "summary": "dump the header and diffs for one or more changesets",
2062 "topic": "export"
2066 "topic": "export"
2063 },
2067 },
2064 {
2068 {
2065 "summary": "forget the specified files on the next commit",
2069 "summary": "forget the specified files on the next commit",
2066 "topic": "forget"
2070 "topic": "forget"
2067 },
2071 },
2068 {
2072 {
2069 "summary": "create a new repository in the given directory",
2073 "summary": "create a new repository in the given directory",
2070 "topic": "init"
2074 "topic": "init"
2071 },
2075 },
2072 {
2076 {
2073 "summary": "show revision history of entire repository or files",
2077 "summary": "show revision history of entire repository or files",
2074 "topic": "log"
2078 "topic": "log"
2075 },
2079 },
2076 {
2080 {
2077 "summary": "merge another revision into working directory",
2081 "summary": "merge another revision into working directory",
2078 "topic": "merge"
2082 "topic": "merge"
2079 },
2083 },
2080 {
2084 {
2081 "summary": "pull changes from the specified source",
2085 "summary": "pull changes from the specified source",
2082 "topic": "pull"
2086 "topic": "pull"
2083 },
2087 },
2084 {
2088 {
2085 "summary": "push changes to the specified destination",
2089 "summary": "push changes to the specified destination",
2086 "topic": "push"
2090 "topic": "push"
2087 },
2091 },
2088 {
2092 {
2089 "summary": "remove the specified files on the next commit",
2093 "summary": "remove the specified files on the next commit",
2090 "topic": "remove"
2094 "topic": "remove"
2091 },
2095 },
2092 {
2096 {
2093 "summary": "start stand-alone webserver",
2097 "summary": "start stand-alone webserver",
2094 "topic": "serve"
2098 "topic": "serve"
2095 },
2099 },
2096 {
2100 {
2097 "summary": "show changed files in the working directory",
2101 "summary": "show changed files in the working directory",
2098 "topic": "status"
2102 "topic": "status"
2099 },
2103 },
2100 {
2104 {
2101 "summary": "summarize working directory state",
2105 "summary": "summarize working directory state",
2102 "topic": "summary"
2106 "topic": "summary"
2103 },
2107 },
2104 {
2108 {
2105 "summary": "update working directory (or switch revisions)",
2109 "summary": "update working directory (or switch revisions)",
2106 "topic": "update"
2110 "topic": "update"
2107 }
2111 }
2108 ],
2112 ],
2109 "othercommands": [
2113 "othercommands": [
2110 {
2114 {
2111 "summary": "add all new files, delete all missing files",
2115 "summary": "add all new files, delete all missing files",
2112 "topic": "addremove"
2116 "topic": "addremove"
2113 },
2117 },
2114 {
2118 {
2115 "summary": "verify the integrity of the repository",
2119 "summary": "verify the integrity of the repository",
2116 "topic": "admin::verify"
2120 "topic": "admin::verify"
2117 },
2121 },
2118 {
2122 {
2119 "summary": "create an unversioned archive of a repository revision",
2123 "summary": "create an unversioned archive of a repository revision",
2120 "topic": "archive"
2124 "topic": "archive"
2121 },
2125 },
2122 {
2126 {
2123 "summary": "reverse effect of earlier changeset",
2127 "summary": "reverse effect of earlier changeset",
2124 "topic": "backout"
2128 "topic": "backout"
2125 },
2129 },
2126 {
2130 {
2127 "summary": "subdivision search of changesets",
2131 "summary": "subdivision search of changesets",
2128 "topic": "bisect"
2132 "topic": "bisect"
2129 },
2133 },
2130 {
2134 {
2131 "summary": "create a new bookmark or list existing bookmarks",
2135 "summary": "create a new bookmark or list existing bookmarks",
2132 "topic": "bookmarks"
2136 "topic": "bookmarks"
2133 },
2137 },
2134 {
2138 {
2135 "summary": "set or show the current branch name",
2139 "summary": "set or show the current branch name",
2136 "topic": "branch"
2140 "topic": "branch"
2137 },
2141 },
2138 {
2142 {
2139 "summary": "list repository named branches",
2143 "summary": "list repository named branches",
2140 "topic": "branches"
2144 "topic": "branches"
2141 },
2145 },
2142 {
2146 {
2143 "summary": "create a bundle file",
2147 "summary": "create a bundle file",
2144 "topic": "bundle"
2148 "topic": "bundle"
2145 },
2149 },
2146 {
2150 {
2147 "summary": "output the current or given revision of files",
2151 "summary": "output the current or given revision of files",
2148 "topic": "cat"
2152 "topic": "cat"
2149 },
2153 },
2150 {
2154 {
2151 "summary": "show combined config settings from all hgrc files",
2155 "summary": "show combined config settings from all hgrc files",
2152 "topic": "config"
2156 "topic": "config"
2153 },
2157 },
2154 {
2158 {
2155 "summary": "mark files as copied for the next commit",
2159 "summary": "mark files as copied for the next commit",
2156 "topic": "copy"
2160 "topic": "copy"
2157 },
2161 },
2158 {
2162 {
2159 "summary": "list tracked files",
2163 "summary": "list tracked files",
2160 "topic": "files"
2164 "topic": "files"
2161 },
2165 },
2162 {
2166 {
2163 "summary": "copy changes from other branches onto the current branch",
2167 "summary": "copy changes from other branches onto the current branch",
2164 "topic": "graft"
2168 "topic": "graft"
2165 },
2169 },
2166 {
2170 {
2167 "summary": "search for a pattern in specified files",
2171 "summary": "search for a pattern in specified files",
2168 "topic": "grep"
2172 "topic": "grep"
2169 },
2173 },
2170 {
2174 {
2171 "summary": "show branch heads",
2175 "summary": "show branch heads",
2172 "topic": "heads"
2176 "topic": "heads"
2173 },
2177 },
2174 {
2178 {
2175 "summary": "show help for a given topic or a help overview",
2179 "summary": "show help for a given topic or a help overview",
2176 "topic": "help"
2180 "topic": "help"
2177 },
2181 },
2178 {
2182 {
2179 "summary": "identify the working directory or specified revision",
2183 "summary": "identify the working directory or specified revision",
2180 "topic": "identify"
2184 "topic": "identify"
2181 },
2185 },
2182 {
2186 {
2183 "summary": "import an ordered set of patches",
2187 "summary": "import an ordered set of patches",
2184 "topic": "import"
2188 "topic": "import"
2185 },
2189 },
2186 {
2190 {
2187 "summary": "show new changesets found in source",
2191 "summary": "show new changesets found in source",
2188 "topic": "incoming"
2192 "topic": "incoming"
2189 },
2193 },
2190 {
2194 {
2191 "summary": "output the current or given revision of the project manifest",
2195 "summary": "output the current or given revision of the project manifest",
2192 "topic": "manifest"
2196 "topic": "manifest"
2193 },
2197 },
2194 {
2198 {
2195 "summary": "show changesets not found in the destination",
2199 "summary": "show changesets not found in the destination",
2196 "topic": "outgoing"
2200 "topic": "outgoing"
2197 },
2201 },
2198 {
2202 {
2199 "summary": "show aliases for remote repositories",
2203 "summary": "show aliases for remote repositories",
2200 "topic": "paths"
2204 "topic": "paths"
2201 },
2205 },
2202 {
2206 {
2203 "summary": "set or show the current phase name",
2207 "summary": "set or show the current phase name",
2204 "topic": "phase"
2208 "topic": "phase"
2205 },
2209 },
2206 {
2210 {
2207 "summary": "removes files not tracked by Mercurial",
2211 "summary": "removes files not tracked by Mercurial",
2208 "topic": "purge"
2212 "topic": "purge"
2209 },
2213 },
2210 {
2214 {
2211 "summary": "roll back an interrupted transaction",
2215 "summary": "roll back an interrupted transaction",
2212 "topic": "recover"
2216 "topic": "recover"
2213 },
2217 },
2214 {
2218 {
2215 "summary": "rename files; equivalent of copy + remove",
2219 "summary": "rename files; equivalent of copy + remove",
2216 "topic": "rename"
2220 "topic": "rename"
2217 },
2221 },
2218 {
2222 {
2219 "summary": "redo merges or set/view the merge status of files",
2223 "summary": "redo merges or set/view the merge status of files",
2220 "topic": "resolve"
2224 "topic": "resolve"
2221 },
2225 },
2222 {
2226 {
2223 "summary": "restore files to their checkout state",
2227 "summary": "restore files to their checkout state",
2224 "topic": "revert"
2228 "topic": "revert"
2225 },
2229 },
2226 {
2230 {
2227 "summary": "print the root (top) of the current working directory",
2231 "summary": "print the root (top) of the current working directory",
2228 "topic": "root"
2232 "topic": "root"
2229 },
2233 },
2230 {
2234 {
2231 "summary": "save and set aside changes from the working directory",
2235 "summary": "save and set aside changes from the working directory",
2232 "topic": "shelve"
2236 "topic": "shelve"
2233 },
2237 },
2234 {
2238 {
2235 "summary": "add one or more tags for the current or given revision",
2239 "summary": "add one or more tags for the current or given revision",
2236 "topic": "tag"
2240 "topic": "tag"
2237 },
2241 },
2238 {
2242 {
2239 "summary": "list repository tags",
2243 "summary": "list repository tags",
2240 "topic": "tags"
2244 "topic": "tags"
2241 },
2245 },
2242 {
2246 {
2243 "summary": "apply one or more bundle files",
2247 "summary": "apply one or more bundle files",
2244 "topic": "unbundle"
2248 "topic": "unbundle"
2245 },
2249 },
2246 {
2250 {
2247 "summary": "restore a shelved change to the working directory",
2251 "summary": "restore a shelved change to the working directory",
2248 "topic": "unshelve"
2252 "topic": "unshelve"
2249 },
2253 },
2250 {
2254 {
2251 "summary": "verify the integrity of the repository",
2255 "summary": "verify the integrity of the repository",
2252 "topic": "verify"
2256 "topic": "verify"
2253 },
2257 },
2254 {
2258 {
2255 "summary": "output version and copyright information",
2259 "summary": "output version and copyright information",
2256 "topic": "version"
2260 "topic": "version"
2257 }
2261 }
2258 ],
2262 ],
2259 "topics": [
2263 "topics": [
2260 {
2264 {
2261 "summary": "Bundle File Formats",
2265 "summary": "Bundle File Formats",
2262 "topic": "bundlespec"
2266 "topic": "bundlespec"
2263 },
2267 },
2264 {
2268 {
2265 "summary": "Colorizing Outputs",
2269 "summary": "Colorizing Outputs",
2266 "topic": "color"
2270 "topic": "color"
2267 },
2271 },
2268 {
2272 {
2269 "summary": "Configuration Files",
2273 "summary": "Configuration Files",
2270 "topic": "config"
2274 "topic": "config"
2271 },
2275 },
2272 {
2276 {
2273 "summary": "Date Formats",
2277 "summary": "Date Formats",
2274 "topic": "dates"
2278 "topic": "dates"
2275 },
2279 },
2276 {
2280 {
2277 "summary": "Deprecated Features",
2281 "summary": "Deprecated Features",
2278 "topic": "deprecated"
2282 "topic": "deprecated"
2279 },
2283 },
2280 {
2284 {
2281 "summary": "Diff Formats",
2285 "summary": "Diff Formats",
2282 "topic": "diffs"
2286 "topic": "diffs"
2283 },
2287 },
2284 {
2288 {
2285 "summary": "Environment Variables",
2289 "summary": "Environment Variables",
2286 "topic": "environment"
2290 "topic": "environment"
2287 },
2291 },
2288 {
2292 {
2289 "summary": "Safely rewriting history (EXPERIMENTAL)",
2293 "summary": "Safely rewriting history (EXPERIMENTAL)",
2290 "topic": "evolution"
2294 "topic": "evolution"
2291 },
2295 },
2292 {
2296 {
2293 "summary": "Using Additional Features",
2297 "summary": "Using Additional Features",
2294 "topic": "extensions"
2298 "topic": "extensions"
2295 },
2299 },
2296 {
2300 {
2297 "summary": "Specifying File Sets",
2301 "summary": "Specifying File Sets",
2298 "topic": "filesets"
2302 "topic": "filesets"
2299 },
2303 },
2300 {
2304 {
2301 "summary": "Command-line flags",
2305 "summary": "Command-line flags",
2302 "topic": "flags"
2306 "topic": "flags"
2303 },
2307 },
2304 {
2308 {
2305 "summary": "Glossary",
2309 "summary": "Glossary",
2306 "topic": "glossary"
2310 "topic": "glossary"
2307 },
2311 },
2308 {
2312 {
2309 "summary": "Syntax for Mercurial Ignore Files",
2313 "summary": "Syntax for Mercurial Ignore Files",
2310 "topic": "hgignore"
2314 "topic": "hgignore"
2311 },
2315 },
2312 {
2316 {
2313 "summary": "Configuring hgweb",
2317 "summary": "Configuring hgweb",
2314 "topic": "hgweb"
2318 "topic": "hgweb"
2315 },
2319 },
2316 {
2320 {
2317 "summary": "Technical implementation topics",
2321 "summary": "Technical implementation topics",
2318 "topic": "internals"
2322 "topic": "internals"
2319 },
2323 },
2320 {
2324 {
2321 "summary": "Merge Tools",
2325 "summary": "Merge Tools",
2322 "topic": "merge-tools"
2326 "topic": "merge-tools"
2323 },
2327 },
2324 {
2328 {
2325 "summary": "Pager Support",
2329 "summary": "Pager Support",
2326 "topic": "pager"
2330 "topic": "pager"
2327 },
2331 },
2328 {
2332 {
2329 "summary": "File Name Patterns",
2333 "summary": "File Name Patterns",
2330 "topic": "patterns"
2334 "topic": "patterns"
2331 },
2335 },
2332 {
2336 {
2333 "summary": "Working with Phases",
2337 "summary": "Working with Phases",
2334 "topic": "phases"
2338 "topic": "phases"
2335 },
2339 },
2336 {
2340 {
2337 "summary": "Specifying Revisions",
2341 "summary": "Specifying Revisions",
2338 "topic": "revisions"
2342 "topic": "revisions"
2339 },
2343 },
2340 {
2344 {
2341 "summary": "Rust in Mercurial",
2345 "summary": "Rust in Mercurial",
2342 "topic": "rust"
2346 "topic": "rust"
2343 },
2347 },
2344 {
2348 {
2345 "summary": "Using Mercurial from scripts and automation",
2349 "summary": "Using Mercurial from scripts and automation",
2346 "topic": "scripting"
2350 "topic": "scripting"
2347 },
2351 },
2348 {
2352 {
2349 "summary": "Subrepositories",
2353 "summary": "Subrepositories",
2350 "topic": "subrepos"
2354 "topic": "subrepos"
2351 },
2355 },
2352 {
2356 {
2353 "summary": "Template Usage",
2357 "summary": "Template Usage",
2354 "topic": "templating"
2358 "topic": "templating"
2355 },
2359 },
2356 {
2360 {
2357 "summary": "URL Paths",
2361 "summary": "URL Paths",
2358 "topic": "urls"
2362 "topic": "urls"
2359 }
2363 }
2360 ]
2364 ]
2361 }
2365 }
2362
2366
2363 help/{topic} shows an individual help topic
2367 help/{topic} shows an individual help topic
2364
2368
2365 $ request json-help/phases
2369 $ request json-help/phases
2366 200 Script output follows
2370 200 Script output follows
2367
2371
2368 {
2372 {
2369 "rawdoc": "Working with Phases\n*", (glob)
2373 "rawdoc": "Working with Phases\n*", (glob)
2370 "topic": "phases"
2374 "topic": "phases"
2371 }
2375 }
2372
2376
2373 Error page shouldn't crash
2377 Error page shouldn't crash
2374
2378
2375 $ request json-changeset/deadbeef
2379 $ request json-changeset/deadbeef
2376 404 Not Found
2380 404 Not Found
2377
2381
2378 {
2382 {
2379 "error": "unknown revision 'deadbeef'"
2383 "error": "unknown revision 'deadbeef'"
2380 }
2384 }
2381 [1]
2385 [1]
2382
2386
2383 Commit message with Japanese Kanji 'Noh', which ends with '\x5c'
2387 Commit message with Japanese Kanji 'Noh', which ends with '\x5c'
2384
2388
2385 $ echo foo >> da/foo
2389 $ echo foo >> da/foo
2386 >>> open('msg', 'wb').write(b'\x94\x5c\x0a') and None
2390 >>> open('msg', 'wb').write(b'\x94\x5c\x0a') and None
2387 $ HGENCODING=cp932 hg ci -l msg
2391 $ HGENCODING=cp932 hg ci -l msg
2388
2392
2389 Commit message with null character
2393 Commit message with null character
2390
2394
2391 $ echo foo >> da/foo
2395 $ echo foo >> da/foo
2392 >>> open('msg', 'wb').write(b'commit with null character: \0\n') and None
2396 >>> open('msg', 'wb').write(b'commit with null character: \0\n') and None
2393 $ hg ci -l msg
2397 $ hg ci -l msg
2394 $ rm msg
2398 $ rm msg
2395
2399
2396 Stop and restart with HGENCODING=cp932
2400 Stop and restart with HGENCODING=cp932
2397
2401
2398 $ killdaemons.py
2402 $ killdaemons.py
2399 $ HGENCODING=cp932 hg serve -p $HGPORT -d --pid-file=hg.pid \
2403 $ HGENCODING=cp932 hg serve -p $HGPORT -d --pid-file=hg.pid \
2400 > -A access.log -E error.log
2404 > -A access.log -E error.log
2401 $ cat hg.pid >> $DAEMON_PIDS
2405 $ cat hg.pid >> $DAEMON_PIDS
2402
2406
2403 Test json escape of multibyte characters
2407 Test json escape of multibyte characters
2404
2408
2405 $ request json-filelog/tip/da/foo?revcount=2 | grep '"desc":'
2409 $ request json-filelog/tip/da/foo?revcount=2 | grep '"desc":'
2406 "desc": "commit with null character: \u0000",
2410 "desc": "commit with null character: \u0000",
2407 "desc": "\u80fd",
2411 "desc": "\u80fd",
General Comments 0
You need to be logged in to leave comments. Login now