##// END OF EJS Templates
help: fix internals.changegroups...
Kyle Lippincott -
r31213:9f169b7f default
parent child Browse files
Show More
@@ -1,153 +1,188 b''
1 1 Changegroups are representations of repository revlog data, specifically
2 the changelog, manifest, and filelogs.
2 the changelog data, root/flat manifest data, treemanifest data, and
3 filelogs.
3 4
4 5 There are 3 versions of changegroups: ``1``, ``2``, and ``3``. From a
5 high-level, versions ``1`` and ``2`` are almost exactly the same, with
6 the only difference being a header on entries in the changeset
7 segment. Version ``3`` adds support for exchanging treemanifests and
8 includes revlog flags in the delta header.
6 high-level, versions ``1`` and ``2`` are almost exactly the same, with the
7 only difference being an additional item in the *delta header*. Version
8 ``3`` adds support for revlog flags in the *delta header* and optionally
9 exchanging treemanifests (enabled by setting an option on the
10 ``changegroup`` part in the bundle2).
9 11
10 Changegroups consists of 3 logical segments::
12 Changegroups when not exchanging treemanifests consist of 3 logical
13 segments::
11 14
12 15 +---------------------------------+
13 16 | | | |
14 17 | changeset | manifest | filelogs |
15 18 | | | |
19 | | | |
16 20 +---------------------------------+
17 21
22 When exchanging treemanifests, there are 4 logical segments::
23
24 +-------------------------------------------------+
25 | | | | |
26 | changeset | root | treemanifests | filelogs |
27 | | manifest | | |
28 | | | | |
29 +-------------------------------------------------+
30
18 31 The principle building block of each segment is a *chunk*. A *chunk*
19 32 is a framed piece of data::
20 33
21 34 +---------------------------------------+
22 35 | | |
23 36 | length | data |
24 | (32 bits) | <length> bytes |
37 | (4 bytes) | (<length - 4> bytes) |
25 38 | | |
26 39 +---------------------------------------+
27 40
28 Each chunk starts with a 32-bit big-endian signed integer indicating
29 the length of the raw data that follows.
41 All integers are big-endian signed integers. Each chunk starts with a 32-bit
42 integer indicating the length of the entire chunk (including the length field
43 itself).
30 44
31 There is a special case chunk that has 0 length (``0x00000000``). We
32 call this an *empty chunk*.
45 There is a special case chunk that has a value of 0 for the length
46 (``0x00000000``). We call this an *empty chunk*.
33 47
34 48 Delta Groups
35 49 ============
36 50
37 51 A *delta group* expresses the content of a revlog as a series of deltas,
38 52 or patches against previous revisions.
39 53
40 54 Delta groups consist of 0 or more *chunks* followed by the *empty chunk*
41 55 to signal the end of the delta group::
42 56
43 57 +------------------------------------------------------------------------+
44 58 | | | | | |
45 59 | chunk0 length | chunk0 data | chunk1 length | chunk1 data | 0x0 |
46 | (32 bits) | (various) | (32 bits) | (various) | (32 bits) |
60 | (4 bytes) | (various) | (4 bytes) | (various) | (4 bytes) |
47 61 | | | | | |
48 +------------------------------------------------------------+-----------+
62 +------------------------------------------------------------------------+
49 63
50 64 Each *chunk*'s data consists of the following::
51 65
52 +-----------------------------------------+
53 | | | |
54 | delta header | mdiff header | delta |
55 | (various) | (12 bytes) | (various) |
56 | | | |
57 +-----------------------------------------+
66 +---------------------------------------+
67 | | |
68 | delta header | delta data |
69 | (various by version) | (various) |
70 | | |
71 +---------------------------------------+
58 72
59 The *length* field is the byte length of the remaining 3 logical pieces
60 of data. The *delta* is a diff from an existing entry in the changelog.
73 The *delta data* is a series of *delta*s that describe a diff from an existing
74 entry (either that the recipient already has, or previously specified in the
75 bundlei/changegroup).
61 76
62 77 The *delta header* is different between versions ``1``, ``2``, and
63 78 ``3`` of the changegroup format.
64 79
65 Version 1::
80 Version 1 (headerlen=80)::
66 81
67 82 +------------------------------------------------------+
68 83 | | | | |
69 84 | node | p1 node | p2 node | link node |
70 85 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
71 86 | | | | |
72 87 +------------------------------------------------------+
73 88
74 Version 2::
89 Version 2 (headerlen=100)::
75 90
76 91 +------------------------------------------------------------------+
77 92 | | | | | |
78 93 | node | p1 node | p2 node | base node | link node |
79 94 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
80 95 | | | | | |
81 96 +------------------------------------------------------------------+
82 97
83 Version 3::
98 Version 3 (headerlen=102)::
84 99
85 100 +------------------------------------------------------------------------------+
86 101 | | | | | | |
87 102 | node | p1 node | p2 node | base node | link node | flags |
88 103 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (2 bytes) |
89 104 | | | | | | |
90 105 +------------------------------------------------------------------------------+
91 106
92 The *mdiff header* consists of 3 32-bit big-endian signed integers
93 describing offsets at which to apply the following delta content::
107 The *delta data* consists of ``chunklen - 4 - headerlen`` bytes, which contain a
108 series of *delta*s, densely packed (no separators). These deltas describe a diff
109 from an existing entry (either that the recipient already has, or previously
110 specified in the bundle/changegroup). The format is described more fully in
111 ``hg help internals.bdiff``, but briefly:
94 112
95 +-------------------------------------+
96 | | | |
97 | offset | old length | new length |
98 | (32 bits) | (32 bits) | (32 bits) |
99 | | | |
100 +-------------------------------------+
113 +---------------------------------------------------------------+
114 | | | | |
115 | start offset | end offset | new length | content |
116 | (4 bytes) | (4 bytes) | (4 bytes) | (<new length> bytes) |
117 | | | | |
118 +---------------------------------------------------------------+
119
120 Please note that the length field in the delta data does *not* include itself.
101 121
102 122 In version 1, the delta is always applied against the previous node from
103 123 the changegroup or the first parent if this is the first entry in the
104 124 changegroup.
105 125
106 In version 2, the delta base node is encoded in the entry in the
126 In version 2 and up, the delta base node is encoded in the entry in the
107 127 changegroup. This allows the delta to be expressed against any parent,
108 128 which can result in smaller deltas and more efficient encoding of data.
109 129
110 130 Changeset Segment
111 131 =================
112 132
113 133 The *changeset segment* consists of a single *delta group* holding
114 changelog data. It is followed by an *empty chunk* to denote the
115 boundary to the *manifests segment*.
134 changelog data. The *empty chunk* at the end of the *delta group* denotes
135 the boundary to the *manifest segment*.
116 136
117 137 Manifest Segment
118 138 ================
119 139
120 The *manifest segment* consists of a single *delta group* holding
121 manifest data. It is followed by an *empty chunk* to denote the boundary
122 to the *filelogs segment*.
140 The *manifest segment* consists of a single *delta group* holding manifest
141 data. If treemanifests are in use, it contains only the manifest for the
142 root directory of the repository. Otherwise, it contains the entire
143 manifest data. The *empty chunk* at the end of the *delta group* denotes
144 the boundary to the next segment (either the *treemanifests segment* or the
145 *filelogs segment*, depending on version and the request options).
146
147 Treemanifests Segment
148 ---------------------
149
150 The *treemanifests segment* only exists in changegroup version ``3``, and
151 only if the 'treemanifest' param is part of the bundle2 changegroup part
152 (it is not possible to use changegroup version 3 outside of bundle2).
153 Aside from the filenames in the *treemanifests segment* containing a
154 trailing ``/`` character, it behaves identically to the *filelogs segment*
155 (see below). The final sub-segment is followed by an *empty chunk* (logically,
156 a sub-segment with filename size 0). This denotes the boundary to the
157 *filelogs segment*.
123 158
124 159 Filelogs Segment
125 160 ================
126 161
127 The *filelogs* segment consists of multiple sub-segments, each
162 The *filelogs segment* consists of multiple sub-segments, each
128 163 corresponding to an individual file whose data is being described::
129 164
130 +--------------------------------------+
131 | | | | |
132 | filelog0 | filelog1 | filelog2 | ... |
133 | | | | |
134 +--------------------------------------+
165 +--------------------------------------------------+
166 | | | | | |
167 | filelog0 | filelog1 | filelog2 | ... | 0x0 |
168 | | | | | (4 bytes) |
169 | | | | | |
170 +--------------------------------------------------+
135 171
136 In version ``3`` of the changegroup format, filelogs may include
137 directory logs when treemanifests are in use. directory logs are
138 identified by having a trailing '/' on their filename (see below).
139
140 The final filelog sub-segment is followed by an *empty chunk* to denote
141 the end of the segment and the overall changegroup.
172 The final filelog sub-segment is followed by an *empty chunk* (logically,
173 a sub-segment with filename size 0). This denotes the end of the segment
174 and of the overall changegroup.
142 175
143 176 Each filelog sub-segment consists of the following::
144 177
145 +------------------------------------------+
178 +------------------------------------------------------+
146 179 | | | |
147 | filename size | filename | delta group |
148 | (32 bits) | (various) | (various) |
180 | filename length | filename | delta group |
181 | (4 bytes) | (<length - 4> bytes) | (various) |
149 182 | | | |
150 +------------------------------------------+
183 +------------------------------------------------------+
151 184
152 185 That is, a *chunk* consisting of the filename (not terminated or padded)
153 followed by N chunks constituting the *delta group* for this file.
186 followed by N chunks constituting the *delta group* for this file. The
187 *empty chunk* at the end of each *delta group* denotes the boundary to the
188 next filelog sub-segment.
@@ -1,3225 +1,3297 b''
1 1 Short help:
2 2
3 3 $ hg
4 4 Mercurial Distributed SCM
5 5
6 6 basic commands:
7 7
8 8 add add the specified files on the next commit
9 9 annotate show changeset information by line for each file
10 10 clone make a copy of an existing repository
11 11 commit commit the specified files or all outstanding changes
12 12 diff diff repository (or selected files)
13 13 export dump the header and diffs for one or more changesets
14 14 forget forget the specified files on the next commit
15 15 init create a new repository in the given directory
16 16 log show revision history of entire repository or files
17 17 merge merge another revision into working directory
18 18 pull pull changes from the specified source
19 19 push push changes to the specified destination
20 20 remove remove the specified files on the next commit
21 21 serve start stand-alone webserver
22 22 status show changed files in the working directory
23 23 summary summarize working directory state
24 24 update update working directory (or switch revisions)
25 25
26 26 (use 'hg help' for the full list of commands or 'hg -v' for details)
27 27
28 28 $ hg -q
29 29 add add the specified files on the next commit
30 30 annotate show changeset information by line for each file
31 31 clone make a copy of an existing repository
32 32 commit commit the specified files or all outstanding changes
33 33 diff diff repository (or selected files)
34 34 export dump the header and diffs for one or more changesets
35 35 forget forget the specified files on the next commit
36 36 init create a new repository in the given directory
37 37 log show revision history of entire repository or files
38 38 merge merge another revision into working directory
39 39 pull pull changes from the specified source
40 40 push push changes to the specified destination
41 41 remove remove the specified files on the next commit
42 42 serve start stand-alone webserver
43 43 status show changed files in the working directory
44 44 summary summarize working directory state
45 45 update update working directory (or switch revisions)
46 46
47 47 $ hg help
48 48 Mercurial Distributed SCM
49 49
50 50 list of commands:
51 51
52 52 add add the specified files on the next commit
53 53 addremove add all new files, delete all missing files
54 54 annotate show changeset information by line for each file
55 55 archive create an unversioned archive of a repository revision
56 56 backout reverse effect of earlier changeset
57 57 bisect subdivision search of changesets
58 58 bookmarks create a new bookmark or list existing bookmarks
59 59 branch set or show the current branch name
60 60 branches list repository named branches
61 61 bundle create a changegroup file
62 62 cat output the current or given revision of files
63 63 clone make a copy of an existing repository
64 64 commit commit the specified files or all outstanding changes
65 65 config show combined config settings from all hgrc files
66 66 copy mark files as copied for the next commit
67 67 diff diff repository (or selected files)
68 68 export dump the header and diffs for one or more changesets
69 69 files list tracked files
70 70 forget forget the specified files on the next commit
71 71 graft copy changes from other branches onto the current branch
72 72 grep search revision history for a pattern in specified files
73 73 heads show branch heads
74 74 help show help for a given topic or a help overview
75 75 identify identify the working directory or specified revision
76 76 import import an ordered set of patches
77 77 incoming show new changesets found in source
78 78 init create a new repository in the given directory
79 79 log show revision history of entire repository or files
80 80 manifest output the current or given revision of the project manifest
81 81 merge merge another revision into working directory
82 82 outgoing show changesets not found in the destination
83 83 paths show aliases for remote repositories
84 84 phase set or show the current phase name
85 85 pull pull changes from the specified source
86 86 push push changes to the specified destination
87 87 recover roll back an interrupted transaction
88 88 remove remove the specified files on the next commit
89 89 rename rename files; equivalent of copy + remove
90 90 resolve redo merges or set/view the merge status of files
91 91 revert restore files to their checkout state
92 92 root print the root (top) of the current working directory
93 93 serve start stand-alone webserver
94 94 status show changed files in the working directory
95 95 summary summarize working directory state
96 96 tag add one or more tags for the current or given revision
97 97 tags list repository tags
98 98 unbundle apply one or more changegroup files
99 99 update update working directory (or switch revisions)
100 100 verify verify the integrity of the repository
101 101 version output version and copyright information
102 102
103 103 additional help topics:
104 104
105 105 color Colorizing Outputs
106 106 config Configuration Files
107 107 dates Date Formats
108 108 diffs Diff Formats
109 109 environment Environment Variables
110 110 extensions Using Additional Features
111 111 filesets Specifying File Sets
112 112 glossary Glossary
113 113 hgignore Syntax for Mercurial Ignore Files
114 114 hgweb Configuring hgweb
115 115 internals Technical implementation topics
116 116 merge-tools Merge Tools
117 117 pager Pager Support
118 118 patterns File Name Patterns
119 119 phases Working with Phases
120 120 revisions Specifying Revisions
121 121 scripting Using Mercurial from scripts and automation
122 122 subrepos Subrepositories
123 123 templating Template Usage
124 124 urls URL Paths
125 125
126 126 (use 'hg help -v' to show built-in aliases and global options)
127 127
128 128 $ hg -q help
129 129 add add the specified files on the next commit
130 130 addremove add all new files, delete all missing files
131 131 annotate show changeset information by line for each file
132 132 archive create an unversioned archive of a repository revision
133 133 backout reverse effect of earlier changeset
134 134 bisect subdivision search of changesets
135 135 bookmarks create a new bookmark or list existing bookmarks
136 136 branch set or show the current branch name
137 137 branches list repository named branches
138 138 bundle create a changegroup file
139 139 cat output the current or given revision of files
140 140 clone make a copy of an existing repository
141 141 commit commit the specified files or all outstanding changes
142 142 config show combined config settings from all hgrc files
143 143 copy mark files as copied for the next commit
144 144 diff diff repository (or selected files)
145 145 export dump the header and diffs for one or more changesets
146 146 files list tracked files
147 147 forget forget the specified files on the next commit
148 148 graft copy changes from other branches onto the current branch
149 149 grep search revision history for a pattern in specified files
150 150 heads show branch heads
151 151 help show help for a given topic or a help overview
152 152 identify identify the working directory or specified revision
153 153 import import an ordered set of patches
154 154 incoming show new changesets found in source
155 155 init create a new repository in the given directory
156 156 log show revision history of entire repository or files
157 157 manifest output the current or given revision of the project manifest
158 158 merge merge another revision into working directory
159 159 outgoing show changesets not found in the destination
160 160 paths show aliases for remote repositories
161 161 phase set or show the current phase name
162 162 pull pull changes from the specified source
163 163 push push changes to the specified destination
164 164 recover roll back an interrupted transaction
165 165 remove remove the specified files on the next commit
166 166 rename rename files; equivalent of copy + remove
167 167 resolve redo merges or set/view the merge status of files
168 168 revert restore files to their checkout state
169 169 root print the root (top) of the current working directory
170 170 serve start stand-alone webserver
171 171 status show changed files in the working directory
172 172 summary summarize working directory state
173 173 tag add one or more tags for the current or given revision
174 174 tags list repository tags
175 175 unbundle apply one or more changegroup files
176 176 update update working directory (or switch revisions)
177 177 verify verify the integrity of the repository
178 178 version output version and copyright information
179 179
180 180 additional help topics:
181 181
182 182 color Colorizing Outputs
183 183 config Configuration Files
184 184 dates Date Formats
185 185 diffs Diff Formats
186 186 environment Environment Variables
187 187 extensions Using Additional Features
188 188 filesets Specifying File Sets
189 189 glossary Glossary
190 190 hgignore Syntax for Mercurial Ignore Files
191 191 hgweb Configuring hgweb
192 192 internals Technical implementation topics
193 193 merge-tools Merge Tools
194 194 pager Pager Support
195 195 patterns File Name Patterns
196 196 phases Working with Phases
197 197 revisions Specifying Revisions
198 198 scripting Using Mercurial from scripts and automation
199 199 subrepos Subrepositories
200 200 templating Template Usage
201 201 urls URL Paths
202 202
203 203 Test extension help:
204 204 $ hg help extensions --config extensions.rebase= --config extensions.children=
205 205 Using Additional Features
206 206 """""""""""""""""""""""""
207 207
208 208 Mercurial has the ability to add new features through the use of
209 209 extensions. Extensions may add new commands, add options to existing
210 210 commands, change the default behavior of commands, or implement hooks.
211 211
212 212 To enable the "foo" extension, either shipped with Mercurial or in the
213 213 Python search path, create an entry for it in your configuration file,
214 214 like this:
215 215
216 216 [extensions]
217 217 foo =
218 218
219 219 You may also specify the full path to an extension:
220 220
221 221 [extensions]
222 222 myfeature = ~/.hgext/myfeature.py
223 223
224 224 See 'hg help config' for more information on configuration files.
225 225
226 226 Extensions are not loaded by default for a variety of reasons: they can
227 227 increase startup overhead; they may be meant for advanced usage only; they
228 228 may provide potentially dangerous abilities (such as letting you destroy
229 229 or modify history); they might not be ready for prime time; or they may
230 230 alter some usual behaviors of stock Mercurial. It is thus up to the user
231 231 to activate extensions as needed.
232 232
233 233 To explicitly disable an extension enabled in a configuration file of
234 234 broader scope, prepend its path with !:
235 235
236 236 [extensions]
237 237 # disabling extension bar residing in /path/to/extension/bar.py
238 238 bar = !/path/to/extension/bar.py
239 239 # ditto, but no path was supplied for extension baz
240 240 baz = !
241 241
242 242 enabled extensions:
243 243
244 244 children command to display child changesets (DEPRECATED)
245 245 rebase command to move sets of revisions to a different ancestor
246 246
247 247 disabled extensions:
248 248
249 249 acl hooks for controlling repository access
250 250 blackbox log repository events to a blackbox for debugging
251 251 bugzilla hooks for integrating with the Bugzilla bug tracker
252 252 censor erase file content at a given revision
253 253 churn command to display statistics about repository history
254 254 clonebundles advertise pre-generated bundles to seed clones
255 255 convert import revisions from foreign VCS repositories into
256 256 Mercurial
257 257 eol automatically manage newlines in repository files
258 258 extdiff command to allow external programs to compare revisions
259 259 factotum http authentication with factotum
260 260 gpg commands to sign and verify changesets
261 261 hgk browse the repository in a graphical way
262 262 highlight syntax highlighting for hgweb (requires Pygments)
263 263 histedit interactive history editing
264 264 keyword expand keywords in tracked files
265 265 largefiles track large binary files
266 266 mq manage a stack of patches
267 267 notify hooks for sending email push notifications
268 268 patchbomb command to send changesets as (a series of) patch emails
269 269 purge command to delete untracked files from the working
270 270 directory
271 271 relink recreates hardlinks between repository clones
272 272 schemes extend schemes with shortcuts to repository swarms
273 273 share share a common history between several working directories
274 274 shelve save and restore changes to the working directory
275 275 strip strip changesets and their descendants from history
276 276 transplant command to transplant changesets from another branch
277 277 win32mbcs allow the use of MBCS paths with problematic encodings
278 278 zeroconf discover and advertise repositories on the local network
279 279
280 280 Verify that extension keywords appear in help templates
281 281
282 282 $ hg help --config extensions.transplant= templating|grep transplant > /dev/null
283 283
284 284 Test short command list with verbose option
285 285
286 286 $ hg -v help shortlist
287 287 Mercurial Distributed SCM
288 288
289 289 basic commands:
290 290
291 291 add add the specified files on the next commit
292 292 annotate, blame
293 293 show changeset information by line for each file
294 294 clone make a copy of an existing repository
295 295 commit, ci commit the specified files or all outstanding changes
296 296 diff diff repository (or selected files)
297 297 export dump the header and diffs for one or more changesets
298 298 forget forget the specified files on the next commit
299 299 init create a new repository in the given directory
300 300 log, history show revision history of entire repository or files
301 301 merge merge another revision into working directory
302 302 pull pull changes from the specified source
303 303 push push changes to the specified destination
304 304 remove, rm remove the specified files on the next commit
305 305 serve start stand-alone webserver
306 306 status, st show changed files in the working directory
307 307 summary, sum summarize working directory state
308 308 update, up, checkout, co
309 309 update working directory (or switch revisions)
310 310
311 311 global options ([+] can be repeated):
312 312
313 313 -R --repository REPO repository root directory or name of overlay bundle
314 314 file
315 315 --cwd DIR change working directory
316 316 -y --noninteractive do not prompt, automatically pick the first choice for
317 317 all prompts
318 318 -q --quiet suppress output
319 319 -v --verbose enable additional output
320 320 --color TYPE when to colorize (boolean, always, auto, never, or
321 321 debug)
322 322 --config CONFIG [+] set/override config option (use 'section.name=value')
323 323 --debug enable debugging output
324 324 --debugger start debugger
325 325 --encoding ENCODE set the charset encoding (default: ascii)
326 326 --encodingmode MODE set the charset encoding mode (default: strict)
327 327 --traceback always print a traceback on exception
328 328 --time time how long the command takes
329 329 --profile print command execution profile
330 330 --version output version information and exit
331 331 -h --help display help and exit
332 332 --hidden consider hidden changesets
333 333 --pager TYPE when to paginate (boolean, always, auto, or never)
334 334 (default: auto)
335 335
336 336 (use 'hg help' for the full list of commands)
337 337
338 338 $ hg add -h
339 339 hg add [OPTION]... [FILE]...
340 340
341 341 add the specified files on the next commit
342 342
343 343 Schedule files to be version controlled and added to the repository.
344 344
345 345 The files will be added to the repository at the next commit. To undo an
346 346 add before that, see 'hg forget'.
347 347
348 348 If no names are given, add all files to the repository (except files
349 349 matching ".hgignore").
350 350
351 351 Returns 0 if all files are successfully added.
352 352
353 353 options ([+] can be repeated):
354 354
355 355 -I --include PATTERN [+] include names matching the given patterns
356 356 -X --exclude PATTERN [+] exclude names matching the given patterns
357 357 -S --subrepos recurse into subrepositories
358 358 -n --dry-run do not perform actions, just print output
359 359
360 360 (some details hidden, use --verbose to show complete help)
361 361
362 362 Verbose help for add
363 363
364 364 $ hg add -hv
365 365 hg add [OPTION]... [FILE]...
366 366
367 367 add the specified files on the next commit
368 368
369 369 Schedule files to be version controlled and added to the repository.
370 370
371 371 The files will be added to the repository at the next commit. To undo an
372 372 add before that, see 'hg forget'.
373 373
374 374 If no names are given, add all files to the repository (except files
375 375 matching ".hgignore").
376 376
377 377 Examples:
378 378
379 379 - New (unknown) files are added automatically by 'hg add':
380 380
381 381 $ ls
382 382 foo.c
383 383 $ hg status
384 384 ? foo.c
385 385 $ hg add
386 386 adding foo.c
387 387 $ hg status
388 388 A foo.c
389 389
390 390 - Specific files to be added can be specified:
391 391
392 392 $ ls
393 393 bar.c foo.c
394 394 $ hg status
395 395 ? bar.c
396 396 ? foo.c
397 397 $ hg add bar.c
398 398 $ hg status
399 399 A bar.c
400 400 ? foo.c
401 401
402 402 Returns 0 if all files are successfully added.
403 403
404 404 options ([+] can be repeated):
405 405
406 406 -I --include PATTERN [+] include names matching the given patterns
407 407 -X --exclude PATTERN [+] exclude names matching the given patterns
408 408 -S --subrepos recurse into subrepositories
409 409 -n --dry-run do not perform actions, just print output
410 410
411 411 global options ([+] can be repeated):
412 412
413 413 -R --repository REPO repository root directory or name of overlay bundle
414 414 file
415 415 --cwd DIR change working directory
416 416 -y --noninteractive do not prompt, automatically pick the first choice for
417 417 all prompts
418 418 -q --quiet suppress output
419 419 -v --verbose enable additional output
420 420 --color TYPE when to colorize (boolean, always, auto, never, or
421 421 debug)
422 422 --config CONFIG [+] set/override config option (use 'section.name=value')
423 423 --debug enable debugging output
424 424 --debugger start debugger
425 425 --encoding ENCODE set the charset encoding (default: ascii)
426 426 --encodingmode MODE set the charset encoding mode (default: strict)
427 427 --traceback always print a traceback on exception
428 428 --time time how long the command takes
429 429 --profile print command execution profile
430 430 --version output version information and exit
431 431 -h --help display help and exit
432 432 --hidden consider hidden changesets
433 433 --pager TYPE when to paginate (boolean, always, auto, or never)
434 434 (default: auto)
435 435
436 436 Test the textwidth config option
437 437
438 438 $ hg root -h --config ui.textwidth=50
439 439 hg root
440 440
441 441 print the root (top) of the current working
442 442 directory
443 443
444 444 Print the root directory of the current
445 445 repository.
446 446
447 447 Returns 0 on success.
448 448
449 449 (some details hidden, use --verbose to show
450 450 complete help)
451 451
452 452 Test help option with version option
453 453
454 454 $ hg add -h --version
455 455 Mercurial Distributed SCM (version *) (glob)
456 456 (see https://mercurial-scm.org for more information)
457 457
458 458 Copyright (C) 2005-* Matt Mackall and others (glob)
459 459 This is free software; see the source for copying conditions. There is NO
460 460 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
461 461
462 462 $ hg add --skjdfks
463 463 hg add: option --skjdfks not recognized
464 464 hg add [OPTION]... [FILE]...
465 465
466 466 add the specified files on the next commit
467 467
468 468 options ([+] can be repeated):
469 469
470 470 -I --include PATTERN [+] include names matching the given patterns
471 471 -X --exclude PATTERN [+] exclude names matching the given patterns
472 472 -S --subrepos recurse into subrepositories
473 473 -n --dry-run do not perform actions, just print output
474 474
475 475 (use 'hg add -h' to show more help)
476 476 [255]
477 477
478 478 Test ambiguous command help
479 479
480 480 $ hg help ad
481 481 list of commands:
482 482
483 483 add add the specified files on the next commit
484 484 addremove add all new files, delete all missing files
485 485
486 486 (use 'hg help -v ad' to show built-in aliases and global options)
487 487
488 488 Test command without options
489 489
490 490 $ hg help verify
491 491 hg verify
492 492
493 493 verify the integrity of the repository
494 494
495 495 Verify the integrity of the current repository.
496 496
497 497 This will perform an extensive check of the repository's integrity,
498 498 validating the hashes and checksums of each entry in the changelog,
499 499 manifest, and tracked files, as well as the integrity of their crosslinks
500 500 and indices.
501 501
502 502 Please see https://mercurial-scm.org/wiki/RepositoryCorruption for more
503 503 information about recovery from corruption of the repository.
504 504
505 505 Returns 0 on success, 1 if errors are encountered.
506 506
507 507 (some details hidden, use --verbose to show complete help)
508 508
509 509 $ hg help diff
510 510 hg diff [OPTION]... ([-c REV] | [-r REV1 [-r REV2]]) [FILE]...
511 511
512 512 diff repository (or selected files)
513 513
514 514 Show differences between revisions for the specified files.
515 515
516 516 Differences between files are shown using the unified diff format.
517 517
518 518 Note:
519 519 'hg diff' may generate unexpected results for merges, as it will
520 520 default to comparing against the working directory's first parent
521 521 changeset if no revisions are specified.
522 522
523 523 When two revision arguments are given, then changes are shown between
524 524 those revisions. If only one revision is specified then that revision is
525 525 compared to the working directory, and, when no revisions are specified,
526 526 the working directory files are compared to its first parent.
527 527
528 528 Alternatively you can specify -c/--change with a revision to see the
529 529 changes in that changeset relative to its first parent.
530 530
531 531 Without the -a/--text option, diff will avoid generating diffs of files it
532 532 detects as binary. With -a, diff will generate a diff anyway, probably
533 533 with undesirable results.
534 534
535 535 Use the -g/--git option to generate diffs in the git extended diff format.
536 536 For more information, read 'hg help diffs'.
537 537
538 538 Returns 0 on success.
539 539
540 540 options ([+] can be repeated):
541 541
542 542 -r --rev REV [+] revision
543 543 -c --change REV change made by revision
544 544 -a --text treat all files as text
545 545 -g --git use git extended diff format
546 546 --nodates omit dates from diff headers
547 547 --noprefix omit a/ and b/ prefixes from filenames
548 548 -p --show-function show which function each change is in
549 549 --reverse produce a diff that undoes the changes
550 550 -w --ignore-all-space ignore white space when comparing lines
551 551 -b --ignore-space-change ignore changes in the amount of white space
552 552 -B --ignore-blank-lines ignore changes whose lines are all blank
553 553 -U --unified NUM number of lines of context to show
554 554 --stat output diffstat-style summary of changes
555 555 --root DIR produce diffs relative to subdirectory
556 556 -I --include PATTERN [+] include names matching the given patterns
557 557 -X --exclude PATTERN [+] exclude names matching the given patterns
558 558 -S --subrepos recurse into subrepositories
559 559
560 560 (some details hidden, use --verbose to show complete help)
561 561
562 562 $ hg help status
563 563 hg status [OPTION]... [FILE]...
564 564
565 565 aliases: st
566 566
567 567 show changed files in the working directory
568 568
569 569 Show status of files in the repository. If names are given, only files
570 570 that match are shown. Files that are clean or ignored or the source of a
571 571 copy/move operation, are not listed unless -c/--clean, -i/--ignored,
572 572 -C/--copies or -A/--all are given. Unless options described with "show
573 573 only ..." are given, the options -mardu are used.
574 574
575 575 Option -q/--quiet hides untracked (unknown and ignored) files unless
576 576 explicitly requested with -u/--unknown or -i/--ignored.
577 577
578 578 Note:
579 579 'hg status' may appear to disagree with diff if permissions have
580 580 changed or a merge has occurred. The standard diff format does not
581 581 report permission changes and diff only reports changes relative to one
582 582 merge parent.
583 583
584 584 If one revision is given, it is used as the base revision. If two
585 585 revisions are given, the differences between them are shown. The --change
586 586 option can also be used as a shortcut to list the changed files of a
587 587 revision from its first parent.
588 588
589 589 The codes used to show the status of files are:
590 590
591 591 M = modified
592 592 A = added
593 593 R = removed
594 594 C = clean
595 595 ! = missing (deleted by non-hg command, but still tracked)
596 596 ? = not tracked
597 597 I = ignored
598 598 = origin of the previous file (with --copies)
599 599
600 600 Returns 0 on success.
601 601
602 602 options ([+] can be repeated):
603 603
604 604 -A --all show status of all files
605 605 -m --modified show only modified files
606 606 -a --added show only added files
607 607 -r --removed show only removed files
608 608 -d --deleted show only deleted (but tracked) files
609 609 -c --clean show only files without changes
610 610 -u --unknown show only unknown (not tracked) files
611 611 -i --ignored show only ignored files
612 612 -n --no-status hide status prefix
613 613 -C --copies show source of copied files
614 614 -0 --print0 end filenames with NUL, for use with xargs
615 615 --rev REV [+] show difference from revision
616 616 --change REV list the changed files of a revision
617 617 -I --include PATTERN [+] include names matching the given patterns
618 618 -X --exclude PATTERN [+] exclude names matching the given patterns
619 619 -S --subrepos recurse into subrepositories
620 620
621 621 (some details hidden, use --verbose to show complete help)
622 622
623 623 $ hg -q help status
624 624 hg status [OPTION]... [FILE]...
625 625
626 626 show changed files in the working directory
627 627
628 628 $ hg help foo
629 629 abort: no such help topic: foo
630 630 (try 'hg help --keyword foo')
631 631 [255]
632 632
633 633 $ hg skjdfks
634 634 hg: unknown command 'skjdfks'
635 635 Mercurial Distributed SCM
636 636
637 637 basic commands:
638 638
639 639 add add the specified files on the next commit
640 640 annotate show changeset information by line for each file
641 641 clone make a copy of an existing repository
642 642 commit commit the specified files or all outstanding changes
643 643 diff diff repository (or selected files)
644 644 export dump the header and diffs for one or more changesets
645 645 forget forget the specified files on the next commit
646 646 init create a new repository in the given directory
647 647 log show revision history of entire repository or files
648 648 merge merge another revision into working directory
649 649 pull pull changes from the specified source
650 650 push push changes to the specified destination
651 651 remove remove the specified files on the next commit
652 652 serve start stand-alone webserver
653 653 status show changed files in the working directory
654 654 summary summarize working directory state
655 655 update update working directory (or switch revisions)
656 656
657 657 (use 'hg help' for the full list of commands or 'hg -v' for details)
658 658 [255]
659 659
660 660
661 661 Make sure that we don't run afoul of the help system thinking that
662 662 this is a section and erroring out weirdly.
663 663
664 664 $ hg .log
665 665 hg: unknown command '.log'
666 666 (did you mean log?)
667 667 [255]
668 668
669 669 $ hg log.
670 670 hg: unknown command 'log.'
671 671 (did you mean log?)
672 672 [255]
673 673 $ hg pu.lh
674 674 hg: unknown command 'pu.lh'
675 675 (did you mean one of pull, push?)
676 676 [255]
677 677
678 678 $ cat > helpext.py <<EOF
679 679 > import os
680 680 > from mercurial import cmdutil, commands
681 681 >
682 682 > cmdtable = {}
683 683 > command = cmdutil.command(cmdtable)
684 684 >
685 685 > @command('nohelp',
686 686 > [('', 'longdesc', 3, 'x'*90),
687 687 > ('n', '', None, 'normal desc'),
688 688 > ('', 'newline', '', 'line1\nline2')],
689 689 > 'hg nohelp',
690 690 > norepo=True)
691 691 > @command('debugoptADV', [('', 'aopt', None, 'option is (ADVANCED)')])
692 692 > @command('debugoptDEP', [('', 'dopt', None, 'option is (DEPRECATED)')])
693 693 > @command('debugoptEXP', [('', 'eopt', None, 'option is (EXPERIMENTAL)')])
694 694 > def nohelp(ui, *args, **kwargs):
695 695 > pass
696 696 >
697 697 > def uisetup(ui):
698 698 > ui.setconfig('alias', 'shellalias', '!echo hi', 'helpext')
699 699 > ui.setconfig('alias', 'hgalias', 'summary', 'helpext')
700 700 >
701 701 > EOF
702 702 $ echo '[extensions]' >> $HGRCPATH
703 703 $ echo "helpext = `pwd`/helpext.py" >> $HGRCPATH
704 704
705 705 Test for aliases
706 706
707 707 $ hg help hgalias
708 708 hg hgalias [--remote]
709 709
710 710 alias for: hg summary
711 711
712 712 summarize working directory state
713 713
714 714 This generates a brief summary of the working directory state, including
715 715 parents, branch, commit status, phase and available updates.
716 716
717 717 With the --remote option, this will check the default paths for incoming
718 718 and outgoing changes. This can be time-consuming.
719 719
720 720 Returns 0 on success.
721 721
722 722 defined by: helpext
723 723
724 724 options:
725 725
726 726 --remote check for push and pull
727 727
728 728 (some details hidden, use --verbose to show complete help)
729 729
730 730 $ hg help shellalias
731 731 hg shellalias
732 732
733 733 shell alias for:
734 734
735 735 echo hi
736 736
737 737 defined by: helpext
738 738
739 739 (some details hidden, use --verbose to show complete help)
740 740
741 741 Test command with no help text
742 742
743 743 $ hg help nohelp
744 744 hg nohelp
745 745
746 746 (no help text available)
747 747
748 748 options:
749 749
750 750 --longdesc VALUE xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
751 751 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (default: 3)
752 752 -n -- normal desc
753 753 --newline VALUE line1 line2
754 754
755 755 (some details hidden, use --verbose to show complete help)
756 756
757 757 $ hg help -k nohelp
758 758 Commands:
759 759
760 760 nohelp hg nohelp
761 761
762 762 Extension Commands:
763 763
764 764 nohelp (no help text available)
765 765
766 766 Test that default list of commands omits extension commands
767 767
768 768 $ hg help
769 769 Mercurial Distributed SCM
770 770
771 771 list of commands:
772 772
773 773 add add the specified files on the next commit
774 774 addremove add all new files, delete all missing files
775 775 annotate show changeset information by line for each file
776 776 archive create an unversioned archive of a repository revision
777 777 backout reverse effect of earlier changeset
778 778 bisect subdivision search of changesets
779 779 bookmarks create a new bookmark or list existing bookmarks
780 780 branch set or show the current branch name
781 781 branches list repository named branches
782 782 bundle create a changegroup file
783 783 cat output the current or given revision of files
784 784 clone make a copy of an existing repository
785 785 commit commit the specified files or all outstanding changes
786 786 config show combined config settings from all hgrc files
787 787 copy mark files as copied for the next commit
788 788 diff diff repository (or selected files)
789 789 export dump the header and diffs for one or more changesets
790 790 files list tracked files
791 791 forget forget the specified files on the next commit
792 792 graft copy changes from other branches onto the current branch
793 793 grep search revision history for a pattern in specified files
794 794 heads show branch heads
795 795 help show help for a given topic or a help overview
796 796 identify identify the working directory or specified revision
797 797 import import an ordered set of patches
798 798 incoming show new changesets found in source
799 799 init create a new repository in the given directory
800 800 log show revision history of entire repository or files
801 801 manifest output the current or given revision of the project manifest
802 802 merge merge another revision into working directory
803 803 outgoing show changesets not found in the destination
804 804 paths show aliases for remote repositories
805 805 phase set or show the current phase name
806 806 pull pull changes from the specified source
807 807 push push changes to the specified destination
808 808 recover roll back an interrupted transaction
809 809 remove remove the specified files on the next commit
810 810 rename rename files; equivalent of copy + remove
811 811 resolve redo merges or set/view the merge status of files
812 812 revert restore files to their checkout state
813 813 root print the root (top) of the current working directory
814 814 serve start stand-alone webserver
815 815 status show changed files in the working directory
816 816 summary summarize working directory state
817 817 tag add one or more tags for the current or given revision
818 818 tags list repository tags
819 819 unbundle apply one or more changegroup files
820 820 update update working directory (or switch revisions)
821 821 verify verify the integrity of the repository
822 822 version output version and copyright information
823 823
824 824 enabled extensions:
825 825
826 826 helpext (no help text available)
827 827
828 828 additional help topics:
829 829
830 830 color Colorizing Outputs
831 831 config Configuration Files
832 832 dates Date Formats
833 833 diffs Diff Formats
834 834 environment Environment Variables
835 835 extensions Using Additional Features
836 836 filesets Specifying File Sets
837 837 glossary Glossary
838 838 hgignore Syntax for Mercurial Ignore Files
839 839 hgweb Configuring hgweb
840 840 internals Technical implementation topics
841 841 merge-tools Merge Tools
842 842 pager Pager Support
843 843 patterns File Name Patterns
844 844 phases Working with Phases
845 845 revisions Specifying Revisions
846 846 scripting Using Mercurial from scripts and automation
847 847 subrepos Subrepositories
848 848 templating Template Usage
849 849 urls URL Paths
850 850
851 851 (use 'hg help -v' to show built-in aliases and global options)
852 852
853 853
854 854 Test list of internal help commands
855 855
856 856 $ hg help debug
857 857 debug commands (internal and unsupported):
858 858
859 859 debugancestor
860 860 find the ancestor revision of two revisions in a given index
861 861 debugapplystreamclonebundle
862 862 apply a stream clone bundle file
863 863 debugbuilddag
864 864 builds a repo with a given DAG from scratch in the current
865 865 empty repo
866 866 debugbundle lists the contents of a bundle
867 867 debugcheckstate
868 868 validate the correctness of the current dirstate
869 869 debugcolor show available color, effects or style
870 870 debugcommands
871 871 list all available commands and options
872 872 debugcomplete
873 873 returns the completion list associated with the given command
874 874 debugcreatestreamclonebundle
875 875 create a stream clone bundle file
876 876 debugdag format the changelog or an index DAG as a concise textual
877 877 description
878 878 debugdata dump the contents of a data file revision
879 879 debugdate parse and display a date
880 880 debugdeltachain
881 881 dump information about delta chains in a revlog
882 882 debugdirstate
883 883 show the contents of the current dirstate
884 884 debugdiscovery
885 885 runs the changeset discovery protocol in isolation
886 886 debugextensions
887 887 show information about active extensions
888 888 debugfileset parse and apply a fileset specification
889 889 debugfsinfo show information detected about current filesystem
890 890 debuggetbundle
891 891 retrieves a bundle from a repo
892 892 debugignore display the combined ignore pattern and information about
893 893 ignored files
894 894 debugindex dump the contents of an index file
895 895 debugindexdot
896 896 dump an index DAG as a graphviz dot file
897 897 debuginstall test Mercurial installation
898 898 debugknown test whether node ids are known to a repo
899 899 debuglocks show or modify state of locks
900 900 debugmergestate
901 901 print merge state
902 902 debugnamecomplete
903 903 complete "names" - tags, open branch names, bookmark names
904 904 debugobsolete
905 905 create arbitrary obsolete marker
906 906 debugoptADV (no help text available)
907 907 debugoptDEP (no help text available)
908 908 debugoptEXP (no help text available)
909 909 debugpathcomplete
910 910 complete part or all of a tracked path
911 911 debugpushkey access the pushkey key/value protocol
912 912 debugpvec (no help text available)
913 913 debugrebuilddirstate
914 914 rebuild the dirstate as it would look like for the given
915 915 revision
916 916 debugrebuildfncache
917 917 rebuild the fncache file
918 918 debugrename dump rename information
919 919 debugrevlog show data and statistics about a revlog
920 920 debugrevspec parse and apply a revision specification
921 921 debugsetparents
922 922 manually set the parents of the current working directory
923 923 debugsub (no help text available)
924 924 debugsuccessorssets
925 925 show set of successors for revision
926 926 debugtemplate
927 927 parse and apply a template
928 928 debugupgraderepo
929 929 upgrade a repository to use different features
930 930 debugwalk show how files match on given patterns
931 931 debugwireargs
932 932 (no help text available)
933 933
934 934 (use 'hg help -v debug' to show built-in aliases and global options)
935 935
936 936 internals topic renders index of available sub-topics
937 937
938 938 $ hg help internals
939 939 Technical implementation topics
940 940 """""""""""""""""""""""""""""""
941 941
942 942 bundles Bundles
943 943 changegroups Changegroups
944 944 requirements Repository Requirements
945 945 revlogs Revision Logs
946 946 wireprotocol Wire Protocol
947 947
948 948 sub-topics can be accessed
949 949
950 950 $ hg help internals.changegroups
951 951 Changegroups
952 952 """"""""""""
953 953
954 954 Changegroups are representations of repository revlog data, specifically
955 the changelog, manifest, and filelogs.
955 the changelog data, root/flat manifest data, treemanifest data, and
956 filelogs.
956 957
957 958 There are 3 versions of changegroups: "1", "2", and "3". From a high-
958 959 level, versions "1" and "2" are almost exactly the same, with the only
959 difference being a header on entries in the changeset segment. Version "3"
960 adds support for exchanging treemanifests and includes revlog flags in the
961 delta header.
962
963 Changegroups consists of 3 logical segments:
960 difference being an additional item in the *delta header*. Version "3"
961 adds support for revlog flags in the *delta header* and optionally
962 exchanging treemanifests (enabled by setting an option on the
963 "changegroup" part in the bundle2).
964
965 Changegroups when not exchanging treemanifests consist of 3 logical
966 segments:
964 967
965 968 +---------------------------------+
966 969 | | | |
967 970 | changeset | manifest | filelogs |
968 971 | | | |
972 | | | |
969 973 +---------------------------------+
970 974
975 When exchanging treemanifests, there are 4 logical segments:
976
977 +-------------------------------------------------+
978 | | | | |
979 | changeset | root | treemanifests | filelogs |
980 | | manifest | | |
981 | | | | |
982 +-------------------------------------------------+
983
971 984 The principle building block of each segment is a *chunk*. A *chunk* is a
972 985 framed piece of data:
973 986
974 987 +---------------------------------------+
975 988 | | |
976 989 | length | data |
977 | (32 bits) | <length> bytes |
990 | (4 bytes) | (<length - 4> bytes) |
978 991 | | |
979 992 +---------------------------------------+
980 993
981 Each chunk starts with a 32-bit big-endian signed integer indicating the
982 length of the raw data that follows.
983
984 There is a special case chunk that has 0 length ("0x00000000"). We call
985 this an *empty chunk*.
994 All integers are big-endian signed integers. Each chunk starts with a
995 32-bit integer indicating the length of the entire chunk (including the
996 length field itself).
997
998 There is a special case chunk that has a value of 0 for the length
999 ("0x00000000"). We call this an *empty chunk*.
986 1000
987 1001 Delta Groups
988 1002 ============
989 1003
990 1004 A *delta group* expresses the content of a revlog as a series of deltas,
991 1005 or patches against previous revisions.
992 1006
993 1007 Delta groups consist of 0 or more *chunks* followed by the *empty chunk*
994 1008 to signal the end of the delta group:
995 1009
996 1010 +------------------------------------------------------------------------+
997 1011 | | | | | |
998 1012 | chunk0 length | chunk0 data | chunk1 length | chunk1 data | 0x0 |
999 | (32 bits) | (various) | (32 bits) | (various) | (32 bits) |
1013 | (4 bytes) | (various) | (4 bytes) | (various) | (4 bytes) |
1000 1014 | | | | | |
1001 +------------------------------------------------------------+-----------+
1015 +------------------------------------------------------------------------+
1002 1016
1003 1017 Each *chunk*'s data consists of the following:
1004 1018
1005 +-----------------------------------------+
1006 | | | |
1007 | delta header | mdiff header | delta |
1008 | (various) | (12 bytes) | (various) |
1009 | | | |
1010 +-----------------------------------------+
1011
1012 The *length* field is the byte length of the remaining 3 logical pieces of
1013 data. The *delta* is a diff from an existing entry in the changelog.
1019 +---------------------------------------+
1020 | | |
1021 | delta header | delta data |
1022 | (various by version) | (various) |
1023 | | |
1024 +---------------------------------------+
1025
1026 The *delta data* is a series of *delta*s that describe a diff from an
1027 existing entry (either that the recipient already has, or previously
1028 specified in the bundlei/changegroup).
1014 1029
1015 1030 The *delta header* is different between versions "1", "2", and "3" of the
1016 1031 changegroup format.
1017 1032
1018 Version 1:
1033 Version 1 (headerlen=80):
1019 1034
1020 1035 +------------------------------------------------------+
1021 1036 | | | | |
1022 1037 | node | p1 node | p2 node | link node |
1023 1038 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
1024 1039 | | | | |
1025 1040 +------------------------------------------------------+
1026 1041
1027 Version 2:
1042 Version 2 (headerlen=100):
1028 1043
1029 1044 +------------------------------------------------------------------+
1030 1045 | | | | | |
1031 1046 | node | p1 node | p2 node | base node | link node |
1032 1047 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
1033 1048 | | | | | |
1034 1049 +------------------------------------------------------------------+
1035 1050
1036 Version 3:
1051 Version 3 (headerlen=102):
1037 1052
1038 1053 +------------------------------------------------------------------------------+
1039 1054 | | | | | | |
1040 1055 | node | p1 node | p2 node | base node | link node | flags |
1041 1056 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (2 bytes) |
1042 1057 | | | | | | |
1043 1058 +------------------------------------------------------------------------------+
1044 1059
1045 The *mdiff header* consists of 3 32-bit big-endian signed integers
1046 describing offsets at which to apply the following delta content:
1047
1048 +-------------------------------------+
1049 | | | |
1050 | offset | old length | new length |
1051 | (32 bits) | (32 bits) | (32 bits) |
1052 | | | |
1053 +-------------------------------------+
1060 The *delta data* consists of "chunklen - 4 - headerlen" bytes, which
1061 contain a series of *delta*s, densely packed (no separators). These deltas
1062 describe a diff from an existing entry (either that the recipient already
1063 has, or previously specified in the bundle/changegroup). The format is
1064 described more fully in "hg help internals.bdiff", but briefly:
1065
1066 +---------------------------------------------------------------+ |
1067 | | | | | start offset | end
1068 offset | new length | content | | (4 bytes) | (4
1069 bytes) | (4 bytes) | (<new length> bytes) | | |
1070 | | |
1071 +---------------------------------------------------------------+
1072
1073 Please note that the length field in the delta data does *not* include
1074 itself.
1054 1075
1055 1076 In version 1, the delta is always applied against the previous node from
1056 1077 the changegroup or the first parent if this is the first entry in the
1057 1078 changegroup.
1058 1079
1059 In version 2, the delta base node is encoded in the entry in the
1080 In version 2 and up, the delta base node is encoded in the entry in the
1060 1081 changegroup. This allows the delta to be expressed against any parent,
1061 1082 which can result in smaller deltas and more efficient encoding of data.
1062 1083
1063 1084 Changeset Segment
1064 1085 =================
1065 1086
1066 1087 The *changeset segment* consists of a single *delta group* holding
1067 changelog data. It is followed by an *empty chunk* to denote the boundary
1068 to the *manifests segment*.
1088 changelog data. The *empty chunk* at the end of the *delta group* denotes
1089 the boundary to the *manifest segment*.
1069 1090
1070 1091 Manifest Segment
1071 1092 ================
1072 1093
1073 1094 The *manifest segment* consists of a single *delta group* holding manifest
1074 data. It is followed by an *empty chunk* to denote the boundary to the
1075 *filelogs segment*.
1095 data. If treemanifests are in use, it contains only the manifest for the
1096 root directory of the repository. Otherwise, it contains the entire
1097 manifest data. The *empty chunk* at the end of the *delta group* denotes
1098 the boundary to the next segment (either the *treemanifests segment* or
1099 the *filelogs segment*, depending on version and the request options).
1100
1101 Treemanifests Segment
1102 ---------------------
1103
1104 The *treemanifests segment* only exists in changegroup version "3", and
1105 only if the 'treemanifest' param is part of the bundle2 changegroup part
1106 (it is not possible to use changegroup version 3 outside of bundle2).
1107 Aside from the filenames in the *treemanifests segment* containing a
1108 trailing "/" character, it behaves identically to the *filelogs segment*
1109 (see below). The final sub-segment is followed by an *empty chunk*
1110 (logically, a sub-segment with filename size 0). This denotes the boundary
1111 to the *filelogs segment*.
1076 1112
1077 1113 Filelogs Segment
1078 1114 ================
1079 1115
1080 The *filelogs* segment consists of multiple sub-segments, each
1116 The *filelogs segment* consists of multiple sub-segments, each
1081 1117 corresponding to an individual file whose data is being described:
1082 1118
1083 +--------------------------------------+
1084 | | | | |
1085 | filelog0 | filelog1 | filelog2 | ... |
1086 | | | | |
1087 +--------------------------------------+
1088
1089 In version "3" of the changegroup format, filelogs may include directory
1090 logs when treemanifests are in use. directory logs are identified by
1091 having a trailing '/' on their filename (see below).
1092
1093 The final filelog sub-segment is followed by an *empty chunk* to denote
1094 the end of the segment and the overall changegroup.
1119 +--------------------------------------------------+
1120 | | | | | |
1121 | filelog0 | filelog1 | filelog2 | ... | 0x0 |
1122 | | | | | (4 bytes) |
1123 | | | | | |
1124 +--------------------------------------------------+
1125
1126 The final filelog sub-segment is followed by an *empty chunk* (logically,
1127 a sub-segment with filename size 0). This denotes the end of the segment
1128 and of the overall changegroup.
1095 1129
1096 1130 Each filelog sub-segment consists of the following:
1097 1131
1098 +------------------------------------------+
1132 +------------------------------------------------------+
1099 1133 | | | |
1100 | filename size | filename | delta group |
1101 | (32 bits) | (various) | (various) |
1134 | filename length | filename | delta group |
1135 | (4 bytes) | (<length - 4> bytes) | (various) |
1102 1136 | | | |
1103 +------------------------------------------+
1137 +------------------------------------------------------+
1104 1138
1105 1139 That is, a *chunk* consisting of the filename (not terminated or padded)
1106 followed by N chunks constituting the *delta group* for this file.
1140 followed by N chunks constituting the *delta group* for this file. The
1141 *empty chunk* at the end of each *delta group* denotes the boundary to the
1142 next filelog sub-segment.
1107 1143
1108 1144 Test list of commands with command with no help text
1109 1145
1110 1146 $ hg help helpext
1111 1147 helpext extension - no help text available
1112 1148
1113 1149 list of commands:
1114 1150
1115 1151 nohelp (no help text available)
1116 1152
1117 1153 (use 'hg help -v helpext' to show built-in aliases and global options)
1118 1154
1119 1155
1120 1156 test advanced, deprecated and experimental options are hidden in command help
1121 1157 $ hg help debugoptADV
1122 1158 hg debugoptADV
1123 1159
1124 1160 (no help text available)
1125 1161
1126 1162 options:
1127 1163
1128 1164 (some details hidden, use --verbose to show complete help)
1129 1165 $ hg help debugoptDEP
1130 1166 hg debugoptDEP
1131 1167
1132 1168 (no help text available)
1133 1169
1134 1170 options:
1135 1171
1136 1172 (some details hidden, use --verbose to show complete help)
1137 1173
1138 1174 $ hg help debugoptEXP
1139 1175 hg debugoptEXP
1140 1176
1141 1177 (no help text available)
1142 1178
1143 1179 options:
1144 1180
1145 1181 (some details hidden, use --verbose to show complete help)
1146 1182
1147 1183 test advanced, deprecated and experimental options are shown with -v
1148 1184 $ hg help -v debugoptADV | grep aopt
1149 1185 --aopt option is (ADVANCED)
1150 1186 $ hg help -v debugoptDEP | grep dopt
1151 1187 --dopt option is (DEPRECATED)
1152 1188 $ hg help -v debugoptEXP | grep eopt
1153 1189 --eopt option is (EXPERIMENTAL)
1154 1190
1155 1191 #if gettext
1156 1192 test deprecated option is hidden with translation with untranslated description
1157 1193 (use many globy for not failing on changed transaction)
1158 1194 $ LANGUAGE=sv hg help debugoptDEP
1159 1195 hg debugoptDEP
1160 1196
1161 1197 (*) (glob)
1162 1198
1163 1199 options:
1164 1200
1165 1201 (some details hidden, use --verbose to show complete help)
1166 1202 #endif
1167 1203
1168 1204 Test commands that collide with topics (issue4240)
1169 1205
1170 1206 $ hg config -hq
1171 1207 hg config [-u] [NAME]...
1172 1208
1173 1209 show combined config settings from all hgrc files
1174 1210 $ hg showconfig -hq
1175 1211 hg config [-u] [NAME]...
1176 1212
1177 1213 show combined config settings from all hgrc files
1178 1214
1179 1215 Test a help topic
1180 1216
1181 1217 $ hg help dates
1182 1218 Date Formats
1183 1219 """"""""""""
1184 1220
1185 1221 Some commands allow the user to specify a date, e.g.:
1186 1222
1187 1223 - backout, commit, import, tag: Specify the commit date.
1188 1224 - log, revert, update: Select revision(s) by date.
1189 1225
1190 1226 Many date formats are valid. Here are some examples:
1191 1227
1192 1228 - "Wed Dec 6 13:18:29 2006" (local timezone assumed)
1193 1229 - "Dec 6 13:18 -0600" (year assumed, time offset provided)
1194 1230 - "Dec 6 13:18 UTC" (UTC and GMT are aliases for +0000)
1195 1231 - "Dec 6" (midnight)
1196 1232 - "13:18" (today assumed)
1197 1233 - "3:39" (3:39AM assumed)
1198 1234 - "3:39pm" (15:39)
1199 1235 - "2006-12-06 13:18:29" (ISO 8601 format)
1200 1236 - "2006-12-6 13:18"
1201 1237 - "2006-12-6"
1202 1238 - "12-6"
1203 1239 - "12/6"
1204 1240 - "12/6/6" (Dec 6 2006)
1205 1241 - "today" (midnight)
1206 1242 - "yesterday" (midnight)
1207 1243 - "now" - right now
1208 1244
1209 1245 Lastly, there is Mercurial's internal format:
1210 1246
1211 1247 - "1165411109 0" (Wed Dec 6 13:18:29 2006 UTC)
1212 1248
1213 1249 This is the internal representation format for dates. The first number is
1214 1250 the number of seconds since the epoch (1970-01-01 00:00 UTC). The second
1215 1251 is the offset of the local timezone, in seconds west of UTC (negative if
1216 1252 the timezone is east of UTC).
1217 1253
1218 1254 The log command also accepts date ranges:
1219 1255
1220 1256 - "<DATE" - at or before a given date/time
1221 1257 - ">DATE" - on or after a given date/time
1222 1258 - "DATE to DATE" - a date range, inclusive
1223 1259 - "-DAYS" - within a given number of days of today
1224 1260
1225 1261 Test repeated config section name
1226 1262
1227 1263 $ hg help config.host
1228 1264 "http_proxy.host"
1229 1265 Host name and (optional) port of the proxy server, for example
1230 1266 "myproxy:8000".
1231 1267
1232 1268 "smtp.host"
1233 1269 Host name of mail server, e.g. "mail.example.com".
1234 1270
1235 1271 Unrelated trailing paragraphs shouldn't be included
1236 1272
1237 1273 $ hg help config.extramsg | grep '^$'
1238 1274
1239 1275
1240 1276 Test capitalized section name
1241 1277
1242 1278 $ hg help scripting.HGPLAIN > /dev/null
1243 1279
1244 1280 Help subsection:
1245 1281
1246 1282 $ hg help config.charsets |grep "Email example:" > /dev/null
1247 1283 [1]
1248 1284
1249 1285 Show nested definitions
1250 1286 ("profiling.type"[break]"ls"[break]"stat"[break])
1251 1287
1252 1288 $ hg help config.type | egrep '^$'|wc -l
1253 1289 \s*3 (re)
1254 1290
1255 1291 Separate sections from subsections
1256 1292
1257 1293 $ hg help config.format | egrep '^ ("|-)|^\s*$' | uniq
1258 1294 "format"
1259 1295 --------
1260 1296
1261 1297 "usegeneraldelta"
1262 1298
1263 1299 "dotencode"
1264 1300
1265 1301 "usefncache"
1266 1302
1267 1303 "usestore"
1268 1304
1269 1305 "profiling"
1270 1306 -----------
1271 1307
1272 1308 "format"
1273 1309
1274 1310 "progress"
1275 1311 ----------
1276 1312
1277 1313 "format"
1278 1314
1279 1315
1280 1316 Last item in help config.*:
1281 1317
1282 1318 $ hg help config.`hg help config|grep '^ "'| \
1283 1319 > tail -1|sed 's![ "]*!!g'`| \
1284 1320 > grep 'hg help -c config' > /dev/null
1285 1321 [1]
1286 1322
1287 1323 note to use help -c for general hg help config:
1288 1324
1289 1325 $ hg help config |grep 'hg help -c config' > /dev/null
1290 1326
1291 1327 Test templating help
1292 1328
1293 1329 $ hg help templating | egrep '(desc|diffstat|firstline|nonempty) '
1294 1330 desc String. The text of the changeset description.
1295 1331 diffstat String. Statistics of changes with the following format:
1296 1332 firstline Any text. Returns the first line of text.
1297 1333 nonempty Any text. Returns '(none)' if the string is empty.
1298 1334
1299 1335 Test deprecated items
1300 1336
1301 1337 $ hg help -v templating | grep currentbookmark
1302 1338 currentbookmark
1303 1339 $ hg help templating | (grep currentbookmark || true)
1304 1340
1305 1341 Test help hooks
1306 1342
1307 1343 $ cat > helphook1.py <<EOF
1308 1344 > from mercurial import help
1309 1345 >
1310 1346 > def rewrite(ui, topic, doc):
1311 1347 > return doc + '\nhelphook1\n'
1312 1348 >
1313 1349 > def extsetup(ui):
1314 1350 > help.addtopichook('revisions', rewrite)
1315 1351 > EOF
1316 1352 $ cat > helphook2.py <<EOF
1317 1353 > from mercurial import help
1318 1354 >
1319 1355 > def rewrite(ui, topic, doc):
1320 1356 > return doc + '\nhelphook2\n'
1321 1357 >
1322 1358 > def extsetup(ui):
1323 1359 > help.addtopichook('revisions', rewrite)
1324 1360 > EOF
1325 1361 $ echo '[extensions]' >> $HGRCPATH
1326 1362 $ echo "helphook1 = `pwd`/helphook1.py" >> $HGRCPATH
1327 1363 $ echo "helphook2 = `pwd`/helphook2.py" >> $HGRCPATH
1328 1364 $ hg help revsets | grep helphook
1329 1365 helphook1
1330 1366 helphook2
1331 1367
1332 1368 help -c should only show debug --debug
1333 1369
1334 1370 $ hg help -c --debug|egrep debug|wc -l|egrep '^\s*0\s*$'
1335 1371 [1]
1336 1372
1337 1373 help -c should only show deprecated for -v
1338 1374
1339 1375 $ hg help -c -v|egrep DEPRECATED|wc -l|egrep '^\s*0\s*$'
1340 1376 [1]
1341 1377
1342 1378 Test -s / --system
1343 1379
1344 1380 $ hg help config.files -s windows |grep 'etc/mercurial' | \
1345 1381 > wc -l | sed -e 's/ //g'
1346 1382 0
1347 1383 $ hg help config.files --system unix | grep 'USER' | \
1348 1384 > wc -l | sed -e 's/ //g'
1349 1385 0
1350 1386
1351 1387 Test -e / -c / -k combinations
1352 1388
1353 1389 $ hg help -c|egrep '^[A-Z].*:|^ debug'
1354 1390 Commands:
1355 1391 $ hg help -e|egrep '^[A-Z].*:|^ debug'
1356 1392 Extensions:
1357 1393 $ hg help -k|egrep '^[A-Z].*:|^ debug'
1358 1394 Topics:
1359 1395 Commands:
1360 1396 Extensions:
1361 1397 Extension Commands:
1362 1398 $ hg help -c schemes
1363 1399 abort: no such help topic: schemes
1364 1400 (try 'hg help --keyword schemes')
1365 1401 [255]
1366 1402 $ hg help -e schemes |head -1
1367 1403 schemes extension - extend schemes with shortcuts to repository swarms
1368 1404 $ hg help -c -k dates |egrep '^(Topics|Extensions|Commands):'
1369 1405 Commands:
1370 1406 $ hg help -e -k a |egrep '^(Topics|Extensions|Commands):'
1371 1407 Extensions:
1372 1408 $ hg help -e -c -k date |egrep '^(Topics|Extensions|Commands):'
1373 1409 Extensions:
1374 1410 Commands:
1375 1411 $ hg help -c commit > /dev/null
1376 1412 $ hg help -e -c commit > /dev/null
1377 1413 $ hg help -e commit > /dev/null
1378 1414 abort: no such help topic: commit
1379 1415 (try 'hg help --keyword commit')
1380 1416 [255]
1381 1417
1382 1418 Test keyword search help
1383 1419
1384 1420 $ cat > prefixedname.py <<EOF
1385 1421 > '''matched against word "clone"
1386 1422 > '''
1387 1423 > EOF
1388 1424 $ echo '[extensions]' >> $HGRCPATH
1389 1425 $ echo "dot.dot.prefixedname = `pwd`/prefixedname.py" >> $HGRCPATH
1390 1426 $ hg help -k clone
1391 1427 Topics:
1392 1428
1393 1429 config Configuration Files
1394 1430 extensions Using Additional Features
1395 1431 glossary Glossary
1396 1432 phases Working with Phases
1397 1433 subrepos Subrepositories
1398 1434 urls URL Paths
1399 1435
1400 1436 Commands:
1401 1437
1402 1438 bookmarks create a new bookmark or list existing bookmarks
1403 1439 clone make a copy of an existing repository
1404 1440 paths show aliases for remote repositories
1405 1441 update update working directory (or switch revisions)
1406 1442
1407 1443 Extensions:
1408 1444
1409 1445 clonebundles advertise pre-generated bundles to seed clones
1410 1446 prefixedname matched against word "clone"
1411 1447 relink recreates hardlinks between repository clones
1412 1448
1413 1449 Extension Commands:
1414 1450
1415 1451 qclone clone main and patch repository at same time
1416 1452
1417 1453 Test unfound topic
1418 1454
1419 1455 $ hg help nonexistingtopicthatwillneverexisteverever
1420 1456 abort: no such help topic: nonexistingtopicthatwillneverexisteverever
1421 1457 (try 'hg help --keyword nonexistingtopicthatwillneverexisteverever')
1422 1458 [255]
1423 1459
1424 1460 Test unfound keyword
1425 1461
1426 1462 $ hg help --keyword nonexistingwordthatwillneverexisteverever
1427 1463 abort: no matches
1428 1464 (try 'hg help' for a list of topics)
1429 1465 [255]
1430 1466
1431 1467 Test omit indicating for help
1432 1468
1433 1469 $ cat > addverboseitems.py <<EOF
1434 1470 > '''extension to test omit indicating.
1435 1471 >
1436 1472 > This paragraph is never omitted (for extension)
1437 1473 >
1438 1474 > .. container:: verbose
1439 1475 >
1440 1476 > This paragraph is omitted,
1441 1477 > if :hg:\`help\` is invoked without \`\`-v\`\` (for extension)
1442 1478 >
1443 1479 > This paragraph is never omitted, too (for extension)
1444 1480 > '''
1445 1481 >
1446 1482 > from mercurial import help, commands
1447 1483 > testtopic = """This paragraph is never omitted (for topic).
1448 1484 >
1449 1485 > .. container:: verbose
1450 1486 >
1451 1487 > This paragraph is omitted,
1452 1488 > if :hg:\`help\` is invoked without \`\`-v\`\` (for topic)
1453 1489 >
1454 1490 > This paragraph is never omitted, too (for topic)
1455 1491 > """
1456 1492 > def extsetup(ui):
1457 1493 > help.helptable.append((["topic-containing-verbose"],
1458 1494 > "This is the topic to test omit indicating.",
1459 1495 > lambda ui: testtopic))
1460 1496 > EOF
1461 1497 $ echo '[extensions]' >> $HGRCPATH
1462 1498 $ echo "addverboseitems = `pwd`/addverboseitems.py" >> $HGRCPATH
1463 1499 $ hg help addverboseitems
1464 1500 addverboseitems extension - extension to test omit indicating.
1465 1501
1466 1502 This paragraph is never omitted (for extension)
1467 1503
1468 1504 This paragraph is never omitted, too (for extension)
1469 1505
1470 1506 (some details hidden, use --verbose to show complete help)
1471 1507
1472 1508 no commands defined
1473 1509 $ hg help -v addverboseitems
1474 1510 addverboseitems extension - extension to test omit indicating.
1475 1511
1476 1512 This paragraph is never omitted (for extension)
1477 1513
1478 1514 This paragraph is omitted, if 'hg help' is invoked without "-v" (for
1479 1515 extension)
1480 1516
1481 1517 This paragraph is never omitted, too (for extension)
1482 1518
1483 1519 no commands defined
1484 1520 $ hg help topic-containing-verbose
1485 1521 This is the topic to test omit indicating.
1486 1522 """"""""""""""""""""""""""""""""""""""""""
1487 1523
1488 1524 This paragraph is never omitted (for topic).
1489 1525
1490 1526 This paragraph is never omitted, too (for topic)
1491 1527
1492 1528 (some details hidden, use --verbose to show complete help)
1493 1529 $ hg help -v topic-containing-verbose
1494 1530 This is the topic to test omit indicating.
1495 1531 """"""""""""""""""""""""""""""""""""""""""
1496 1532
1497 1533 This paragraph is never omitted (for topic).
1498 1534
1499 1535 This paragraph is omitted, if 'hg help' is invoked without "-v" (for
1500 1536 topic)
1501 1537
1502 1538 This paragraph is never omitted, too (for topic)
1503 1539
1504 1540 Test section lookup
1505 1541
1506 1542 $ hg help revset.merge
1507 1543 "merge()"
1508 1544 Changeset is a merge changeset.
1509 1545
1510 1546 $ hg help glossary.dag
1511 1547 DAG
1512 1548 The repository of changesets of a distributed version control system
1513 1549 (DVCS) can be described as a directed acyclic graph (DAG), consisting
1514 1550 of nodes and edges, where nodes correspond to changesets and edges
1515 1551 imply a parent -> child relation. This graph can be visualized by
1516 1552 graphical tools such as 'hg log --graph'. In Mercurial, the DAG is
1517 1553 limited by the requirement for children to have at most two parents.
1518 1554
1519 1555
1520 1556 $ hg help hgrc.paths
1521 1557 "paths"
1522 1558 -------
1523 1559
1524 1560 Assigns symbolic names and behavior to repositories.
1525 1561
1526 1562 Options are symbolic names defining the URL or directory that is the
1527 1563 location of the repository. Example:
1528 1564
1529 1565 [paths]
1530 1566 my_server = https://example.com/my_repo
1531 1567 local_path = /home/me/repo
1532 1568
1533 1569 These symbolic names can be used from the command line. To pull from
1534 1570 "my_server": 'hg pull my_server'. To push to "local_path": 'hg push
1535 1571 local_path'.
1536 1572
1537 1573 Options containing colons (":") denote sub-options that can influence
1538 1574 behavior for that specific path. Example:
1539 1575
1540 1576 [paths]
1541 1577 my_server = https://example.com/my_path
1542 1578 my_server:pushurl = ssh://example.com/my_path
1543 1579
1544 1580 The following sub-options can be defined:
1545 1581
1546 1582 "pushurl"
1547 1583 The URL to use for push operations. If not defined, the location
1548 1584 defined by the path's main entry is used.
1549 1585
1550 1586 "pushrev"
1551 1587 A revset defining which revisions to push by default.
1552 1588
1553 1589 When 'hg push' is executed without a "-r" argument, the revset defined
1554 1590 by this sub-option is evaluated to determine what to push.
1555 1591
1556 1592 For example, a value of "." will push the working directory's revision
1557 1593 by default.
1558 1594
1559 1595 Revsets specifying bookmarks will not result in the bookmark being
1560 1596 pushed.
1561 1597
1562 1598 The following special named paths exist:
1563 1599
1564 1600 "default"
1565 1601 The URL or directory to use when no source or remote is specified.
1566 1602
1567 1603 'hg clone' will automatically define this path to the location the
1568 1604 repository was cloned from.
1569 1605
1570 1606 "default-push"
1571 1607 (deprecated) The URL or directory for the default 'hg push' location.
1572 1608 "default:pushurl" should be used instead.
1573 1609
1574 1610 $ hg help glossary.mcguffin
1575 1611 abort: help section not found: glossary.mcguffin
1576 1612 [255]
1577 1613
1578 1614 $ hg help glossary.mc.guffin
1579 1615 abort: help section not found: glossary.mc.guffin
1580 1616 [255]
1581 1617
1582 1618 $ hg help template.files
1583 1619 files List of strings. All files modified, added, or removed by
1584 1620 this changeset.
1585 1621 files(pattern)
1586 1622 All files of the current changeset matching the pattern. See
1587 1623 'hg help patterns'.
1588 1624
1589 1625 Test section lookup by translated message
1590 1626
1591 1627 str.lower() instead of encoding.lower(str) on translated message might
1592 1628 make message meaningless, because some encoding uses 0x41(A) - 0x5a(Z)
1593 1629 as the second or later byte of multi-byte character.
1594 1630
1595 1631 For example, "\x8bL\x98^" (translation of "record" in ja_JP.cp932)
1596 1632 contains 0x4c (L). str.lower() replaces 0x4c(L) by 0x6c(l) and this
1597 1633 replacement makes message meaningless.
1598 1634
1599 1635 This tests that section lookup by translated string isn't broken by
1600 1636 such str.lower().
1601 1637
1602 1638 $ python <<EOF
1603 1639 > def escape(s):
1604 1640 > return ''.join('\u%x' % ord(uc) for uc in s.decode('cp932'))
1605 1641 > # translation of "record" in ja_JP.cp932
1606 1642 > upper = "\x8bL\x98^"
1607 1643 > # str.lower()-ed section name should be treated as different one
1608 1644 > lower = "\x8bl\x98^"
1609 1645 > with open('ambiguous.py', 'w') as fp:
1610 1646 > fp.write("""# ambiguous section names in ja_JP.cp932
1611 1647 > u'''summary of extension
1612 1648 >
1613 1649 > %s
1614 1650 > ----
1615 1651 >
1616 1652 > Upper name should show only this message
1617 1653 >
1618 1654 > %s
1619 1655 > ----
1620 1656 >
1621 1657 > Lower name should show only this message
1622 1658 >
1623 1659 > subsequent section
1624 1660 > ------------------
1625 1661 >
1626 1662 > This should be hidden at 'hg help ambiguous' with section name.
1627 1663 > '''
1628 1664 > """ % (escape(upper), escape(lower)))
1629 1665 > EOF
1630 1666
1631 1667 $ cat >> $HGRCPATH <<EOF
1632 1668 > [extensions]
1633 1669 > ambiguous = ./ambiguous.py
1634 1670 > EOF
1635 1671
1636 1672 $ python <<EOF | sh
1637 1673 > upper = "\x8bL\x98^"
1638 1674 > print "hg --encoding cp932 help -e ambiguous.%s" % upper
1639 1675 > EOF
1640 1676 \x8bL\x98^ (esc)
1641 1677 ----
1642 1678
1643 1679 Upper name should show only this message
1644 1680
1645 1681
1646 1682 $ python <<EOF | sh
1647 1683 > lower = "\x8bl\x98^"
1648 1684 > print "hg --encoding cp932 help -e ambiguous.%s" % lower
1649 1685 > EOF
1650 1686 \x8bl\x98^ (esc)
1651 1687 ----
1652 1688
1653 1689 Lower name should show only this message
1654 1690
1655 1691
1656 1692 $ cat >> $HGRCPATH <<EOF
1657 1693 > [extensions]
1658 1694 > ambiguous = !
1659 1695 > EOF
1660 1696
1661 1697 Show help content of disabled extensions
1662 1698
1663 1699 $ cat >> $HGRCPATH <<EOF
1664 1700 > [extensions]
1665 1701 > ambiguous = !./ambiguous.py
1666 1702 > EOF
1667 1703 $ hg help -e ambiguous
1668 1704 ambiguous extension - (no help text available)
1669 1705
1670 1706 (use 'hg help extensions' for information on enabling extensions)
1671 1707
1672 1708 Test dynamic list of merge tools only shows up once
1673 1709 $ hg help merge-tools
1674 1710 Merge Tools
1675 1711 """""""""""
1676 1712
1677 1713 To merge files Mercurial uses merge tools.
1678 1714
1679 1715 A merge tool combines two different versions of a file into a merged file.
1680 1716 Merge tools are given the two files and the greatest common ancestor of
1681 1717 the two file versions, so they can determine the changes made on both
1682 1718 branches.
1683 1719
1684 1720 Merge tools are used both for 'hg resolve', 'hg merge', 'hg update', 'hg
1685 1721 backout' and in several extensions.
1686 1722
1687 1723 Usually, the merge tool tries to automatically reconcile the files by
1688 1724 combining all non-overlapping changes that occurred separately in the two
1689 1725 different evolutions of the same initial base file. Furthermore, some
1690 1726 interactive merge programs make it easier to manually resolve conflicting
1691 1727 merges, either in a graphical way, or by inserting some conflict markers.
1692 1728 Mercurial does not include any interactive merge programs but relies on
1693 1729 external tools for that.
1694 1730
1695 1731 Available merge tools
1696 1732 =====================
1697 1733
1698 1734 External merge tools and their properties are configured in the merge-
1699 1735 tools configuration section - see hgrc(5) - but they can often just be
1700 1736 named by their executable.
1701 1737
1702 1738 A merge tool is generally usable if its executable can be found on the
1703 1739 system and if it can handle the merge. The executable is found if it is an
1704 1740 absolute or relative executable path or the name of an application in the
1705 1741 executable search path. The tool is assumed to be able to handle the merge
1706 1742 if it can handle symlinks if the file is a symlink, if it can handle
1707 1743 binary files if the file is binary, and if a GUI is available if the tool
1708 1744 requires a GUI.
1709 1745
1710 1746 There are some internal merge tools which can be used. The internal merge
1711 1747 tools are:
1712 1748
1713 1749 ":dump"
1714 1750 Creates three versions of the files to merge, containing the contents of
1715 1751 local, other and base. These files can then be used to perform a merge
1716 1752 manually. If the file to be merged is named "a.txt", these files will
1717 1753 accordingly be named "a.txt.local", "a.txt.other" and "a.txt.base" and
1718 1754 they will be placed in the same directory as "a.txt".
1719 1755
1720 1756 ":fail"
1721 1757 Rather than attempting to merge files that were modified on both
1722 1758 branches, it marks them as unresolved. The resolve command must be used
1723 1759 to resolve these conflicts.
1724 1760
1725 1761 ":local"
1726 1762 Uses the local 'p1()' version of files as the merged version.
1727 1763
1728 1764 ":merge"
1729 1765 Uses the internal non-interactive simple merge algorithm for merging
1730 1766 files. It will fail if there are any conflicts and leave markers in the
1731 1767 partially merged file. Markers will have two sections, one for each side
1732 1768 of merge.
1733 1769
1734 1770 ":merge-local"
1735 1771 Like :merge, but resolve all conflicts non-interactively in favor of the
1736 1772 local 'p1()' changes.
1737 1773
1738 1774 ":merge-other"
1739 1775 Like :merge, but resolve all conflicts non-interactively in favor of the
1740 1776 other 'p2()' changes.
1741 1777
1742 1778 ":merge3"
1743 1779 Uses the internal non-interactive simple merge algorithm for merging
1744 1780 files. It will fail if there are any conflicts and leave markers in the
1745 1781 partially merged file. Marker will have three sections, one from each
1746 1782 side of the merge and one for the base content.
1747 1783
1748 1784 ":other"
1749 1785 Uses the other 'p2()' version of files as the merged version.
1750 1786
1751 1787 ":prompt"
1752 1788 Asks the user which of the local 'p1()' or the other 'p2()' version to
1753 1789 keep as the merged version.
1754 1790
1755 1791 ":tagmerge"
1756 1792 Uses the internal tag merge algorithm (experimental).
1757 1793
1758 1794 ":union"
1759 1795 Uses the internal non-interactive simple merge algorithm for merging
1760 1796 files. It will use both left and right sides for conflict regions. No
1761 1797 markers are inserted.
1762 1798
1763 1799 Internal tools are always available and do not require a GUI but will by
1764 1800 default not handle symlinks or binary files.
1765 1801
1766 1802 Choosing a merge tool
1767 1803 =====================
1768 1804
1769 1805 Mercurial uses these rules when deciding which merge tool to use:
1770 1806
1771 1807 1. If a tool has been specified with the --tool option to merge or
1772 1808 resolve, it is used. If it is the name of a tool in the merge-tools
1773 1809 configuration, its configuration is used. Otherwise the specified tool
1774 1810 must be executable by the shell.
1775 1811 2. If the "HGMERGE" environment variable is present, its value is used and
1776 1812 must be executable by the shell.
1777 1813 3. If the filename of the file to be merged matches any of the patterns in
1778 1814 the merge-patterns configuration section, the first usable merge tool
1779 1815 corresponding to a matching pattern is used. Here, binary capabilities
1780 1816 of the merge tool are not considered.
1781 1817 4. If ui.merge is set it will be considered next. If the value is not the
1782 1818 name of a configured tool, the specified value is used and must be
1783 1819 executable by the shell. Otherwise the named tool is used if it is
1784 1820 usable.
1785 1821 5. If any usable merge tools are present in the merge-tools configuration
1786 1822 section, the one with the highest priority is used.
1787 1823 6. If a program named "hgmerge" can be found on the system, it is used -
1788 1824 but it will by default not be used for symlinks and binary files.
1789 1825 7. If the file to be merged is not binary and is not a symlink, then
1790 1826 internal ":merge" is used.
1791 1827 8. The merge of the file fails and must be resolved before commit.
1792 1828
1793 1829 Note:
1794 1830 After selecting a merge program, Mercurial will by default attempt to
1795 1831 merge the files using a simple merge algorithm first. Only if it
1796 1832 doesn't succeed because of conflicting changes Mercurial will actually
1797 1833 execute the merge program. Whether to use the simple merge algorithm
1798 1834 first can be controlled by the premerge setting of the merge tool.
1799 1835 Premerge is enabled by default unless the file is binary or a symlink.
1800 1836
1801 1837 See the merge-tools and ui sections of hgrc(5) for details on the
1802 1838 configuration of merge tools.
1803 1839
1804 1840 Test usage of section marks in help documents
1805 1841
1806 1842 $ cd "$TESTDIR"/../doc
1807 1843 $ python check-seclevel.py
1808 1844 $ cd $TESTTMP
1809 1845
1810 1846 #if serve
1811 1847
1812 1848 Test the help pages in hgweb.
1813 1849
1814 1850 Dish up an empty repo; serve it cold.
1815 1851
1816 1852 $ hg init "$TESTTMP/test"
1817 1853 $ hg serve -R "$TESTTMP/test" -n test -p $HGPORT -d --pid-file=hg.pid
1818 1854 $ cat hg.pid >> $DAEMON_PIDS
1819 1855
1820 1856 $ get-with-headers.py $LOCALIP:$HGPORT "help"
1821 1857 200 Script output follows
1822 1858
1823 1859 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
1824 1860 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
1825 1861 <head>
1826 1862 <link rel="icon" href="/static/hgicon.png" type="image/png" />
1827 1863 <meta name="robots" content="index, nofollow" />
1828 1864 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
1829 1865 <script type="text/javascript" src="/static/mercurial.js"></script>
1830 1866
1831 1867 <title>Help: Index</title>
1832 1868 </head>
1833 1869 <body>
1834 1870
1835 1871 <div class="container">
1836 1872 <div class="menu">
1837 1873 <div class="logo">
1838 1874 <a href="https://mercurial-scm.org/">
1839 1875 <img src="/static/hglogo.png" alt="mercurial" /></a>
1840 1876 </div>
1841 1877 <ul>
1842 1878 <li><a href="/shortlog">log</a></li>
1843 1879 <li><a href="/graph">graph</a></li>
1844 1880 <li><a href="/tags">tags</a></li>
1845 1881 <li><a href="/bookmarks">bookmarks</a></li>
1846 1882 <li><a href="/branches">branches</a></li>
1847 1883 </ul>
1848 1884 <ul>
1849 1885 <li class="active">help</li>
1850 1886 </ul>
1851 1887 </div>
1852 1888
1853 1889 <div class="main">
1854 1890 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
1855 1891 <form class="search" action="/log">
1856 1892
1857 1893 <p><input name="rev" id="search1" type="text" size="30" /></p>
1858 1894 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
1859 1895 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
1860 1896 </form>
1861 1897 <table class="bigtable">
1862 1898 <tr><td colspan="2"><h2><a name="topics" href="#topics">Topics</a></h2></td></tr>
1863 1899
1864 1900 <tr><td>
1865 1901 <a href="/help/color">
1866 1902 color
1867 1903 </a>
1868 1904 </td><td>
1869 1905 Colorizing Outputs
1870 1906 </td></tr>
1871 1907 <tr><td>
1872 1908 <a href="/help/config">
1873 1909 config
1874 1910 </a>
1875 1911 </td><td>
1876 1912 Configuration Files
1877 1913 </td></tr>
1878 1914 <tr><td>
1879 1915 <a href="/help/dates">
1880 1916 dates
1881 1917 </a>
1882 1918 </td><td>
1883 1919 Date Formats
1884 1920 </td></tr>
1885 1921 <tr><td>
1886 1922 <a href="/help/diffs">
1887 1923 diffs
1888 1924 </a>
1889 1925 </td><td>
1890 1926 Diff Formats
1891 1927 </td></tr>
1892 1928 <tr><td>
1893 1929 <a href="/help/environment">
1894 1930 environment
1895 1931 </a>
1896 1932 </td><td>
1897 1933 Environment Variables
1898 1934 </td></tr>
1899 1935 <tr><td>
1900 1936 <a href="/help/extensions">
1901 1937 extensions
1902 1938 </a>
1903 1939 </td><td>
1904 1940 Using Additional Features
1905 1941 </td></tr>
1906 1942 <tr><td>
1907 1943 <a href="/help/filesets">
1908 1944 filesets
1909 1945 </a>
1910 1946 </td><td>
1911 1947 Specifying File Sets
1912 1948 </td></tr>
1913 1949 <tr><td>
1914 1950 <a href="/help/glossary">
1915 1951 glossary
1916 1952 </a>
1917 1953 </td><td>
1918 1954 Glossary
1919 1955 </td></tr>
1920 1956 <tr><td>
1921 1957 <a href="/help/hgignore">
1922 1958 hgignore
1923 1959 </a>
1924 1960 </td><td>
1925 1961 Syntax for Mercurial Ignore Files
1926 1962 </td></tr>
1927 1963 <tr><td>
1928 1964 <a href="/help/hgweb">
1929 1965 hgweb
1930 1966 </a>
1931 1967 </td><td>
1932 1968 Configuring hgweb
1933 1969 </td></tr>
1934 1970 <tr><td>
1935 1971 <a href="/help/internals">
1936 1972 internals
1937 1973 </a>
1938 1974 </td><td>
1939 1975 Technical implementation topics
1940 1976 </td></tr>
1941 1977 <tr><td>
1942 1978 <a href="/help/merge-tools">
1943 1979 merge-tools
1944 1980 </a>
1945 1981 </td><td>
1946 1982 Merge Tools
1947 1983 </td></tr>
1948 1984 <tr><td>
1949 1985 <a href="/help/pager">
1950 1986 pager
1951 1987 </a>
1952 1988 </td><td>
1953 1989 Pager Support
1954 1990 </td></tr>
1955 1991 <tr><td>
1956 1992 <a href="/help/patterns">
1957 1993 patterns
1958 1994 </a>
1959 1995 </td><td>
1960 1996 File Name Patterns
1961 1997 </td></tr>
1962 1998 <tr><td>
1963 1999 <a href="/help/phases">
1964 2000 phases
1965 2001 </a>
1966 2002 </td><td>
1967 2003 Working with Phases
1968 2004 </td></tr>
1969 2005 <tr><td>
1970 2006 <a href="/help/revisions">
1971 2007 revisions
1972 2008 </a>
1973 2009 </td><td>
1974 2010 Specifying Revisions
1975 2011 </td></tr>
1976 2012 <tr><td>
1977 2013 <a href="/help/scripting">
1978 2014 scripting
1979 2015 </a>
1980 2016 </td><td>
1981 2017 Using Mercurial from scripts and automation
1982 2018 </td></tr>
1983 2019 <tr><td>
1984 2020 <a href="/help/subrepos">
1985 2021 subrepos
1986 2022 </a>
1987 2023 </td><td>
1988 2024 Subrepositories
1989 2025 </td></tr>
1990 2026 <tr><td>
1991 2027 <a href="/help/templating">
1992 2028 templating
1993 2029 </a>
1994 2030 </td><td>
1995 2031 Template Usage
1996 2032 </td></tr>
1997 2033 <tr><td>
1998 2034 <a href="/help/urls">
1999 2035 urls
2000 2036 </a>
2001 2037 </td><td>
2002 2038 URL Paths
2003 2039 </td></tr>
2004 2040 <tr><td>
2005 2041 <a href="/help/topic-containing-verbose">
2006 2042 topic-containing-verbose
2007 2043 </a>
2008 2044 </td><td>
2009 2045 This is the topic to test omit indicating.
2010 2046 </td></tr>
2011 2047
2012 2048
2013 2049 <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
2014 2050
2015 2051 <tr><td>
2016 2052 <a href="/help/add">
2017 2053 add
2018 2054 </a>
2019 2055 </td><td>
2020 2056 add the specified files on the next commit
2021 2057 </td></tr>
2022 2058 <tr><td>
2023 2059 <a href="/help/annotate">
2024 2060 annotate
2025 2061 </a>
2026 2062 </td><td>
2027 2063 show changeset information by line for each file
2028 2064 </td></tr>
2029 2065 <tr><td>
2030 2066 <a href="/help/clone">
2031 2067 clone
2032 2068 </a>
2033 2069 </td><td>
2034 2070 make a copy of an existing repository
2035 2071 </td></tr>
2036 2072 <tr><td>
2037 2073 <a href="/help/commit">
2038 2074 commit
2039 2075 </a>
2040 2076 </td><td>
2041 2077 commit the specified files or all outstanding changes
2042 2078 </td></tr>
2043 2079 <tr><td>
2044 2080 <a href="/help/diff">
2045 2081 diff
2046 2082 </a>
2047 2083 </td><td>
2048 2084 diff repository (or selected files)
2049 2085 </td></tr>
2050 2086 <tr><td>
2051 2087 <a href="/help/export">
2052 2088 export
2053 2089 </a>
2054 2090 </td><td>
2055 2091 dump the header and diffs for one or more changesets
2056 2092 </td></tr>
2057 2093 <tr><td>
2058 2094 <a href="/help/forget">
2059 2095 forget
2060 2096 </a>
2061 2097 </td><td>
2062 2098 forget the specified files on the next commit
2063 2099 </td></tr>
2064 2100 <tr><td>
2065 2101 <a href="/help/init">
2066 2102 init
2067 2103 </a>
2068 2104 </td><td>
2069 2105 create a new repository in the given directory
2070 2106 </td></tr>
2071 2107 <tr><td>
2072 2108 <a href="/help/log">
2073 2109 log
2074 2110 </a>
2075 2111 </td><td>
2076 2112 show revision history of entire repository or files
2077 2113 </td></tr>
2078 2114 <tr><td>
2079 2115 <a href="/help/merge">
2080 2116 merge
2081 2117 </a>
2082 2118 </td><td>
2083 2119 merge another revision into working directory
2084 2120 </td></tr>
2085 2121 <tr><td>
2086 2122 <a href="/help/pull">
2087 2123 pull
2088 2124 </a>
2089 2125 </td><td>
2090 2126 pull changes from the specified source
2091 2127 </td></tr>
2092 2128 <tr><td>
2093 2129 <a href="/help/push">
2094 2130 push
2095 2131 </a>
2096 2132 </td><td>
2097 2133 push changes to the specified destination
2098 2134 </td></tr>
2099 2135 <tr><td>
2100 2136 <a href="/help/remove">
2101 2137 remove
2102 2138 </a>
2103 2139 </td><td>
2104 2140 remove the specified files on the next commit
2105 2141 </td></tr>
2106 2142 <tr><td>
2107 2143 <a href="/help/serve">
2108 2144 serve
2109 2145 </a>
2110 2146 </td><td>
2111 2147 start stand-alone webserver
2112 2148 </td></tr>
2113 2149 <tr><td>
2114 2150 <a href="/help/status">
2115 2151 status
2116 2152 </a>
2117 2153 </td><td>
2118 2154 show changed files in the working directory
2119 2155 </td></tr>
2120 2156 <tr><td>
2121 2157 <a href="/help/summary">
2122 2158 summary
2123 2159 </a>
2124 2160 </td><td>
2125 2161 summarize working directory state
2126 2162 </td></tr>
2127 2163 <tr><td>
2128 2164 <a href="/help/update">
2129 2165 update
2130 2166 </a>
2131 2167 </td><td>
2132 2168 update working directory (or switch revisions)
2133 2169 </td></tr>
2134 2170
2135 2171
2136 2172
2137 2173 <tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
2138 2174
2139 2175 <tr><td>
2140 2176 <a href="/help/addremove">
2141 2177 addremove
2142 2178 </a>
2143 2179 </td><td>
2144 2180 add all new files, delete all missing files
2145 2181 </td></tr>
2146 2182 <tr><td>
2147 2183 <a href="/help/archive">
2148 2184 archive
2149 2185 </a>
2150 2186 </td><td>
2151 2187 create an unversioned archive of a repository revision
2152 2188 </td></tr>
2153 2189 <tr><td>
2154 2190 <a href="/help/backout">
2155 2191 backout
2156 2192 </a>
2157 2193 </td><td>
2158 2194 reverse effect of earlier changeset
2159 2195 </td></tr>
2160 2196 <tr><td>
2161 2197 <a href="/help/bisect">
2162 2198 bisect
2163 2199 </a>
2164 2200 </td><td>
2165 2201 subdivision search of changesets
2166 2202 </td></tr>
2167 2203 <tr><td>
2168 2204 <a href="/help/bookmarks">
2169 2205 bookmarks
2170 2206 </a>
2171 2207 </td><td>
2172 2208 create a new bookmark or list existing bookmarks
2173 2209 </td></tr>
2174 2210 <tr><td>
2175 2211 <a href="/help/branch">
2176 2212 branch
2177 2213 </a>
2178 2214 </td><td>
2179 2215 set or show the current branch name
2180 2216 </td></tr>
2181 2217 <tr><td>
2182 2218 <a href="/help/branches">
2183 2219 branches
2184 2220 </a>
2185 2221 </td><td>
2186 2222 list repository named branches
2187 2223 </td></tr>
2188 2224 <tr><td>
2189 2225 <a href="/help/bundle">
2190 2226 bundle
2191 2227 </a>
2192 2228 </td><td>
2193 2229 create a changegroup file
2194 2230 </td></tr>
2195 2231 <tr><td>
2196 2232 <a href="/help/cat">
2197 2233 cat
2198 2234 </a>
2199 2235 </td><td>
2200 2236 output the current or given revision of files
2201 2237 </td></tr>
2202 2238 <tr><td>
2203 2239 <a href="/help/config">
2204 2240 config
2205 2241 </a>
2206 2242 </td><td>
2207 2243 show combined config settings from all hgrc files
2208 2244 </td></tr>
2209 2245 <tr><td>
2210 2246 <a href="/help/copy">
2211 2247 copy
2212 2248 </a>
2213 2249 </td><td>
2214 2250 mark files as copied for the next commit
2215 2251 </td></tr>
2216 2252 <tr><td>
2217 2253 <a href="/help/files">
2218 2254 files
2219 2255 </a>
2220 2256 </td><td>
2221 2257 list tracked files
2222 2258 </td></tr>
2223 2259 <tr><td>
2224 2260 <a href="/help/graft">
2225 2261 graft
2226 2262 </a>
2227 2263 </td><td>
2228 2264 copy changes from other branches onto the current branch
2229 2265 </td></tr>
2230 2266 <tr><td>
2231 2267 <a href="/help/grep">
2232 2268 grep
2233 2269 </a>
2234 2270 </td><td>
2235 2271 search revision history for a pattern in specified files
2236 2272 </td></tr>
2237 2273 <tr><td>
2238 2274 <a href="/help/heads">
2239 2275 heads
2240 2276 </a>
2241 2277 </td><td>
2242 2278 show branch heads
2243 2279 </td></tr>
2244 2280 <tr><td>
2245 2281 <a href="/help/help">
2246 2282 help
2247 2283 </a>
2248 2284 </td><td>
2249 2285 show help for a given topic or a help overview
2250 2286 </td></tr>
2251 2287 <tr><td>
2252 2288 <a href="/help/hgalias">
2253 2289 hgalias
2254 2290 </a>
2255 2291 </td><td>
2256 2292 summarize working directory state
2257 2293 </td></tr>
2258 2294 <tr><td>
2259 2295 <a href="/help/identify">
2260 2296 identify
2261 2297 </a>
2262 2298 </td><td>
2263 2299 identify the working directory or specified revision
2264 2300 </td></tr>
2265 2301 <tr><td>
2266 2302 <a href="/help/import">
2267 2303 import
2268 2304 </a>
2269 2305 </td><td>
2270 2306 import an ordered set of patches
2271 2307 </td></tr>
2272 2308 <tr><td>
2273 2309 <a href="/help/incoming">
2274 2310 incoming
2275 2311 </a>
2276 2312 </td><td>
2277 2313 show new changesets found in source
2278 2314 </td></tr>
2279 2315 <tr><td>
2280 2316 <a href="/help/manifest">
2281 2317 manifest
2282 2318 </a>
2283 2319 </td><td>
2284 2320 output the current or given revision of the project manifest
2285 2321 </td></tr>
2286 2322 <tr><td>
2287 2323 <a href="/help/nohelp">
2288 2324 nohelp
2289 2325 </a>
2290 2326 </td><td>
2291 2327 (no help text available)
2292 2328 </td></tr>
2293 2329 <tr><td>
2294 2330 <a href="/help/outgoing">
2295 2331 outgoing
2296 2332 </a>
2297 2333 </td><td>
2298 2334 show changesets not found in the destination
2299 2335 </td></tr>
2300 2336 <tr><td>
2301 2337 <a href="/help/paths">
2302 2338 paths
2303 2339 </a>
2304 2340 </td><td>
2305 2341 show aliases for remote repositories
2306 2342 </td></tr>
2307 2343 <tr><td>
2308 2344 <a href="/help/phase">
2309 2345 phase
2310 2346 </a>
2311 2347 </td><td>
2312 2348 set or show the current phase name
2313 2349 </td></tr>
2314 2350 <tr><td>
2315 2351 <a href="/help/recover">
2316 2352 recover
2317 2353 </a>
2318 2354 </td><td>
2319 2355 roll back an interrupted transaction
2320 2356 </td></tr>
2321 2357 <tr><td>
2322 2358 <a href="/help/rename">
2323 2359 rename
2324 2360 </a>
2325 2361 </td><td>
2326 2362 rename files; equivalent of copy + remove
2327 2363 </td></tr>
2328 2364 <tr><td>
2329 2365 <a href="/help/resolve">
2330 2366 resolve
2331 2367 </a>
2332 2368 </td><td>
2333 2369 redo merges or set/view the merge status of files
2334 2370 </td></tr>
2335 2371 <tr><td>
2336 2372 <a href="/help/revert">
2337 2373 revert
2338 2374 </a>
2339 2375 </td><td>
2340 2376 restore files to their checkout state
2341 2377 </td></tr>
2342 2378 <tr><td>
2343 2379 <a href="/help/root">
2344 2380 root
2345 2381 </a>
2346 2382 </td><td>
2347 2383 print the root (top) of the current working directory
2348 2384 </td></tr>
2349 2385 <tr><td>
2350 2386 <a href="/help/shellalias">
2351 2387 shellalias
2352 2388 </a>
2353 2389 </td><td>
2354 2390 (no help text available)
2355 2391 </td></tr>
2356 2392 <tr><td>
2357 2393 <a href="/help/tag">
2358 2394 tag
2359 2395 </a>
2360 2396 </td><td>
2361 2397 add one or more tags for the current or given revision
2362 2398 </td></tr>
2363 2399 <tr><td>
2364 2400 <a href="/help/tags">
2365 2401 tags
2366 2402 </a>
2367 2403 </td><td>
2368 2404 list repository tags
2369 2405 </td></tr>
2370 2406 <tr><td>
2371 2407 <a href="/help/unbundle">
2372 2408 unbundle
2373 2409 </a>
2374 2410 </td><td>
2375 2411 apply one or more changegroup files
2376 2412 </td></tr>
2377 2413 <tr><td>
2378 2414 <a href="/help/verify">
2379 2415 verify
2380 2416 </a>
2381 2417 </td><td>
2382 2418 verify the integrity of the repository
2383 2419 </td></tr>
2384 2420 <tr><td>
2385 2421 <a href="/help/version">
2386 2422 version
2387 2423 </a>
2388 2424 </td><td>
2389 2425 output version and copyright information
2390 2426 </td></tr>
2391 2427
2392 2428
2393 2429 </table>
2394 2430 </div>
2395 2431 </div>
2396 2432
2397 2433
2398 2434
2399 2435 </body>
2400 2436 </html>
2401 2437
2402 2438
2403 2439 $ get-with-headers.py $LOCALIP:$HGPORT "help/add"
2404 2440 200 Script output follows
2405 2441
2406 2442 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2407 2443 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2408 2444 <head>
2409 2445 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2410 2446 <meta name="robots" content="index, nofollow" />
2411 2447 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2412 2448 <script type="text/javascript" src="/static/mercurial.js"></script>
2413 2449
2414 2450 <title>Help: add</title>
2415 2451 </head>
2416 2452 <body>
2417 2453
2418 2454 <div class="container">
2419 2455 <div class="menu">
2420 2456 <div class="logo">
2421 2457 <a href="https://mercurial-scm.org/">
2422 2458 <img src="/static/hglogo.png" alt="mercurial" /></a>
2423 2459 </div>
2424 2460 <ul>
2425 2461 <li><a href="/shortlog">log</a></li>
2426 2462 <li><a href="/graph">graph</a></li>
2427 2463 <li><a href="/tags">tags</a></li>
2428 2464 <li><a href="/bookmarks">bookmarks</a></li>
2429 2465 <li><a href="/branches">branches</a></li>
2430 2466 </ul>
2431 2467 <ul>
2432 2468 <li class="active"><a href="/help">help</a></li>
2433 2469 </ul>
2434 2470 </div>
2435 2471
2436 2472 <div class="main">
2437 2473 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
2438 2474 <h3>Help: add</h3>
2439 2475
2440 2476 <form class="search" action="/log">
2441 2477
2442 2478 <p><input name="rev" id="search1" type="text" size="30" /></p>
2443 2479 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
2444 2480 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
2445 2481 </form>
2446 2482 <div id="doc">
2447 2483 <p>
2448 2484 hg add [OPTION]... [FILE]...
2449 2485 </p>
2450 2486 <p>
2451 2487 add the specified files on the next commit
2452 2488 </p>
2453 2489 <p>
2454 2490 Schedule files to be version controlled and added to the
2455 2491 repository.
2456 2492 </p>
2457 2493 <p>
2458 2494 The files will be added to the repository at the next commit. To
2459 2495 undo an add before that, see 'hg forget'.
2460 2496 </p>
2461 2497 <p>
2462 2498 If no names are given, add all files to the repository (except
2463 2499 files matching &quot;.hgignore&quot;).
2464 2500 </p>
2465 2501 <p>
2466 2502 Examples:
2467 2503 </p>
2468 2504 <ul>
2469 2505 <li> New (unknown) files are added automatically by 'hg add':
2470 2506 <pre>
2471 2507 \$ ls (re)
2472 2508 foo.c
2473 2509 \$ hg status (re)
2474 2510 ? foo.c
2475 2511 \$ hg add (re)
2476 2512 adding foo.c
2477 2513 \$ hg status (re)
2478 2514 A foo.c
2479 2515 </pre>
2480 2516 <li> Specific files to be added can be specified:
2481 2517 <pre>
2482 2518 \$ ls (re)
2483 2519 bar.c foo.c
2484 2520 \$ hg status (re)
2485 2521 ? bar.c
2486 2522 ? foo.c
2487 2523 \$ hg add bar.c (re)
2488 2524 \$ hg status (re)
2489 2525 A bar.c
2490 2526 ? foo.c
2491 2527 </pre>
2492 2528 </ul>
2493 2529 <p>
2494 2530 Returns 0 if all files are successfully added.
2495 2531 </p>
2496 2532 <p>
2497 2533 options ([+] can be repeated):
2498 2534 </p>
2499 2535 <table>
2500 2536 <tr><td>-I</td>
2501 2537 <td>--include PATTERN [+]</td>
2502 2538 <td>include names matching the given patterns</td></tr>
2503 2539 <tr><td>-X</td>
2504 2540 <td>--exclude PATTERN [+]</td>
2505 2541 <td>exclude names matching the given patterns</td></tr>
2506 2542 <tr><td>-S</td>
2507 2543 <td>--subrepos</td>
2508 2544 <td>recurse into subrepositories</td></tr>
2509 2545 <tr><td>-n</td>
2510 2546 <td>--dry-run</td>
2511 2547 <td>do not perform actions, just print output</td></tr>
2512 2548 </table>
2513 2549 <p>
2514 2550 global options ([+] can be repeated):
2515 2551 </p>
2516 2552 <table>
2517 2553 <tr><td>-R</td>
2518 2554 <td>--repository REPO</td>
2519 2555 <td>repository root directory or name of overlay bundle file</td></tr>
2520 2556 <tr><td></td>
2521 2557 <td>--cwd DIR</td>
2522 2558 <td>change working directory</td></tr>
2523 2559 <tr><td>-y</td>
2524 2560 <td>--noninteractive</td>
2525 2561 <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
2526 2562 <tr><td>-q</td>
2527 2563 <td>--quiet</td>
2528 2564 <td>suppress output</td></tr>
2529 2565 <tr><td>-v</td>
2530 2566 <td>--verbose</td>
2531 2567 <td>enable additional output</td></tr>
2532 2568 <tr><td></td>
2533 2569 <td>--color TYPE</td>
2534 2570 <td>when to colorize (boolean, always, auto, never, or debug)</td></tr>
2535 2571 <tr><td></td>
2536 2572 <td>--config CONFIG [+]</td>
2537 2573 <td>set/override config option (use 'section.name=value')</td></tr>
2538 2574 <tr><td></td>
2539 2575 <td>--debug</td>
2540 2576 <td>enable debugging output</td></tr>
2541 2577 <tr><td></td>
2542 2578 <td>--debugger</td>
2543 2579 <td>start debugger</td></tr>
2544 2580 <tr><td></td>
2545 2581 <td>--encoding ENCODE</td>
2546 2582 <td>set the charset encoding (default: ascii)</td></tr>
2547 2583 <tr><td></td>
2548 2584 <td>--encodingmode MODE</td>
2549 2585 <td>set the charset encoding mode (default: strict)</td></tr>
2550 2586 <tr><td></td>
2551 2587 <td>--traceback</td>
2552 2588 <td>always print a traceback on exception</td></tr>
2553 2589 <tr><td></td>
2554 2590 <td>--time</td>
2555 2591 <td>time how long the command takes</td></tr>
2556 2592 <tr><td></td>
2557 2593 <td>--profile</td>
2558 2594 <td>print command execution profile</td></tr>
2559 2595 <tr><td></td>
2560 2596 <td>--version</td>
2561 2597 <td>output version information and exit</td></tr>
2562 2598 <tr><td>-h</td>
2563 2599 <td>--help</td>
2564 2600 <td>display help and exit</td></tr>
2565 2601 <tr><td></td>
2566 2602 <td>--hidden</td>
2567 2603 <td>consider hidden changesets</td></tr>
2568 2604 <tr><td></td>
2569 2605 <td>--pager TYPE</td>
2570 2606 <td>when to paginate (boolean, always, auto, or never) (default: auto)</td></tr>
2571 2607 </table>
2572 2608
2573 2609 </div>
2574 2610 </div>
2575 2611 </div>
2576 2612
2577 2613
2578 2614
2579 2615 </body>
2580 2616 </html>
2581 2617
2582 2618
2583 2619 $ get-with-headers.py $LOCALIP:$HGPORT "help/remove"
2584 2620 200 Script output follows
2585 2621
2586 2622 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2587 2623 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2588 2624 <head>
2589 2625 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2590 2626 <meta name="robots" content="index, nofollow" />
2591 2627 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2592 2628 <script type="text/javascript" src="/static/mercurial.js"></script>
2593 2629
2594 2630 <title>Help: remove</title>
2595 2631 </head>
2596 2632 <body>
2597 2633
2598 2634 <div class="container">
2599 2635 <div class="menu">
2600 2636 <div class="logo">
2601 2637 <a href="https://mercurial-scm.org/">
2602 2638 <img src="/static/hglogo.png" alt="mercurial" /></a>
2603 2639 </div>
2604 2640 <ul>
2605 2641 <li><a href="/shortlog">log</a></li>
2606 2642 <li><a href="/graph">graph</a></li>
2607 2643 <li><a href="/tags">tags</a></li>
2608 2644 <li><a href="/bookmarks">bookmarks</a></li>
2609 2645 <li><a href="/branches">branches</a></li>
2610 2646 </ul>
2611 2647 <ul>
2612 2648 <li class="active"><a href="/help">help</a></li>
2613 2649 </ul>
2614 2650 </div>
2615 2651
2616 2652 <div class="main">
2617 2653 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
2618 2654 <h3>Help: remove</h3>
2619 2655
2620 2656 <form class="search" action="/log">
2621 2657
2622 2658 <p><input name="rev" id="search1" type="text" size="30" /></p>
2623 2659 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
2624 2660 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
2625 2661 </form>
2626 2662 <div id="doc">
2627 2663 <p>
2628 2664 hg remove [OPTION]... FILE...
2629 2665 </p>
2630 2666 <p>
2631 2667 aliases: rm
2632 2668 </p>
2633 2669 <p>
2634 2670 remove the specified files on the next commit
2635 2671 </p>
2636 2672 <p>
2637 2673 Schedule the indicated files for removal from the current branch.
2638 2674 </p>
2639 2675 <p>
2640 2676 This command schedules the files to be removed at the next commit.
2641 2677 To undo a remove before that, see 'hg revert'. To undo added
2642 2678 files, see 'hg forget'.
2643 2679 </p>
2644 2680 <p>
2645 2681 -A/--after can be used to remove only files that have already
2646 2682 been deleted, -f/--force can be used to force deletion, and -Af
2647 2683 can be used to remove files from the next revision without
2648 2684 deleting them from the working directory.
2649 2685 </p>
2650 2686 <p>
2651 2687 The following table details the behavior of remove for different
2652 2688 file states (columns) and option combinations (rows). The file
2653 2689 states are Added [A], Clean [C], Modified [M] and Missing [!]
2654 2690 (as reported by 'hg status'). The actions are Warn, Remove
2655 2691 (from branch) and Delete (from disk):
2656 2692 </p>
2657 2693 <table>
2658 2694 <tr><td>opt/state</td>
2659 2695 <td>A</td>
2660 2696 <td>C</td>
2661 2697 <td>M</td>
2662 2698 <td>!</td></tr>
2663 2699 <tr><td>none</td>
2664 2700 <td>W</td>
2665 2701 <td>RD</td>
2666 2702 <td>W</td>
2667 2703 <td>R</td></tr>
2668 2704 <tr><td>-f</td>
2669 2705 <td>R</td>
2670 2706 <td>RD</td>
2671 2707 <td>RD</td>
2672 2708 <td>R</td></tr>
2673 2709 <tr><td>-A</td>
2674 2710 <td>W</td>
2675 2711 <td>W</td>
2676 2712 <td>W</td>
2677 2713 <td>R</td></tr>
2678 2714 <tr><td>-Af</td>
2679 2715 <td>R</td>
2680 2716 <td>R</td>
2681 2717 <td>R</td>
2682 2718 <td>R</td></tr>
2683 2719 </table>
2684 2720 <p>
2685 2721 <b>Note:</b>
2686 2722 </p>
2687 2723 <p>
2688 2724 'hg remove' never deletes files in Added [A] state from the
2689 2725 working directory, not even if &quot;--force&quot; is specified.
2690 2726 </p>
2691 2727 <p>
2692 2728 Returns 0 on success, 1 if any warnings encountered.
2693 2729 </p>
2694 2730 <p>
2695 2731 options ([+] can be repeated):
2696 2732 </p>
2697 2733 <table>
2698 2734 <tr><td>-A</td>
2699 2735 <td>--after</td>
2700 2736 <td>record delete for missing files</td></tr>
2701 2737 <tr><td>-f</td>
2702 2738 <td>--force</td>
2703 2739 <td>forget added files, delete modified files</td></tr>
2704 2740 <tr><td>-S</td>
2705 2741 <td>--subrepos</td>
2706 2742 <td>recurse into subrepositories</td></tr>
2707 2743 <tr><td>-I</td>
2708 2744 <td>--include PATTERN [+]</td>
2709 2745 <td>include names matching the given patterns</td></tr>
2710 2746 <tr><td>-X</td>
2711 2747 <td>--exclude PATTERN [+]</td>
2712 2748 <td>exclude names matching the given patterns</td></tr>
2713 2749 </table>
2714 2750 <p>
2715 2751 global options ([+] can be repeated):
2716 2752 </p>
2717 2753 <table>
2718 2754 <tr><td>-R</td>
2719 2755 <td>--repository REPO</td>
2720 2756 <td>repository root directory or name of overlay bundle file</td></tr>
2721 2757 <tr><td></td>
2722 2758 <td>--cwd DIR</td>
2723 2759 <td>change working directory</td></tr>
2724 2760 <tr><td>-y</td>
2725 2761 <td>--noninteractive</td>
2726 2762 <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
2727 2763 <tr><td>-q</td>
2728 2764 <td>--quiet</td>
2729 2765 <td>suppress output</td></tr>
2730 2766 <tr><td>-v</td>
2731 2767 <td>--verbose</td>
2732 2768 <td>enable additional output</td></tr>
2733 2769 <tr><td></td>
2734 2770 <td>--color TYPE</td>
2735 2771 <td>when to colorize (boolean, always, auto, never, or debug)</td></tr>
2736 2772 <tr><td></td>
2737 2773 <td>--config CONFIG [+]</td>
2738 2774 <td>set/override config option (use 'section.name=value')</td></tr>
2739 2775 <tr><td></td>
2740 2776 <td>--debug</td>
2741 2777 <td>enable debugging output</td></tr>
2742 2778 <tr><td></td>
2743 2779 <td>--debugger</td>
2744 2780 <td>start debugger</td></tr>
2745 2781 <tr><td></td>
2746 2782 <td>--encoding ENCODE</td>
2747 2783 <td>set the charset encoding (default: ascii)</td></tr>
2748 2784 <tr><td></td>
2749 2785 <td>--encodingmode MODE</td>
2750 2786 <td>set the charset encoding mode (default: strict)</td></tr>
2751 2787 <tr><td></td>
2752 2788 <td>--traceback</td>
2753 2789 <td>always print a traceback on exception</td></tr>
2754 2790 <tr><td></td>
2755 2791 <td>--time</td>
2756 2792 <td>time how long the command takes</td></tr>
2757 2793 <tr><td></td>
2758 2794 <td>--profile</td>
2759 2795 <td>print command execution profile</td></tr>
2760 2796 <tr><td></td>
2761 2797 <td>--version</td>
2762 2798 <td>output version information and exit</td></tr>
2763 2799 <tr><td>-h</td>
2764 2800 <td>--help</td>
2765 2801 <td>display help and exit</td></tr>
2766 2802 <tr><td></td>
2767 2803 <td>--hidden</td>
2768 2804 <td>consider hidden changesets</td></tr>
2769 2805 <tr><td></td>
2770 2806 <td>--pager TYPE</td>
2771 2807 <td>when to paginate (boolean, always, auto, or never) (default: auto)</td></tr>
2772 2808 </table>
2773 2809
2774 2810 </div>
2775 2811 </div>
2776 2812 </div>
2777 2813
2778 2814
2779 2815
2780 2816 </body>
2781 2817 </html>
2782 2818
2783 2819
2784 2820 $ get-with-headers.py $LOCALIP:$HGPORT "help/dates"
2785 2821 200 Script output follows
2786 2822
2787 2823 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2788 2824 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2789 2825 <head>
2790 2826 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2791 2827 <meta name="robots" content="index, nofollow" />
2792 2828 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2793 2829 <script type="text/javascript" src="/static/mercurial.js"></script>
2794 2830
2795 2831 <title>Help: dates</title>
2796 2832 </head>
2797 2833 <body>
2798 2834
2799 2835 <div class="container">
2800 2836 <div class="menu">
2801 2837 <div class="logo">
2802 2838 <a href="https://mercurial-scm.org/">
2803 2839 <img src="/static/hglogo.png" alt="mercurial" /></a>
2804 2840 </div>
2805 2841 <ul>
2806 2842 <li><a href="/shortlog">log</a></li>
2807 2843 <li><a href="/graph">graph</a></li>
2808 2844 <li><a href="/tags">tags</a></li>
2809 2845 <li><a href="/bookmarks">bookmarks</a></li>
2810 2846 <li><a href="/branches">branches</a></li>
2811 2847 </ul>
2812 2848 <ul>
2813 2849 <li class="active"><a href="/help">help</a></li>
2814 2850 </ul>
2815 2851 </div>
2816 2852
2817 2853 <div class="main">
2818 2854 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
2819 2855 <h3>Help: dates</h3>
2820 2856
2821 2857 <form class="search" action="/log">
2822 2858
2823 2859 <p><input name="rev" id="search1" type="text" size="30" /></p>
2824 2860 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
2825 2861 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
2826 2862 </form>
2827 2863 <div id="doc">
2828 2864 <h1>Date Formats</h1>
2829 2865 <p>
2830 2866 Some commands allow the user to specify a date, e.g.:
2831 2867 </p>
2832 2868 <ul>
2833 2869 <li> backout, commit, import, tag: Specify the commit date.
2834 2870 <li> log, revert, update: Select revision(s) by date.
2835 2871 </ul>
2836 2872 <p>
2837 2873 Many date formats are valid. Here are some examples:
2838 2874 </p>
2839 2875 <ul>
2840 2876 <li> &quot;Wed Dec 6 13:18:29 2006&quot; (local timezone assumed)
2841 2877 <li> &quot;Dec 6 13:18 -0600&quot; (year assumed, time offset provided)
2842 2878 <li> &quot;Dec 6 13:18 UTC&quot; (UTC and GMT are aliases for +0000)
2843 2879 <li> &quot;Dec 6&quot; (midnight)
2844 2880 <li> &quot;13:18&quot; (today assumed)
2845 2881 <li> &quot;3:39&quot; (3:39AM assumed)
2846 2882 <li> &quot;3:39pm&quot; (15:39)
2847 2883 <li> &quot;2006-12-06 13:18:29&quot; (ISO 8601 format)
2848 2884 <li> &quot;2006-12-6 13:18&quot;
2849 2885 <li> &quot;2006-12-6&quot;
2850 2886 <li> &quot;12-6&quot;
2851 2887 <li> &quot;12/6&quot;
2852 2888 <li> &quot;12/6/6&quot; (Dec 6 2006)
2853 2889 <li> &quot;today&quot; (midnight)
2854 2890 <li> &quot;yesterday&quot; (midnight)
2855 2891 <li> &quot;now&quot; - right now
2856 2892 </ul>
2857 2893 <p>
2858 2894 Lastly, there is Mercurial's internal format:
2859 2895 </p>
2860 2896 <ul>
2861 2897 <li> &quot;1165411109 0&quot; (Wed Dec 6 13:18:29 2006 UTC)
2862 2898 </ul>
2863 2899 <p>
2864 2900 This is the internal representation format for dates. The first number
2865 2901 is the number of seconds since the epoch (1970-01-01 00:00 UTC). The
2866 2902 second is the offset of the local timezone, in seconds west of UTC
2867 2903 (negative if the timezone is east of UTC).
2868 2904 </p>
2869 2905 <p>
2870 2906 The log command also accepts date ranges:
2871 2907 </p>
2872 2908 <ul>
2873 2909 <li> &quot;&lt;DATE&quot; - at or before a given date/time
2874 2910 <li> &quot;&gt;DATE&quot; - on or after a given date/time
2875 2911 <li> &quot;DATE to DATE&quot; - a date range, inclusive
2876 2912 <li> &quot;-DAYS&quot; - within a given number of days of today
2877 2913 </ul>
2878 2914
2879 2915 </div>
2880 2916 </div>
2881 2917 </div>
2882 2918
2883 2919
2884 2920
2885 2921 </body>
2886 2922 </html>
2887 2923
2888 2924
2889 2925 Sub-topic indexes rendered properly
2890 2926
2891 2927 $ get-with-headers.py $LOCALIP:$HGPORT "help/internals"
2892 2928 200 Script output follows
2893 2929
2894 2930 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2895 2931 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2896 2932 <head>
2897 2933 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2898 2934 <meta name="robots" content="index, nofollow" />
2899 2935 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2900 2936 <script type="text/javascript" src="/static/mercurial.js"></script>
2901 2937
2902 2938 <title>Help: internals</title>
2903 2939 </head>
2904 2940 <body>
2905 2941
2906 2942 <div class="container">
2907 2943 <div class="menu">
2908 2944 <div class="logo">
2909 2945 <a href="https://mercurial-scm.org/">
2910 2946 <img src="/static/hglogo.png" alt="mercurial" /></a>
2911 2947 </div>
2912 2948 <ul>
2913 2949 <li><a href="/shortlog">log</a></li>
2914 2950 <li><a href="/graph">graph</a></li>
2915 2951 <li><a href="/tags">tags</a></li>
2916 2952 <li><a href="/bookmarks">bookmarks</a></li>
2917 2953 <li><a href="/branches">branches</a></li>
2918 2954 </ul>
2919 2955 <ul>
2920 2956 <li><a href="/help">help</a></li>
2921 2957 </ul>
2922 2958 </div>
2923 2959
2924 2960 <div class="main">
2925 2961 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
2926 2962 <form class="search" action="/log">
2927 2963
2928 2964 <p><input name="rev" id="search1" type="text" size="30" /></p>
2929 2965 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
2930 2966 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
2931 2967 </form>
2932 2968 <table class="bigtable">
2933 2969 <tr><td colspan="2"><h2><a name="topics" href="#topics">Topics</a></h2></td></tr>
2934 2970
2935 2971 <tr><td>
2936 2972 <a href="/help/internals.bundles">
2937 2973 bundles
2938 2974 </a>
2939 2975 </td><td>
2940 2976 Bundles
2941 2977 </td></tr>
2942 2978 <tr><td>
2943 2979 <a href="/help/internals.changegroups">
2944 2980 changegroups
2945 2981 </a>
2946 2982 </td><td>
2947 2983 Changegroups
2948 2984 </td></tr>
2949 2985 <tr><td>
2950 2986 <a href="/help/internals.requirements">
2951 2987 requirements
2952 2988 </a>
2953 2989 </td><td>
2954 2990 Repository Requirements
2955 2991 </td></tr>
2956 2992 <tr><td>
2957 2993 <a href="/help/internals.revlogs">
2958 2994 revlogs
2959 2995 </a>
2960 2996 </td><td>
2961 2997 Revision Logs
2962 2998 </td></tr>
2963 2999 <tr><td>
2964 3000 <a href="/help/internals.wireprotocol">
2965 3001 wireprotocol
2966 3002 </a>
2967 3003 </td><td>
2968 3004 Wire Protocol
2969 3005 </td></tr>
2970 3006
2971 3007
2972 3008
2973 3009
2974 3010
2975 3011 </table>
2976 3012 </div>
2977 3013 </div>
2978 3014
2979 3015
2980 3016
2981 3017 </body>
2982 3018 </html>
2983 3019
2984 3020
2985 3021 Sub-topic topics rendered properly
2986 3022
2987 3023 $ get-with-headers.py $LOCALIP:$HGPORT "help/internals.changegroups"
2988 3024 200 Script output follows
2989 3025
2990 3026 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2991 3027 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2992 3028 <head>
2993 3029 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2994 3030 <meta name="robots" content="index, nofollow" />
2995 3031 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2996 3032 <script type="text/javascript" src="/static/mercurial.js"></script>
2997 3033
2998 3034 <title>Help: internals.changegroups</title>
2999 3035 </head>
3000 3036 <body>
3001 3037
3002 3038 <div class="container">
3003 3039 <div class="menu">
3004 3040 <div class="logo">
3005 3041 <a href="https://mercurial-scm.org/">
3006 3042 <img src="/static/hglogo.png" alt="mercurial" /></a>
3007 3043 </div>
3008 3044 <ul>
3009 3045 <li><a href="/shortlog">log</a></li>
3010 3046 <li><a href="/graph">graph</a></li>
3011 3047 <li><a href="/tags">tags</a></li>
3012 3048 <li><a href="/bookmarks">bookmarks</a></li>
3013 3049 <li><a href="/branches">branches</a></li>
3014 3050 </ul>
3015 3051 <ul>
3016 3052 <li class="active"><a href="/help">help</a></li>
3017 3053 </ul>
3018 3054 </div>
3019 3055
3020 3056 <div class="main">
3021 3057 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3022 3058 <h3>Help: internals.changegroups</h3>
3023 3059
3024 3060 <form class="search" action="/log">
3025 3061
3026 3062 <p><input name="rev" id="search1" type="text" size="30" /></p>
3027 3063 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3028 3064 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3029 3065 </form>
3030 3066 <div id="doc">
3031 3067 <h1>Changegroups</h1>
3032 3068 <p>
3033 3069 Changegroups are representations of repository revlog data, specifically
3034 the changelog, manifest, and filelogs.
3070 the changelog data, root/flat manifest data, treemanifest data, and
3071 filelogs.
3035 3072 </p>
3036 3073 <p>
3037 3074 There are 3 versions of changegroups: &quot;1&quot;, &quot;2&quot;, and &quot;3&quot;. From a
3038 high-level, versions &quot;1&quot; and &quot;2&quot; are almost exactly the same, with
3039 the only difference being a header on entries in the changeset
3040 segment. Version &quot;3&quot; adds support for exchanging treemanifests and
3041 includes revlog flags in the delta header.
3075 high-level, versions &quot;1&quot; and &quot;2&quot; are almost exactly the same, with the
3076 only difference being an additional item in the *delta header*. Version
3077 &quot;3&quot; adds support for revlog flags in the *delta header* and optionally
3078 exchanging treemanifests (enabled by setting an option on the
3079 &quot;changegroup&quot; part in the bundle2).
3042 3080 </p>
3043 3081 <p>
3044 Changegroups consists of 3 logical segments:
3082 Changegroups when not exchanging treemanifests consist of 3 logical
3083 segments:
3045 3084 </p>
3046 3085 <pre>
3047 3086 +---------------------------------+
3048 3087 | | | |
3049 3088 | changeset | manifest | filelogs |
3050 3089 | | | |
3090 | | | |
3051 3091 +---------------------------------+
3052 3092 </pre>
3053 3093 <p>
3094 When exchanging treemanifests, there are 4 logical segments:
3095 </p>
3096 <pre>
3097 +-------------------------------------------------+
3098 | | | | |
3099 | changeset | root | treemanifests | filelogs |
3100 | | manifest | | |
3101 | | | | |
3102 +-------------------------------------------------+
3103 </pre>
3104 <p>
3054 3105 The principle building block of each segment is a *chunk*. A *chunk*
3055 3106 is a framed piece of data:
3056 3107 </p>
3057 3108 <pre>
3058 3109 +---------------------------------------+
3059 3110 | | |
3060 3111 | length | data |
3061 | (32 bits) | &lt;length&gt; bytes |
3112 | (4 bytes) | (&lt;length - 4&gt; bytes) |
3062 3113 | | |
3063 3114 +---------------------------------------+
3064 3115 </pre>
3065 3116 <p>
3066 Each chunk starts with a 32-bit big-endian signed integer indicating
3067 the length of the raw data that follows.
3117 All integers are big-endian signed integers. Each chunk starts with a 32-bit
3118 integer indicating the length of the entire chunk (including the length field
3119 itself).
3068 3120 </p>
3069 3121 <p>
3070 There is a special case chunk that has 0 length (&quot;0x00000000&quot;). We
3071 call this an *empty chunk*.
3122 There is a special case chunk that has a value of 0 for the length
3123 (&quot;0x00000000&quot;). We call this an *empty chunk*.
3072 3124 </p>
3073 3125 <h2>Delta Groups</h2>
3074 3126 <p>
3075 3127 A *delta group* expresses the content of a revlog as a series of deltas,
3076 3128 or patches against previous revisions.
3077 3129 </p>
3078 3130 <p>
3079 3131 Delta groups consist of 0 or more *chunks* followed by the *empty chunk*
3080 3132 to signal the end of the delta group:
3081 3133 </p>
3082 3134 <pre>
3083 3135 +------------------------------------------------------------------------+
3084 3136 | | | | | |
3085 3137 | chunk0 length | chunk0 data | chunk1 length | chunk1 data | 0x0 |
3086 | (32 bits) | (various) | (32 bits) | (various) | (32 bits) |
3138 | (4 bytes) | (various) | (4 bytes) | (various) | (4 bytes) |
3087 3139 | | | | | |
3088 +------------------------------------------------------------+-----------+
3140 +------------------------------------------------------------------------+
3089 3141 </pre>
3090 3142 <p>
3091 3143 Each *chunk*'s data consists of the following:
3092 3144 </p>
3093 3145 <pre>
3094 +-----------------------------------------+
3095 | | | |
3096 | delta header | mdiff header | delta |
3097 | (various) | (12 bytes) | (various) |
3098 | | | |
3099 +-----------------------------------------+
3146 +---------------------------------------+
3147 | | |
3148 | delta header | delta data |
3149 | (various by version) | (various) |
3150 | | |
3151 +---------------------------------------+
3100 3152 </pre>
3101 3153 <p>
3102 The *length* field is the byte length of the remaining 3 logical pieces
3103 of data. The *delta* is a diff from an existing entry in the changelog.
3154 The *delta data* is a series of *delta*s that describe a diff from an existing
3155 entry (either that the recipient already has, or previously specified in the
3156 bundlei/changegroup).
3104 3157 </p>
3105 3158 <p>
3106 3159 The *delta header* is different between versions &quot;1&quot;, &quot;2&quot;, and
3107 3160 &quot;3&quot; of the changegroup format.
3108 3161 </p>
3109 3162 <p>
3110 Version 1:
3163 Version 1 (headerlen=80):
3111 3164 </p>
3112 3165 <pre>
3113 3166 +------------------------------------------------------+
3114 3167 | | | | |
3115 3168 | node | p1 node | p2 node | link node |
3116 3169 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
3117 3170 | | | | |
3118 3171 +------------------------------------------------------+
3119 3172 </pre>
3120 3173 <p>
3121 Version 2:
3174 Version 2 (headerlen=100):
3122 3175 </p>
3123 3176 <pre>
3124 3177 +------------------------------------------------------------------+
3125 3178 | | | | | |
3126 3179 | node | p1 node | p2 node | base node | link node |
3127 3180 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
3128 3181 | | | | | |
3129 3182 +------------------------------------------------------------------+
3130 3183 </pre>
3131 3184 <p>
3132 Version 3:
3185 Version 3 (headerlen=102):
3133 3186 </p>
3134 3187 <pre>
3135 3188 +------------------------------------------------------------------------------+
3136 3189 | | | | | | |
3137 3190 | node | p1 node | p2 node | base node | link node | flags |
3138 3191 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (2 bytes) |
3139 3192 | | | | | | |
3140 3193 +------------------------------------------------------------------------------+
3141 3194 </pre>
3142 3195 <p>
3143 The *mdiff header* consists of 3 32-bit big-endian signed integers
3144 describing offsets at which to apply the following delta content:
3196 The *delta data* consists of &quot;chunklen - 4 - headerlen&quot; bytes, which contain a
3197 series of *delta*s, densely packed (no separators). These deltas describe a diff
3198 from an existing entry (either that the recipient already has, or previously
3199 specified in the bundle/changegroup). The format is described more fully in
3200 &quot;hg help internals.bdiff&quot;, but briefly:
3145 3201 </p>
3146 <pre>
3147 +-------------------------------------+
3148 | | | |
3149 | offset | old length | new length |
3150 | (32 bits) | (32 bits) | (32 bits) |
3151 | | | |
3152 +-------------------------------------+
3153 </pre>
3202 <p>
3203 +---------------------------------------------------------------+
3204 | | | | |
3205 | start offset | end offset | new length | content |
3206 | (4 bytes) | (4 bytes) | (4 bytes) | (&lt;new length&gt; bytes) |
3207 | | | | |
3208 +---------------------------------------------------------------+
3209 </p>
3210 <p>
3211 Please note that the length field in the delta data does *not* include itself.
3212 </p>
3154 3213 <p>
3155 3214 In version 1, the delta is always applied against the previous node from
3156 3215 the changegroup or the first parent if this is the first entry in the
3157 3216 changegroup.
3158 3217 </p>
3159 3218 <p>
3160 In version 2, the delta base node is encoded in the entry in the
3219 In version 2 and up, the delta base node is encoded in the entry in the
3161 3220 changegroup. This allows the delta to be expressed against any parent,
3162 3221 which can result in smaller deltas and more efficient encoding of data.
3163 3222 </p>
3164 3223 <h2>Changeset Segment</h2>
3165 3224 <p>
3166 3225 The *changeset segment* consists of a single *delta group* holding
3167 changelog data. It is followed by an *empty chunk* to denote the
3168 boundary to the *manifests segment*.
3226 changelog data. The *empty chunk* at the end of the *delta group* denotes
3227 the boundary to the *manifest segment*.
3169 3228 </p>
3170 3229 <h2>Manifest Segment</h2>
3171 3230 <p>
3172 The *manifest segment* consists of a single *delta group* holding
3173 manifest data. It is followed by an *empty chunk* to denote the boundary
3174 to the *filelogs segment*.
3231 The *manifest segment* consists of a single *delta group* holding manifest
3232 data. If treemanifests are in use, it contains only the manifest for the
3233 root directory of the repository. Otherwise, it contains the entire
3234 manifest data. The *empty chunk* at the end of the *delta group* denotes
3235 the boundary to the next segment (either the *treemanifests segment* or the
3236 *filelogs segment*, depending on version and the request options).
3237 </p>
3238 <h3>Treemanifests Segment</h3>
3239 <p>
3240 The *treemanifests segment* only exists in changegroup version &quot;3&quot;, and
3241 only if the 'treemanifest' param is part of the bundle2 changegroup part
3242 (it is not possible to use changegroup version 3 outside of bundle2).
3243 Aside from the filenames in the *treemanifests segment* containing a
3244 trailing &quot;/&quot; character, it behaves identically to the *filelogs segment*
3245 (see below). The final sub-segment is followed by an *empty chunk* (logically,
3246 a sub-segment with filename size 0). This denotes the boundary to the
3247 *filelogs segment*.
3175 3248 </p>
3176 3249 <h2>Filelogs Segment</h2>
3177 3250 <p>
3178 The *filelogs* segment consists of multiple sub-segments, each
3251 The *filelogs segment* consists of multiple sub-segments, each
3179 3252 corresponding to an individual file whose data is being described:
3180 3253 </p>
3181 3254 <pre>
3182 +--------------------------------------+
3183 | | | | |
3184 | filelog0 | filelog1 | filelog2 | ... |
3185 | | | | |
3186 +--------------------------------------+
3255 +--------------------------------------------------+
3256 | | | | | |
3257 | filelog0 | filelog1 | filelog2 | ... | 0x0 |
3258 | | | | | (4 bytes) |
3259 | | | | | |
3260 +--------------------------------------------------+
3187 3261 </pre>
3188 3262 <p>
3189 In version &quot;3&quot; of the changegroup format, filelogs may include
3190 directory logs when treemanifests are in use. directory logs are
3191 identified by having a trailing '/' on their filename (see below).
3192 </p>
3193 <p>
3194 The final filelog sub-segment is followed by an *empty chunk* to denote
3195 the end of the segment and the overall changegroup.
3263 The final filelog sub-segment is followed by an *empty chunk* (logically,
3264 a sub-segment with filename size 0). This denotes the end of the segment
3265 and of the overall changegroup.
3196 3266 </p>
3197 3267 <p>
3198 3268 Each filelog sub-segment consists of the following:
3199 3269 </p>
3200 3270 <pre>
3201 +------------------------------------------+
3271 +------------------------------------------------------+
3202 3272 | | | |
3203 | filename size | filename | delta group |
3204 | (32 bits) | (various) | (various) |
3273 | filename length | filename | delta group |
3274 | (4 bytes) | (&lt;length - 4&gt; bytes) | (various) |
3205 3275 | | | |
3206 +------------------------------------------+
3276 +------------------------------------------------------+
3207 3277 </pre>
3208 3278 <p>
3209 3279 That is, a *chunk* consisting of the filename (not terminated or padded)
3210 followed by N chunks constituting the *delta group* for this file.
3280 followed by N chunks constituting the *delta group* for this file. The
3281 *empty chunk* at the end of each *delta group* denotes the boundary to the
3282 next filelog sub-segment.
3211 3283 </p>
3212 3284
3213 3285 </div>
3214 3286 </div>
3215 3287 </div>
3216 3288
3217 3289
3218 3290
3219 3291 </body>
3220 3292 </html>
3221 3293
3222 3294
3223 3295 $ killdaemons.py
3224 3296
3225 3297 #endif
General Comments 0
You need to be logged in to leave comments. Login now