##// END OF EJS Templates
help: fix layout of pre-formatted text
Yuya Nishihara -
r31287:16539e32 default
parent child Browse files
Show More
@@ -1,188 +1,188 b''
1 1 Changegroups are representations of repository revlog data, specifically
2 2 the changelog data, root/flat manifest data, treemanifest data, and
3 3 filelogs.
4 4
5 5 There are 3 versions of changegroups: ``1``, ``2``, and ``3``. From a
6 6 high-level, versions ``1`` and ``2`` are almost exactly the same, with the
7 7 only difference being an additional item in the *delta header*. Version
8 8 ``3`` adds support for revlog flags in the *delta header* and optionally
9 9 exchanging treemanifests (enabled by setting an option on the
10 10 ``changegroup`` part in the bundle2).
11 11
12 12 Changegroups when not exchanging treemanifests consist of 3 logical
13 13 segments::
14 14
15 15 +---------------------------------+
16 16 | | | |
17 17 | changeset | manifest | filelogs |
18 18 | | | |
19 19 | | | |
20 20 +---------------------------------+
21 21
22 22 When exchanging treemanifests, there are 4 logical segments::
23 23
24 24 +-------------------------------------------------+
25 25 | | | | |
26 26 | changeset | root | treemanifests | filelogs |
27 27 | | manifest | | |
28 28 | | | | |
29 29 +-------------------------------------------------+
30 30
31 31 The principle building block of each segment is a *chunk*. A *chunk*
32 32 is a framed piece of data::
33 33
34 34 +---------------------------------------+
35 35 | | |
36 36 | length | data |
37 37 | (4 bytes) | (<length - 4> bytes) |
38 38 | | |
39 39 +---------------------------------------+
40 40
41 41 All integers are big-endian signed integers. Each chunk starts with a 32-bit
42 42 integer indicating the length of the entire chunk (including the length field
43 43 itself).
44 44
45 45 There is a special case chunk that has a value of 0 for the length
46 46 (``0x00000000``). We call this an *empty chunk*.
47 47
48 48 Delta Groups
49 49 ============
50 50
51 51 A *delta group* expresses the content of a revlog as a series of deltas,
52 52 or patches against previous revisions.
53 53
54 54 Delta groups consist of 0 or more *chunks* followed by the *empty chunk*
55 55 to signal the end of the delta group::
56 56
57 57 +------------------------------------------------------------------------+
58 58 | | | | | |
59 59 | chunk0 length | chunk0 data | chunk1 length | chunk1 data | 0x0 |
60 60 | (4 bytes) | (various) | (4 bytes) | (various) | (4 bytes) |
61 61 | | | | | |
62 62 +------------------------------------------------------------------------+
63 63
64 64 Each *chunk*'s data consists of the following::
65 65
66 66 +---------------------------------------+
67 67 | | |
68 68 | delta header | delta data |
69 69 | (various by version) | (various) |
70 70 | | |
71 71 +---------------------------------------+
72 72
73 73 The *delta data* is a series of *delta*s that describe a diff from an existing
74 74 entry (either that the recipient already has, or previously specified in the
75 75 bundlei/changegroup).
76 76
77 77 The *delta header* is different between versions ``1``, ``2``, and
78 78 ``3`` of the changegroup format.
79 79
80 80 Version 1 (headerlen=80)::
81 81
82 82 +------------------------------------------------------+
83 83 | | | | |
84 84 | node | p1 node | p2 node | link node |
85 85 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
86 86 | | | | |
87 87 +------------------------------------------------------+
88 88
89 89 Version 2 (headerlen=100)::
90 90
91 91 +------------------------------------------------------------------+
92 92 | | | | | |
93 93 | node | p1 node | p2 node | base node | link node |
94 94 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
95 95 | | | | | |
96 96 +------------------------------------------------------------------+
97 97
98 98 Version 3 (headerlen=102)::
99 99
100 100 +------------------------------------------------------------------------------+
101 101 | | | | | | |
102 102 | node | p1 node | p2 node | base node | link node | flags |
103 103 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (2 bytes) |
104 104 | | | | | | |
105 105 +------------------------------------------------------------------------------+
106 106
107 107 The *delta data* consists of ``chunklen - 4 - headerlen`` bytes, which contain a
108 108 series of *delta*s, densely packed (no separators). These deltas describe a diff
109 109 from an existing entry (either that the recipient already has, or previously
110 110 specified in the bundle/changegroup). The format is described more fully in
111 ``hg help internals.bdiff``, but briefly:
111 ``hg help internals.bdiff``, but briefly::
112 112
113 113 +---------------------------------------------------------------+
114 114 | | | | |
115 115 | start offset | end offset | new length | content |
116 116 | (4 bytes) | (4 bytes) | (4 bytes) | (<new length> bytes) |
117 117 | | | | |
118 118 +---------------------------------------------------------------+
119 119
120 120 Please note that the length field in the delta data does *not* include itself.
121 121
122 122 In version 1, the delta is always applied against the previous node from
123 123 the changegroup or the first parent if this is the first entry in the
124 124 changegroup.
125 125
126 126 In version 2 and up, the delta base node is encoded in the entry in the
127 127 changegroup. This allows the delta to be expressed against any parent,
128 128 which can result in smaller deltas and more efficient encoding of data.
129 129
130 130 Changeset Segment
131 131 =================
132 132
133 133 The *changeset segment* consists of a single *delta group* holding
134 134 changelog data. The *empty chunk* at the end of the *delta group* denotes
135 135 the boundary to the *manifest segment*.
136 136
137 137 Manifest Segment
138 138 ================
139 139
140 140 The *manifest segment* consists of a single *delta group* holding manifest
141 141 data. If treemanifests are in use, it contains only the manifest for the
142 142 root directory of the repository. Otherwise, it contains the entire
143 143 manifest data. The *empty chunk* at the end of the *delta group* denotes
144 144 the boundary to the next segment (either the *treemanifests segment* or the
145 145 *filelogs segment*, depending on version and the request options).
146 146
147 147 Treemanifests Segment
148 148 ---------------------
149 149
150 150 The *treemanifests segment* only exists in changegroup version ``3``, and
151 151 only if the 'treemanifest' param is part of the bundle2 changegroup part
152 152 (it is not possible to use changegroup version 3 outside of bundle2).
153 153 Aside from the filenames in the *treemanifests segment* containing a
154 154 trailing ``/`` character, it behaves identically to the *filelogs segment*
155 155 (see below). The final sub-segment is followed by an *empty chunk* (logically,
156 156 a sub-segment with filename size 0). This denotes the boundary to the
157 157 *filelogs segment*.
158 158
159 159 Filelogs Segment
160 160 ================
161 161
162 162 The *filelogs segment* consists of multiple sub-segments, each
163 163 corresponding to an individual file whose data is being described::
164 164
165 165 +--------------------------------------------------+
166 166 | | | | | |
167 167 | filelog0 | filelog1 | filelog2 | ... | 0x0 |
168 168 | | | | | (4 bytes) |
169 169 | | | | | |
170 170 +--------------------------------------------------+
171 171
172 172 The final filelog sub-segment is followed by an *empty chunk* (logically,
173 173 a sub-segment with filename size 0). This denotes the end of the segment
174 174 and of the overall changegroup.
175 175
176 176 Each filelog sub-segment consists of the following::
177 177
178 178 +------------------------------------------------------+
179 179 | | | |
180 180 | filename length | filename | delta group |
181 181 | (4 bytes) | (<length - 4> bytes) | (various) |
182 182 | | | |
183 183 +------------------------------------------------------+
184 184
185 185 That is, a *chunk* consisting of the filename (not terminated or padded)
186 186 followed by N chunks constituting the *delta group* for this file. The
187 187 *empty chunk* at the end of each *delta group* denotes the boundary to the
188 188 next filelog sub-segment.
@@ -1,3297 +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 955 the changelog data, root/flat manifest data, treemanifest data, and
956 956 filelogs.
957 957
958 958 There are 3 versions of changegroups: "1", "2", and "3". From a high-
959 959 level, versions "1" and "2" are almost exactly the same, with the only
960 960 difference being an additional item in the *delta header*. Version "3"
961 961 adds support for revlog flags in the *delta header* and optionally
962 962 exchanging treemanifests (enabled by setting an option on the
963 963 "changegroup" part in the bundle2).
964 964
965 965 Changegroups when not exchanging treemanifests consist of 3 logical
966 966 segments:
967 967
968 968 +---------------------------------+
969 969 | | | |
970 970 | changeset | manifest | filelogs |
971 971 | | | |
972 972 | | | |
973 973 +---------------------------------+
974 974
975 975 When exchanging treemanifests, there are 4 logical segments:
976 976
977 977 +-------------------------------------------------+
978 978 | | | | |
979 979 | changeset | root | treemanifests | filelogs |
980 980 | | manifest | | |
981 981 | | | | |
982 982 +-------------------------------------------------+
983 983
984 984 The principle building block of each segment is a *chunk*. A *chunk* is a
985 985 framed piece of data:
986 986
987 987 +---------------------------------------+
988 988 | | |
989 989 | length | data |
990 990 | (4 bytes) | (<length - 4> bytes) |
991 991 | | |
992 992 +---------------------------------------+
993 993
994 994 All integers are big-endian signed integers. Each chunk starts with a
995 995 32-bit integer indicating the length of the entire chunk (including the
996 996 length field itself).
997 997
998 998 There is a special case chunk that has a value of 0 for the length
999 999 ("0x00000000"). We call this an *empty chunk*.
1000 1000
1001 1001 Delta Groups
1002 1002 ============
1003 1003
1004 1004 A *delta group* expresses the content of a revlog as a series of deltas,
1005 1005 or patches against previous revisions.
1006 1006
1007 1007 Delta groups consist of 0 or more *chunks* followed by the *empty chunk*
1008 1008 to signal the end of the delta group:
1009 1009
1010 1010 +------------------------------------------------------------------------+
1011 1011 | | | | | |
1012 1012 | chunk0 length | chunk0 data | chunk1 length | chunk1 data | 0x0 |
1013 1013 | (4 bytes) | (various) | (4 bytes) | (various) | (4 bytes) |
1014 1014 | | | | | |
1015 1015 +------------------------------------------------------------------------+
1016 1016
1017 1017 Each *chunk*'s data consists of the following:
1018 1018
1019 1019 +---------------------------------------+
1020 1020 | | |
1021 1021 | delta header | delta data |
1022 1022 | (various by version) | (various) |
1023 1023 | | |
1024 1024 +---------------------------------------+
1025 1025
1026 1026 The *delta data* is a series of *delta*s that describe a diff from an
1027 1027 existing entry (either that the recipient already has, or previously
1028 1028 specified in the bundlei/changegroup).
1029 1029
1030 1030 The *delta header* is different between versions "1", "2", and "3" of the
1031 1031 changegroup format.
1032 1032
1033 1033 Version 1 (headerlen=80):
1034 1034
1035 1035 +------------------------------------------------------+
1036 1036 | | | | |
1037 1037 | node | p1 node | p2 node | link node |
1038 1038 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
1039 1039 | | | | |
1040 1040 +------------------------------------------------------+
1041 1041
1042 1042 Version 2 (headerlen=100):
1043 1043
1044 1044 +------------------------------------------------------------------+
1045 1045 | | | | | |
1046 1046 | node | p1 node | p2 node | base node | link node |
1047 1047 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
1048 1048 | | | | | |
1049 1049 +------------------------------------------------------------------+
1050 1050
1051 1051 Version 3 (headerlen=102):
1052 1052
1053 1053 +------------------------------------------------------------------------------+
1054 1054 | | | | | | |
1055 1055 | node | p1 node | p2 node | base node | link node | flags |
1056 1056 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (2 bytes) |
1057 1057 | | | | | | |
1058 1058 +------------------------------------------------------------------------------+
1059 1059
1060 1060 The *delta data* consists of "chunklen - 4 - headerlen" bytes, which
1061 1061 contain a series of *delta*s, densely packed (no separators). These deltas
1062 1062 describe a diff from an existing entry (either that the recipient already
1063 1063 has, or previously specified in the bundle/changegroup). The format is
1064 1064 described more fully in "hg help internals.bdiff", but briefly:
1065 1065
1066 +---------------------------------------------------------------+ |
1067 | | | | | start offset | end
1068 offset | new length | content | | (4 bytes) | (4
1069 bytes) | (4 bytes) | (<new length> bytes) | | |
1070 | | |
1071 +---------------------------------------------------------------+
1066 +---------------------------------------------------------------+
1067 | | | | |
1068 | start offset | end offset | new length | content |
1069 | (4 bytes) | (4 bytes) | (4 bytes) | (<new length> bytes) |
1070 | | | | |
1071 +---------------------------------------------------------------+
1072 1072
1073 1073 Please note that the length field in the delta data does *not* include
1074 1074 itself.
1075 1075
1076 1076 In version 1, the delta is always applied against the previous node from
1077 1077 the changegroup or the first parent if this is the first entry in the
1078 1078 changegroup.
1079 1079
1080 1080 In version 2 and up, the delta base node is encoded in the entry in the
1081 1081 changegroup. This allows the delta to be expressed against any parent,
1082 1082 which can result in smaller deltas and more efficient encoding of data.
1083 1083
1084 1084 Changeset Segment
1085 1085 =================
1086 1086
1087 1087 The *changeset segment* consists of a single *delta group* holding
1088 1088 changelog data. The *empty chunk* at the end of the *delta group* denotes
1089 1089 the boundary to the *manifest segment*.
1090 1090
1091 1091 Manifest Segment
1092 1092 ================
1093 1093
1094 1094 The *manifest segment* consists of a single *delta group* holding manifest
1095 1095 data. If treemanifests are in use, it contains only the manifest for the
1096 1096 root directory of the repository. Otherwise, it contains the entire
1097 1097 manifest data. The *empty chunk* at the end of the *delta group* denotes
1098 1098 the boundary to the next segment (either the *treemanifests segment* or
1099 1099 the *filelogs segment*, depending on version and the request options).
1100 1100
1101 1101 Treemanifests Segment
1102 1102 ---------------------
1103 1103
1104 1104 The *treemanifests segment* only exists in changegroup version "3", and
1105 1105 only if the 'treemanifest' param is part of the bundle2 changegroup part
1106 1106 (it is not possible to use changegroup version 3 outside of bundle2).
1107 1107 Aside from the filenames in the *treemanifests segment* containing a
1108 1108 trailing "/" character, it behaves identically to the *filelogs segment*
1109 1109 (see below). The final sub-segment is followed by an *empty chunk*
1110 1110 (logically, a sub-segment with filename size 0). This denotes the boundary
1111 1111 to the *filelogs segment*.
1112 1112
1113 1113 Filelogs Segment
1114 1114 ================
1115 1115
1116 1116 The *filelogs segment* consists of multiple sub-segments, each
1117 1117 corresponding to an individual file whose data is being described:
1118 1118
1119 1119 +--------------------------------------------------+
1120 1120 | | | | | |
1121 1121 | filelog0 | filelog1 | filelog2 | ... | 0x0 |
1122 1122 | | | | | (4 bytes) |
1123 1123 | | | | | |
1124 1124 +--------------------------------------------------+
1125 1125
1126 1126 The final filelog sub-segment is followed by an *empty chunk* (logically,
1127 1127 a sub-segment with filename size 0). This denotes the end of the segment
1128 1128 and of the overall changegroup.
1129 1129
1130 1130 Each filelog sub-segment consists of the following:
1131 1131
1132 1132 +------------------------------------------------------+
1133 1133 | | | |
1134 1134 | filename length | filename | delta group |
1135 1135 | (4 bytes) | (<length - 4> bytes) | (various) |
1136 1136 | | | |
1137 1137 +------------------------------------------------------+
1138 1138
1139 1139 That is, a *chunk* consisting of the filename (not terminated or padded)
1140 1140 followed by N chunks constituting the *delta group* for this file. The
1141 1141 *empty chunk* at the end of each *delta group* denotes the boundary to the
1142 1142 next filelog sub-segment.
1143 1143
1144 1144 Test list of commands with command with no help text
1145 1145
1146 1146 $ hg help helpext
1147 1147 helpext extension - no help text available
1148 1148
1149 1149 list of commands:
1150 1150
1151 1151 nohelp (no help text available)
1152 1152
1153 1153 (use 'hg help -v helpext' to show built-in aliases and global options)
1154 1154
1155 1155
1156 1156 test advanced, deprecated and experimental options are hidden in command help
1157 1157 $ hg help debugoptADV
1158 1158 hg debugoptADV
1159 1159
1160 1160 (no help text available)
1161 1161
1162 1162 options:
1163 1163
1164 1164 (some details hidden, use --verbose to show complete help)
1165 1165 $ hg help debugoptDEP
1166 1166 hg debugoptDEP
1167 1167
1168 1168 (no help text available)
1169 1169
1170 1170 options:
1171 1171
1172 1172 (some details hidden, use --verbose to show complete help)
1173 1173
1174 1174 $ hg help debugoptEXP
1175 1175 hg debugoptEXP
1176 1176
1177 1177 (no help text available)
1178 1178
1179 1179 options:
1180 1180
1181 1181 (some details hidden, use --verbose to show complete help)
1182 1182
1183 1183 test advanced, deprecated and experimental options are shown with -v
1184 1184 $ hg help -v debugoptADV | grep aopt
1185 1185 --aopt option is (ADVANCED)
1186 1186 $ hg help -v debugoptDEP | grep dopt
1187 1187 --dopt option is (DEPRECATED)
1188 1188 $ hg help -v debugoptEXP | grep eopt
1189 1189 --eopt option is (EXPERIMENTAL)
1190 1190
1191 1191 #if gettext
1192 1192 test deprecated option is hidden with translation with untranslated description
1193 1193 (use many globy for not failing on changed transaction)
1194 1194 $ LANGUAGE=sv hg help debugoptDEP
1195 1195 hg debugoptDEP
1196 1196
1197 1197 (*) (glob)
1198 1198
1199 1199 options:
1200 1200
1201 1201 (some details hidden, use --verbose to show complete help)
1202 1202 #endif
1203 1203
1204 1204 Test commands that collide with topics (issue4240)
1205 1205
1206 1206 $ hg config -hq
1207 1207 hg config [-u] [NAME]...
1208 1208
1209 1209 show combined config settings from all hgrc files
1210 1210 $ hg showconfig -hq
1211 1211 hg config [-u] [NAME]...
1212 1212
1213 1213 show combined config settings from all hgrc files
1214 1214
1215 1215 Test a help topic
1216 1216
1217 1217 $ hg help dates
1218 1218 Date Formats
1219 1219 """"""""""""
1220 1220
1221 1221 Some commands allow the user to specify a date, e.g.:
1222 1222
1223 1223 - backout, commit, import, tag: Specify the commit date.
1224 1224 - log, revert, update: Select revision(s) by date.
1225 1225
1226 1226 Many date formats are valid. Here are some examples:
1227 1227
1228 1228 - "Wed Dec 6 13:18:29 2006" (local timezone assumed)
1229 1229 - "Dec 6 13:18 -0600" (year assumed, time offset provided)
1230 1230 - "Dec 6 13:18 UTC" (UTC and GMT are aliases for +0000)
1231 1231 - "Dec 6" (midnight)
1232 1232 - "13:18" (today assumed)
1233 1233 - "3:39" (3:39AM assumed)
1234 1234 - "3:39pm" (15:39)
1235 1235 - "2006-12-06 13:18:29" (ISO 8601 format)
1236 1236 - "2006-12-6 13:18"
1237 1237 - "2006-12-6"
1238 1238 - "12-6"
1239 1239 - "12/6"
1240 1240 - "12/6/6" (Dec 6 2006)
1241 1241 - "today" (midnight)
1242 1242 - "yesterday" (midnight)
1243 1243 - "now" - right now
1244 1244
1245 1245 Lastly, there is Mercurial's internal format:
1246 1246
1247 1247 - "1165411109 0" (Wed Dec 6 13:18:29 2006 UTC)
1248 1248
1249 1249 This is the internal representation format for dates. The first number is
1250 1250 the number of seconds since the epoch (1970-01-01 00:00 UTC). The second
1251 1251 is the offset of the local timezone, in seconds west of UTC (negative if
1252 1252 the timezone is east of UTC).
1253 1253
1254 1254 The log command also accepts date ranges:
1255 1255
1256 1256 - "<DATE" - at or before a given date/time
1257 1257 - ">DATE" - on or after a given date/time
1258 1258 - "DATE to DATE" - a date range, inclusive
1259 1259 - "-DAYS" - within a given number of days of today
1260 1260
1261 1261 Test repeated config section name
1262 1262
1263 1263 $ hg help config.host
1264 1264 "http_proxy.host"
1265 1265 Host name and (optional) port of the proxy server, for example
1266 1266 "myproxy:8000".
1267 1267
1268 1268 "smtp.host"
1269 1269 Host name of mail server, e.g. "mail.example.com".
1270 1270
1271 1271 Unrelated trailing paragraphs shouldn't be included
1272 1272
1273 1273 $ hg help config.extramsg | grep '^$'
1274 1274
1275 1275
1276 1276 Test capitalized section name
1277 1277
1278 1278 $ hg help scripting.HGPLAIN > /dev/null
1279 1279
1280 1280 Help subsection:
1281 1281
1282 1282 $ hg help config.charsets |grep "Email example:" > /dev/null
1283 1283 [1]
1284 1284
1285 1285 Show nested definitions
1286 1286 ("profiling.type"[break]"ls"[break]"stat"[break])
1287 1287
1288 1288 $ hg help config.type | egrep '^$'|wc -l
1289 1289 \s*3 (re)
1290 1290
1291 1291 Separate sections from subsections
1292 1292
1293 1293 $ hg help config.format | egrep '^ ("|-)|^\s*$' | uniq
1294 1294 "format"
1295 1295 --------
1296 1296
1297 1297 "usegeneraldelta"
1298 1298
1299 1299 "dotencode"
1300 1300
1301 1301 "usefncache"
1302 1302
1303 1303 "usestore"
1304 1304
1305 1305 "profiling"
1306 1306 -----------
1307 1307
1308 1308 "format"
1309 1309
1310 1310 "progress"
1311 1311 ----------
1312 1312
1313 1313 "format"
1314 1314
1315 1315
1316 1316 Last item in help config.*:
1317 1317
1318 1318 $ hg help config.`hg help config|grep '^ "'| \
1319 1319 > tail -1|sed 's![ "]*!!g'`| \
1320 1320 > grep 'hg help -c config' > /dev/null
1321 1321 [1]
1322 1322
1323 1323 note to use help -c for general hg help config:
1324 1324
1325 1325 $ hg help config |grep 'hg help -c config' > /dev/null
1326 1326
1327 1327 Test templating help
1328 1328
1329 1329 $ hg help templating | egrep '(desc|diffstat|firstline|nonempty) '
1330 1330 desc String. The text of the changeset description.
1331 1331 diffstat String. Statistics of changes with the following format:
1332 1332 firstline Any text. Returns the first line of text.
1333 1333 nonempty Any text. Returns '(none)' if the string is empty.
1334 1334
1335 1335 Test deprecated items
1336 1336
1337 1337 $ hg help -v templating | grep currentbookmark
1338 1338 currentbookmark
1339 1339 $ hg help templating | (grep currentbookmark || true)
1340 1340
1341 1341 Test help hooks
1342 1342
1343 1343 $ cat > helphook1.py <<EOF
1344 1344 > from mercurial import help
1345 1345 >
1346 1346 > def rewrite(ui, topic, doc):
1347 1347 > return doc + '\nhelphook1\n'
1348 1348 >
1349 1349 > def extsetup(ui):
1350 1350 > help.addtopichook('revisions', rewrite)
1351 1351 > EOF
1352 1352 $ cat > helphook2.py <<EOF
1353 1353 > from mercurial import help
1354 1354 >
1355 1355 > def rewrite(ui, topic, doc):
1356 1356 > return doc + '\nhelphook2\n'
1357 1357 >
1358 1358 > def extsetup(ui):
1359 1359 > help.addtopichook('revisions', rewrite)
1360 1360 > EOF
1361 1361 $ echo '[extensions]' >> $HGRCPATH
1362 1362 $ echo "helphook1 = `pwd`/helphook1.py" >> $HGRCPATH
1363 1363 $ echo "helphook2 = `pwd`/helphook2.py" >> $HGRCPATH
1364 1364 $ hg help revsets | grep helphook
1365 1365 helphook1
1366 1366 helphook2
1367 1367
1368 1368 help -c should only show debug --debug
1369 1369
1370 1370 $ hg help -c --debug|egrep debug|wc -l|egrep '^\s*0\s*$'
1371 1371 [1]
1372 1372
1373 1373 help -c should only show deprecated for -v
1374 1374
1375 1375 $ hg help -c -v|egrep DEPRECATED|wc -l|egrep '^\s*0\s*$'
1376 1376 [1]
1377 1377
1378 1378 Test -s / --system
1379 1379
1380 1380 $ hg help config.files -s windows |grep 'etc/mercurial' | \
1381 1381 > wc -l | sed -e 's/ //g'
1382 1382 0
1383 1383 $ hg help config.files --system unix | grep 'USER' | \
1384 1384 > wc -l | sed -e 's/ //g'
1385 1385 0
1386 1386
1387 1387 Test -e / -c / -k combinations
1388 1388
1389 1389 $ hg help -c|egrep '^[A-Z].*:|^ debug'
1390 1390 Commands:
1391 1391 $ hg help -e|egrep '^[A-Z].*:|^ debug'
1392 1392 Extensions:
1393 1393 $ hg help -k|egrep '^[A-Z].*:|^ debug'
1394 1394 Topics:
1395 1395 Commands:
1396 1396 Extensions:
1397 1397 Extension Commands:
1398 1398 $ hg help -c schemes
1399 1399 abort: no such help topic: schemes
1400 1400 (try 'hg help --keyword schemes')
1401 1401 [255]
1402 1402 $ hg help -e schemes |head -1
1403 1403 schemes extension - extend schemes with shortcuts to repository swarms
1404 1404 $ hg help -c -k dates |egrep '^(Topics|Extensions|Commands):'
1405 1405 Commands:
1406 1406 $ hg help -e -k a |egrep '^(Topics|Extensions|Commands):'
1407 1407 Extensions:
1408 1408 $ hg help -e -c -k date |egrep '^(Topics|Extensions|Commands):'
1409 1409 Extensions:
1410 1410 Commands:
1411 1411 $ hg help -c commit > /dev/null
1412 1412 $ hg help -e -c commit > /dev/null
1413 1413 $ hg help -e commit > /dev/null
1414 1414 abort: no such help topic: commit
1415 1415 (try 'hg help --keyword commit')
1416 1416 [255]
1417 1417
1418 1418 Test keyword search help
1419 1419
1420 1420 $ cat > prefixedname.py <<EOF
1421 1421 > '''matched against word "clone"
1422 1422 > '''
1423 1423 > EOF
1424 1424 $ echo '[extensions]' >> $HGRCPATH
1425 1425 $ echo "dot.dot.prefixedname = `pwd`/prefixedname.py" >> $HGRCPATH
1426 1426 $ hg help -k clone
1427 1427 Topics:
1428 1428
1429 1429 config Configuration Files
1430 1430 extensions Using Additional Features
1431 1431 glossary Glossary
1432 1432 phases Working with Phases
1433 1433 subrepos Subrepositories
1434 1434 urls URL Paths
1435 1435
1436 1436 Commands:
1437 1437
1438 1438 bookmarks create a new bookmark or list existing bookmarks
1439 1439 clone make a copy of an existing repository
1440 1440 paths show aliases for remote repositories
1441 1441 update update working directory (or switch revisions)
1442 1442
1443 1443 Extensions:
1444 1444
1445 1445 clonebundles advertise pre-generated bundles to seed clones
1446 1446 prefixedname matched against word "clone"
1447 1447 relink recreates hardlinks between repository clones
1448 1448
1449 1449 Extension Commands:
1450 1450
1451 1451 qclone clone main and patch repository at same time
1452 1452
1453 1453 Test unfound topic
1454 1454
1455 1455 $ hg help nonexistingtopicthatwillneverexisteverever
1456 1456 abort: no such help topic: nonexistingtopicthatwillneverexisteverever
1457 1457 (try 'hg help --keyword nonexistingtopicthatwillneverexisteverever')
1458 1458 [255]
1459 1459
1460 1460 Test unfound keyword
1461 1461
1462 1462 $ hg help --keyword nonexistingwordthatwillneverexisteverever
1463 1463 abort: no matches
1464 1464 (try 'hg help' for a list of topics)
1465 1465 [255]
1466 1466
1467 1467 Test omit indicating for help
1468 1468
1469 1469 $ cat > addverboseitems.py <<EOF
1470 1470 > '''extension to test omit indicating.
1471 1471 >
1472 1472 > This paragraph is never omitted (for extension)
1473 1473 >
1474 1474 > .. container:: verbose
1475 1475 >
1476 1476 > This paragraph is omitted,
1477 1477 > if :hg:\`help\` is invoked without \`\`-v\`\` (for extension)
1478 1478 >
1479 1479 > This paragraph is never omitted, too (for extension)
1480 1480 > '''
1481 1481 >
1482 1482 > from mercurial import help, commands
1483 1483 > testtopic = """This paragraph is never omitted (for topic).
1484 1484 >
1485 1485 > .. container:: verbose
1486 1486 >
1487 1487 > This paragraph is omitted,
1488 1488 > if :hg:\`help\` is invoked without \`\`-v\`\` (for topic)
1489 1489 >
1490 1490 > This paragraph is never omitted, too (for topic)
1491 1491 > """
1492 1492 > def extsetup(ui):
1493 1493 > help.helptable.append((["topic-containing-verbose"],
1494 1494 > "This is the topic to test omit indicating.",
1495 1495 > lambda ui: testtopic))
1496 1496 > EOF
1497 1497 $ echo '[extensions]' >> $HGRCPATH
1498 1498 $ echo "addverboseitems = `pwd`/addverboseitems.py" >> $HGRCPATH
1499 1499 $ hg help addverboseitems
1500 1500 addverboseitems extension - extension to test omit indicating.
1501 1501
1502 1502 This paragraph is never omitted (for extension)
1503 1503
1504 1504 This paragraph is never omitted, too (for extension)
1505 1505
1506 1506 (some details hidden, use --verbose to show complete help)
1507 1507
1508 1508 no commands defined
1509 1509 $ hg help -v addverboseitems
1510 1510 addverboseitems extension - extension to test omit indicating.
1511 1511
1512 1512 This paragraph is never omitted (for extension)
1513 1513
1514 1514 This paragraph is omitted, if 'hg help' is invoked without "-v" (for
1515 1515 extension)
1516 1516
1517 1517 This paragraph is never omitted, too (for extension)
1518 1518
1519 1519 no commands defined
1520 1520 $ hg help topic-containing-verbose
1521 1521 This is the topic to test omit indicating.
1522 1522 """"""""""""""""""""""""""""""""""""""""""
1523 1523
1524 1524 This paragraph is never omitted (for topic).
1525 1525
1526 1526 This paragraph is never omitted, too (for topic)
1527 1527
1528 1528 (some details hidden, use --verbose to show complete help)
1529 1529 $ hg help -v topic-containing-verbose
1530 1530 This is the topic to test omit indicating.
1531 1531 """"""""""""""""""""""""""""""""""""""""""
1532 1532
1533 1533 This paragraph is never omitted (for topic).
1534 1534
1535 1535 This paragraph is omitted, if 'hg help' is invoked without "-v" (for
1536 1536 topic)
1537 1537
1538 1538 This paragraph is never omitted, too (for topic)
1539 1539
1540 1540 Test section lookup
1541 1541
1542 1542 $ hg help revset.merge
1543 1543 "merge()"
1544 1544 Changeset is a merge changeset.
1545 1545
1546 1546 $ hg help glossary.dag
1547 1547 DAG
1548 1548 The repository of changesets of a distributed version control system
1549 1549 (DVCS) can be described as a directed acyclic graph (DAG), consisting
1550 1550 of nodes and edges, where nodes correspond to changesets and edges
1551 1551 imply a parent -> child relation. This graph can be visualized by
1552 1552 graphical tools such as 'hg log --graph'. In Mercurial, the DAG is
1553 1553 limited by the requirement for children to have at most two parents.
1554 1554
1555 1555
1556 1556 $ hg help hgrc.paths
1557 1557 "paths"
1558 1558 -------
1559 1559
1560 1560 Assigns symbolic names and behavior to repositories.
1561 1561
1562 1562 Options are symbolic names defining the URL or directory that is the
1563 1563 location of the repository. Example:
1564 1564
1565 1565 [paths]
1566 1566 my_server = https://example.com/my_repo
1567 1567 local_path = /home/me/repo
1568 1568
1569 1569 These symbolic names can be used from the command line. To pull from
1570 1570 "my_server": 'hg pull my_server'. To push to "local_path": 'hg push
1571 1571 local_path'.
1572 1572
1573 1573 Options containing colons (":") denote sub-options that can influence
1574 1574 behavior for that specific path. Example:
1575 1575
1576 1576 [paths]
1577 1577 my_server = https://example.com/my_path
1578 1578 my_server:pushurl = ssh://example.com/my_path
1579 1579
1580 1580 The following sub-options can be defined:
1581 1581
1582 1582 "pushurl"
1583 1583 The URL to use for push operations. If not defined, the location
1584 1584 defined by the path's main entry is used.
1585 1585
1586 1586 "pushrev"
1587 1587 A revset defining which revisions to push by default.
1588 1588
1589 1589 When 'hg push' is executed without a "-r" argument, the revset defined
1590 1590 by this sub-option is evaluated to determine what to push.
1591 1591
1592 1592 For example, a value of "." will push the working directory's revision
1593 1593 by default.
1594 1594
1595 1595 Revsets specifying bookmarks will not result in the bookmark being
1596 1596 pushed.
1597 1597
1598 1598 The following special named paths exist:
1599 1599
1600 1600 "default"
1601 1601 The URL or directory to use when no source or remote is specified.
1602 1602
1603 1603 'hg clone' will automatically define this path to the location the
1604 1604 repository was cloned from.
1605 1605
1606 1606 "default-push"
1607 1607 (deprecated) The URL or directory for the default 'hg push' location.
1608 1608 "default:pushurl" should be used instead.
1609 1609
1610 1610 $ hg help glossary.mcguffin
1611 1611 abort: help section not found: glossary.mcguffin
1612 1612 [255]
1613 1613
1614 1614 $ hg help glossary.mc.guffin
1615 1615 abort: help section not found: glossary.mc.guffin
1616 1616 [255]
1617 1617
1618 1618 $ hg help template.files
1619 1619 files List of strings. All files modified, added, or removed by
1620 1620 this changeset.
1621 1621 files(pattern)
1622 1622 All files of the current changeset matching the pattern. See
1623 1623 'hg help patterns'.
1624 1624
1625 1625 Test section lookup by translated message
1626 1626
1627 1627 str.lower() instead of encoding.lower(str) on translated message might
1628 1628 make message meaningless, because some encoding uses 0x41(A) - 0x5a(Z)
1629 1629 as the second or later byte of multi-byte character.
1630 1630
1631 1631 For example, "\x8bL\x98^" (translation of "record" in ja_JP.cp932)
1632 1632 contains 0x4c (L). str.lower() replaces 0x4c(L) by 0x6c(l) and this
1633 1633 replacement makes message meaningless.
1634 1634
1635 1635 This tests that section lookup by translated string isn't broken by
1636 1636 such str.lower().
1637 1637
1638 1638 $ python <<EOF
1639 1639 > def escape(s):
1640 1640 > return ''.join('\u%x' % ord(uc) for uc in s.decode('cp932'))
1641 1641 > # translation of "record" in ja_JP.cp932
1642 1642 > upper = "\x8bL\x98^"
1643 1643 > # str.lower()-ed section name should be treated as different one
1644 1644 > lower = "\x8bl\x98^"
1645 1645 > with open('ambiguous.py', 'w') as fp:
1646 1646 > fp.write("""# ambiguous section names in ja_JP.cp932
1647 1647 > u'''summary of extension
1648 1648 >
1649 1649 > %s
1650 1650 > ----
1651 1651 >
1652 1652 > Upper name should show only this message
1653 1653 >
1654 1654 > %s
1655 1655 > ----
1656 1656 >
1657 1657 > Lower name should show only this message
1658 1658 >
1659 1659 > subsequent section
1660 1660 > ------------------
1661 1661 >
1662 1662 > This should be hidden at 'hg help ambiguous' with section name.
1663 1663 > '''
1664 1664 > """ % (escape(upper), escape(lower)))
1665 1665 > EOF
1666 1666
1667 1667 $ cat >> $HGRCPATH <<EOF
1668 1668 > [extensions]
1669 1669 > ambiguous = ./ambiguous.py
1670 1670 > EOF
1671 1671
1672 1672 $ python <<EOF | sh
1673 1673 > upper = "\x8bL\x98^"
1674 1674 > print "hg --encoding cp932 help -e ambiguous.%s" % upper
1675 1675 > EOF
1676 1676 \x8bL\x98^ (esc)
1677 1677 ----
1678 1678
1679 1679 Upper name should show only this message
1680 1680
1681 1681
1682 1682 $ python <<EOF | sh
1683 1683 > lower = "\x8bl\x98^"
1684 1684 > print "hg --encoding cp932 help -e ambiguous.%s" % lower
1685 1685 > EOF
1686 1686 \x8bl\x98^ (esc)
1687 1687 ----
1688 1688
1689 1689 Lower name should show only this message
1690 1690
1691 1691
1692 1692 $ cat >> $HGRCPATH <<EOF
1693 1693 > [extensions]
1694 1694 > ambiguous = !
1695 1695 > EOF
1696 1696
1697 1697 Show help content of disabled extensions
1698 1698
1699 1699 $ cat >> $HGRCPATH <<EOF
1700 1700 > [extensions]
1701 1701 > ambiguous = !./ambiguous.py
1702 1702 > EOF
1703 1703 $ hg help -e ambiguous
1704 1704 ambiguous extension - (no help text available)
1705 1705
1706 1706 (use 'hg help extensions' for information on enabling extensions)
1707 1707
1708 1708 Test dynamic list of merge tools only shows up once
1709 1709 $ hg help merge-tools
1710 1710 Merge Tools
1711 1711 """""""""""
1712 1712
1713 1713 To merge files Mercurial uses merge tools.
1714 1714
1715 1715 A merge tool combines two different versions of a file into a merged file.
1716 1716 Merge tools are given the two files and the greatest common ancestor of
1717 1717 the two file versions, so they can determine the changes made on both
1718 1718 branches.
1719 1719
1720 1720 Merge tools are used both for 'hg resolve', 'hg merge', 'hg update', 'hg
1721 1721 backout' and in several extensions.
1722 1722
1723 1723 Usually, the merge tool tries to automatically reconcile the files by
1724 1724 combining all non-overlapping changes that occurred separately in the two
1725 1725 different evolutions of the same initial base file. Furthermore, some
1726 1726 interactive merge programs make it easier to manually resolve conflicting
1727 1727 merges, either in a graphical way, or by inserting some conflict markers.
1728 1728 Mercurial does not include any interactive merge programs but relies on
1729 1729 external tools for that.
1730 1730
1731 1731 Available merge tools
1732 1732 =====================
1733 1733
1734 1734 External merge tools and their properties are configured in the merge-
1735 1735 tools configuration section - see hgrc(5) - but they can often just be
1736 1736 named by their executable.
1737 1737
1738 1738 A merge tool is generally usable if its executable can be found on the
1739 1739 system and if it can handle the merge. The executable is found if it is an
1740 1740 absolute or relative executable path or the name of an application in the
1741 1741 executable search path. The tool is assumed to be able to handle the merge
1742 1742 if it can handle symlinks if the file is a symlink, if it can handle
1743 1743 binary files if the file is binary, and if a GUI is available if the tool
1744 1744 requires a GUI.
1745 1745
1746 1746 There are some internal merge tools which can be used. The internal merge
1747 1747 tools are:
1748 1748
1749 1749 ":dump"
1750 1750 Creates three versions of the files to merge, containing the contents of
1751 1751 local, other and base. These files can then be used to perform a merge
1752 1752 manually. If the file to be merged is named "a.txt", these files will
1753 1753 accordingly be named "a.txt.local", "a.txt.other" and "a.txt.base" and
1754 1754 they will be placed in the same directory as "a.txt".
1755 1755
1756 1756 ":fail"
1757 1757 Rather than attempting to merge files that were modified on both
1758 1758 branches, it marks them as unresolved. The resolve command must be used
1759 1759 to resolve these conflicts.
1760 1760
1761 1761 ":local"
1762 1762 Uses the local 'p1()' version of files as the merged version.
1763 1763
1764 1764 ":merge"
1765 1765 Uses the internal non-interactive simple merge algorithm for merging
1766 1766 files. It will fail if there are any conflicts and leave markers in the
1767 1767 partially merged file. Markers will have two sections, one for each side
1768 1768 of merge.
1769 1769
1770 1770 ":merge-local"
1771 1771 Like :merge, but resolve all conflicts non-interactively in favor of the
1772 1772 local 'p1()' changes.
1773 1773
1774 1774 ":merge-other"
1775 1775 Like :merge, but resolve all conflicts non-interactively in favor of the
1776 1776 other 'p2()' changes.
1777 1777
1778 1778 ":merge3"
1779 1779 Uses the internal non-interactive simple merge algorithm for merging
1780 1780 files. It will fail if there are any conflicts and leave markers in the
1781 1781 partially merged file. Marker will have three sections, one from each
1782 1782 side of the merge and one for the base content.
1783 1783
1784 1784 ":other"
1785 1785 Uses the other 'p2()' version of files as the merged version.
1786 1786
1787 1787 ":prompt"
1788 1788 Asks the user which of the local 'p1()' or the other 'p2()' version to
1789 1789 keep as the merged version.
1790 1790
1791 1791 ":tagmerge"
1792 1792 Uses the internal tag merge algorithm (experimental).
1793 1793
1794 1794 ":union"
1795 1795 Uses the internal non-interactive simple merge algorithm for merging
1796 1796 files. It will use both left and right sides for conflict regions. No
1797 1797 markers are inserted.
1798 1798
1799 1799 Internal tools are always available and do not require a GUI but will by
1800 1800 default not handle symlinks or binary files.
1801 1801
1802 1802 Choosing a merge tool
1803 1803 =====================
1804 1804
1805 1805 Mercurial uses these rules when deciding which merge tool to use:
1806 1806
1807 1807 1. If a tool has been specified with the --tool option to merge or
1808 1808 resolve, it is used. If it is the name of a tool in the merge-tools
1809 1809 configuration, its configuration is used. Otherwise the specified tool
1810 1810 must be executable by the shell.
1811 1811 2. If the "HGMERGE" environment variable is present, its value is used and
1812 1812 must be executable by the shell.
1813 1813 3. If the filename of the file to be merged matches any of the patterns in
1814 1814 the merge-patterns configuration section, the first usable merge tool
1815 1815 corresponding to a matching pattern is used. Here, binary capabilities
1816 1816 of the merge tool are not considered.
1817 1817 4. If ui.merge is set it will be considered next. If the value is not the
1818 1818 name of a configured tool, the specified value is used and must be
1819 1819 executable by the shell. Otherwise the named tool is used if it is
1820 1820 usable.
1821 1821 5. If any usable merge tools are present in the merge-tools configuration
1822 1822 section, the one with the highest priority is used.
1823 1823 6. If a program named "hgmerge" can be found on the system, it is used -
1824 1824 but it will by default not be used for symlinks and binary files.
1825 1825 7. If the file to be merged is not binary and is not a symlink, then
1826 1826 internal ":merge" is used.
1827 1827 8. The merge of the file fails and must be resolved before commit.
1828 1828
1829 1829 Note:
1830 1830 After selecting a merge program, Mercurial will by default attempt to
1831 1831 merge the files using a simple merge algorithm first. Only if it
1832 1832 doesn't succeed because of conflicting changes Mercurial will actually
1833 1833 execute the merge program. Whether to use the simple merge algorithm
1834 1834 first can be controlled by the premerge setting of the merge tool.
1835 1835 Premerge is enabled by default unless the file is binary or a symlink.
1836 1836
1837 1837 See the merge-tools and ui sections of hgrc(5) for details on the
1838 1838 configuration of merge tools.
1839 1839
1840 1840 Test usage of section marks in help documents
1841 1841
1842 1842 $ cd "$TESTDIR"/../doc
1843 1843 $ python check-seclevel.py
1844 1844 $ cd $TESTTMP
1845 1845
1846 1846 #if serve
1847 1847
1848 1848 Test the help pages in hgweb.
1849 1849
1850 1850 Dish up an empty repo; serve it cold.
1851 1851
1852 1852 $ hg init "$TESTTMP/test"
1853 1853 $ hg serve -R "$TESTTMP/test" -n test -p $HGPORT -d --pid-file=hg.pid
1854 1854 $ cat hg.pid >> $DAEMON_PIDS
1855 1855
1856 1856 $ get-with-headers.py $LOCALIP:$HGPORT "help"
1857 1857 200 Script output follows
1858 1858
1859 1859 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
1860 1860 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
1861 1861 <head>
1862 1862 <link rel="icon" href="/static/hgicon.png" type="image/png" />
1863 1863 <meta name="robots" content="index, nofollow" />
1864 1864 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
1865 1865 <script type="text/javascript" src="/static/mercurial.js"></script>
1866 1866
1867 1867 <title>Help: Index</title>
1868 1868 </head>
1869 1869 <body>
1870 1870
1871 1871 <div class="container">
1872 1872 <div class="menu">
1873 1873 <div class="logo">
1874 1874 <a href="https://mercurial-scm.org/">
1875 1875 <img src="/static/hglogo.png" alt="mercurial" /></a>
1876 1876 </div>
1877 1877 <ul>
1878 1878 <li><a href="/shortlog">log</a></li>
1879 1879 <li><a href="/graph">graph</a></li>
1880 1880 <li><a href="/tags">tags</a></li>
1881 1881 <li><a href="/bookmarks">bookmarks</a></li>
1882 1882 <li><a href="/branches">branches</a></li>
1883 1883 </ul>
1884 1884 <ul>
1885 1885 <li class="active">help</li>
1886 1886 </ul>
1887 1887 </div>
1888 1888
1889 1889 <div class="main">
1890 1890 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
1891 1891 <form class="search" action="/log">
1892 1892
1893 1893 <p><input name="rev" id="search1" type="text" size="30" /></p>
1894 1894 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
1895 1895 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
1896 1896 </form>
1897 1897 <table class="bigtable">
1898 1898 <tr><td colspan="2"><h2><a name="topics" href="#topics">Topics</a></h2></td></tr>
1899 1899
1900 1900 <tr><td>
1901 1901 <a href="/help/color">
1902 1902 color
1903 1903 </a>
1904 1904 </td><td>
1905 1905 Colorizing Outputs
1906 1906 </td></tr>
1907 1907 <tr><td>
1908 1908 <a href="/help/config">
1909 1909 config
1910 1910 </a>
1911 1911 </td><td>
1912 1912 Configuration Files
1913 1913 </td></tr>
1914 1914 <tr><td>
1915 1915 <a href="/help/dates">
1916 1916 dates
1917 1917 </a>
1918 1918 </td><td>
1919 1919 Date Formats
1920 1920 </td></tr>
1921 1921 <tr><td>
1922 1922 <a href="/help/diffs">
1923 1923 diffs
1924 1924 </a>
1925 1925 </td><td>
1926 1926 Diff Formats
1927 1927 </td></tr>
1928 1928 <tr><td>
1929 1929 <a href="/help/environment">
1930 1930 environment
1931 1931 </a>
1932 1932 </td><td>
1933 1933 Environment Variables
1934 1934 </td></tr>
1935 1935 <tr><td>
1936 1936 <a href="/help/extensions">
1937 1937 extensions
1938 1938 </a>
1939 1939 </td><td>
1940 1940 Using Additional Features
1941 1941 </td></tr>
1942 1942 <tr><td>
1943 1943 <a href="/help/filesets">
1944 1944 filesets
1945 1945 </a>
1946 1946 </td><td>
1947 1947 Specifying File Sets
1948 1948 </td></tr>
1949 1949 <tr><td>
1950 1950 <a href="/help/glossary">
1951 1951 glossary
1952 1952 </a>
1953 1953 </td><td>
1954 1954 Glossary
1955 1955 </td></tr>
1956 1956 <tr><td>
1957 1957 <a href="/help/hgignore">
1958 1958 hgignore
1959 1959 </a>
1960 1960 </td><td>
1961 1961 Syntax for Mercurial Ignore Files
1962 1962 </td></tr>
1963 1963 <tr><td>
1964 1964 <a href="/help/hgweb">
1965 1965 hgweb
1966 1966 </a>
1967 1967 </td><td>
1968 1968 Configuring hgweb
1969 1969 </td></tr>
1970 1970 <tr><td>
1971 1971 <a href="/help/internals">
1972 1972 internals
1973 1973 </a>
1974 1974 </td><td>
1975 1975 Technical implementation topics
1976 1976 </td></tr>
1977 1977 <tr><td>
1978 1978 <a href="/help/merge-tools">
1979 1979 merge-tools
1980 1980 </a>
1981 1981 </td><td>
1982 1982 Merge Tools
1983 1983 </td></tr>
1984 1984 <tr><td>
1985 1985 <a href="/help/pager">
1986 1986 pager
1987 1987 </a>
1988 1988 </td><td>
1989 1989 Pager Support
1990 1990 </td></tr>
1991 1991 <tr><td>
1992 1992 <a href="/help/patterns">
1993 1993 patterns
1994 1994 </a>
1995 1995 </td><td>
1996 1996 File Name Patterns
1997 1997 </td></tr>
1998 1998 <tr><td>
1999 1999 <a href="/help/phases">
2000 2000 phases
2001 2001 </a>
2002 2002 </td><td>
2003 2003 Working with Phases
2004 2004 </td></tr>
2005 2005 <tr><td>
2006 2006 <a href="/help/revisions">
2007 2007 revisions
2008 2008 </a>
2009 2009 </td><td>
2010 2010 Specifying Revisions
2011 2011 </td></tr>
2012 2012 <tr><td>
2013 2013 <a href="/help/scripting">
2014 2014 scripting
2015 2015 </a>
2016 2016 </td><td>
2017 2017 Using Mercurial from scripts and automation
2018 2018 </td></tr>
2019 2019 <tr><td>
2020 2020 <a href="/help/subrepos">
2021 2021 subrepos
2022 2022 </a>
2023 2023 </td><td>
2024 2024 Subrepositories
2025 2025 </td></tr>
2026 2026 <tr><td>
2027 2027 <a href="/help/templating">
2028 2028 templating
2029 2029 </a>
2030 2030 </td><td>
2031 2031 Template Usage
2032 2032 </td></tr>
2033 2033 <tr><td>
2034 2034 <a href="/help/urls">
2035 2035 urls
2036 2036 </a>
2037 2037 </td><td>
2038 2038 URL Paths
2039 2039 </td></tr>
2040 2040 <tr><td>
2041 2041 <a href="/help/topic-containing-verbose">
2042 2042 topic-containing-verbose
2043 2043 </a>
2044 2044 </td><td>
2045 2045 This is the topic to test omit indicating.
2046 2046 </td></tr>
2047 2047
2048 2048
2049 2049 <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
2050 2050
2051 2051 <tr><td>
2052 2052 <a href="/help/add">
2053 2053 add
2054 2054 </a>
2055 2055 </td><td>
2056 2056 add the specified files on the next commit
2057 2057 </td></tr>
2058 2058 <tr><td>
2059 2059 <a href="/help/annotate">
2060 2060 annotate
2061 2061 </a>
2062 2062 </td><td>
2063 2063 show changeset information by line for each file
2064 2064 </td></tr>
2065 2065 <tr><td>
2066 2066 <a href="/help/clone">
2067 2067 clone
2068 2068 </a>
2069 2069 </td><td>
2070 2070 make a copy of an existing repository
2071 2071 </td></tr>
2072 2072 <tr><td>
2073 2073 <a href="/help/commit">
2074 2074 commit
2075 2075 </a>
2076 2076 </td><td>
2077 2077 commit the specified files or all outstanding changes
2078 2078 </td></tr>
2079 2079 <tr><td>
2080 2080 <a href="/help/diff">
2081 2081 diff
2082 2082 </a>
2083 2083 </td><td>
2084 2084 diff repository (or selected files)
2085 2085 </td></tr>
2086 2086 <tr><td>
2087 2087 <a href="/help/export">
2088 2088 export
2089 2089 </a>
2090 2090 </td><td>
2091 2091 dump the header and diffs for one or more changesets
2092 2092 </td></tr>
2093 2093 <tr><td>
2094 2094 <a href="/help/forget">
2095 2095 forget
2096 2096 </a>
2097 2097 </td><td>
2098 2098 forget the specified files on the next commit
2099 2099 </td></tr>
2100 2100 <tr><td>
2101 2101 <a href="/help/init">
2102 2102 init
2103 2103 </a>
2104 2104 </td><td>
2105 2105 create a new repository in the given directory
2106 2106 </td></tr>
2107 2107 <tr><td>
2108 2108 <a href="/help/log">
2109 2109 log
2110 2110 </a>
2111 2111 </td><td>
2112 2112 show revision history of entire repository or files
2113 2113 </td></tr>
2114 2114 <tr><td>
2115 2115 <a href="/help/merge">
2116 2116 merge
2117 2117 </a>
2118 2118 </td><td>
2119 2119 merge another revision into working directory
2120 2120 </td></tr>
2121 2121 <tr><td>
2122 2122 <a href="/help/pull">
2123 2123 pull
2124 2124 </a>
2125 2125 </td><td>
2126 2126 pull changes from the specified source
2127 2127 </td></tr>
2128 2128 <tr><td>
2129 2129 <a href="/help/push">
2130 2130 push
2131 2131 </a>
2132 2132 </td><td>
2133 2133 push changes to the specified destination
2134 2134 </td></tr>
2135 2135 <tr><td>
2136 2136 <a href="/help/remove">
2137 2137 remove
2138 2138 </a>
2139 2139 </td><td>
2140 2140 remove the specified files on the next commit
2141 2141 </td></tr>
2142 2142 <tr><td>
2143 2143 <a href="/help/serve">
2144 2144 serve
2145 2145 </a>
2146 2146 </td><td>
2147 2147 start stand-alone webserver
2148 2148 </td></tr>
2149 2149 <tr><td>
2150 2150 <a href="/help/status">
2151 2151 status
2152 2152 </a>
2153 2153 </td><td>
2154 2154 show changed files in the working directory
2155 2155 </td></tr>
2156 2156 <tr><td>
2157 2157 <a href="/help/summary">
2158 2158 summary
2159 2159 </a>
2160 2160 </td><td>
2161 2161 summarize working directory state
2162 2162 </td></tr>
2163 2163 <tr><td>
2164 2164 <a href="/help/update">
2165 2165 update
2166 2166 </a>
2167 2167 </td><td>
2168 2168 update working directory (or switch revisions)
2169 2169 </td></tr>
2170 2170
2171 2171
2172 2172
2173 2173 <tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
2174 2174
2175 2175 <tr><td>
2176 2176 <a href="/help/addremove">
2177 2177 addremove
2178 2178 </a>
2179 2179 </td><td>
2180 2180 add all new files, delete all missing files
2181 2181 </td></tr>
2182 2182 <tr><td>
2183 2183 <a href="/help/archive">
2184 2184 archive
2185 2185 </a>
2186 2186 </td><td>
2187 2187 create an unversioned archive of a repository revision
2188 2188 </td></tr>
2189 2189 <tr><td>
2190 2190 <a href="/help/backout">
2191 2191 backout
2192 2192 </a>
2193 2193 </td><td>
2194 2194 reverse effect of earlier changeset
2195 2195 </td></tr>
2196 2196 <tr><td>
2197 2197 <a href="/help/bisect">
2198 2198 bisect
2199 2199 </a>
2200 2200 </td><td>
2201 2201 subdivision search of changesets
2202 2202 </td></tr>
2203 2203 <tr><td>
2204 2204 <a href="/help/bookmarks">
2205 2205 bookmarks
2206 2206 </a>
2207 2207 </td><td>
2208 2208 create a new bookmark or list existing bookmarks
2209 2209 </td></tr>
2210 2210 <tr><td>
2211 2211 <a href="/help/branch">
2212 2212 branch
2213 2213 </a>
2214 2214 </td><td>
2215 2215 set or show the current branch name
2216 2216 </td></tr>
2217 2217 <tr><td>
2218 2218 <a href="/help/branches">
2219 2219 branches
2220 2220 </a>
2221 2221 </td><td>
2222 2222 list repository named branches
2223 2223 </td></tr>
2224 2224 <tr><td>
2225 2225 <a href="/help/bundle">
2226 2226 bundle
2227 2227 </a>
2228 2228 </td><td>
2229 2229 create a changegroup file
2230 2230 </td></tr>
2231 2231 <tr><td>
2232 2232 <a href="/help/cat">
2233 2233 cat
2234 2234 </a>
2235 2235 </td><td>
2236 2236 output the current or given revision of files
2237 2237 </td></tr>
2238 2238 <tr><td>
2239 2239 <a href="/help/config">
2240 2240 config
2241 2241 </a>
2242 2242 </td><td>
2243 2243 show combined config settings from all hgrc files
2244 2244 </td></tr>
2245 2245 <tr><td>
2246 2246 <a href="/help/copy">
2247 2247 copy
2248 2248 </a>
2249 2249 </td><td>
2250 2250 mark files as copied for the next commit
2251 2251 </td></tr>
2252 2252 <tr><td>
2253 2253 <a href="/help/files">
2254 2254 files
2255 2255 </a>
2256 2256 </td><td>
2257 2257 list tracked files
2258 2258 </td></tr>
2259 2259 <tr><td>
2260 2260 <a href="/help/graft">
2261 2261 graft
2262 2262 </a>
2263 2263 </td><td>
2264 2264 copy changes from other branches onto the current branch
2265 2265 </td></tr>
2266 2266 <tr><td>
2267 2267 <a href="/help/grep">
2268 2268 grep
2269 2269 </a>
2270 2270 </td><td>
2271 2271 search revision history for a pattern in specified files
2272 2272 </td></tr>
2273 2273 <tr><td>
2274 2274 <a href="/help/heads">
2275 2275 heads
2276 2276 </a>
2277 2277 </td><td>
2278 2278 show branch heads
2279 2279 </td></tr>
2280 2280 <tr><td>
2281 2281 <a href="/help/help">
2282 2282 help
2283 2283 </a>
2284 2284 </td><td>
2285 2285 show help for a given topic or a help overview
2286 2286 </td></tr>
2287 2287 <tr><td>
2288 2288 <a href="/help/hgalias">
2289 2289 hgalias
2290 2290 </a>
2291 2291 </td><td>
2292 2292 summarize working directory state
2293 2293 </td></tr>
2294 2294 <tr><td>
2295 2295 <a href="/help/identify">
2296 2296 identify
2297 2297 </a>
2298 2298 </td><td>
2299 2299 identify the working directory or specified revision
2300 2300 </td></tr>
2301 2301 <tr><td>
2302 2302 <a href="/help/import">
2303 2303 import
2304 2304 </a>
2305 2305 </td><td>
2306 2306 import an ordered set of patches
2307 2307 </td></tr>
2308 2308 <tr><td>
2309 2309 <a href="/help/incoming">
2310 2310 incoming
2311 2311 </a>
2312 2312 </td><td>
2313 2313 show new changesets found in source
2314 2314 </td></tr>
2315 2315 <tr><td>
2316 2316 <a href="/help/manifest">
2317 2317 manifest
2318 2318 </a>
2319 2319 </td><td>
2320 2320 output the current or given revision of the project manifest
2321 2321 </td></tr>
2322 2322 <tr><td>
2323 2323 <a href="/help/nohelp">
2324 2324 nohelp
2325 2325 </a>
2326 2326 </td><td>
2327 2327 (no help text available)
2328 2328 </td></tr>
2329 2329 <tr><td>
2330 2330 <a href="/help/outgoing">
2331 2331 outgoing
2332 2332 </a>
2333 2333 </td><td>
2334 2334 show changesets not found in the destination
2335 2335 </td></tr>
2336 2336 <tr><td>
2337 2337 <a href="/help/paths">
2338 2338 paths
2339 2339 </a>
2340 2340 </td><td>
2341 2341 show aliases for remote repositories
2342 2342 </td></tr>
2343 2343 <tr><td>
2344 2344 <a href="/help/phase">
2345 2345 phase
2346 2346 </a>
2347 2347 </td><td>
2348 2348 set or show the current phase name
2349 2349 </td></tr>
2350 2350 <tr><td>
2351 2351 <a href="/help/recover">
2352 2352 recover
2353 2353 </a>
2354 2354 </td><td>
2355 2355 roll back an interrupted transaction
2356 2356 </td></tr>
2357 2357 <tr><td>
2358 2358 <a href="/help/rename">
2359 2359 rename
2360 2360 </a>
2361 2361 </td><td>
2362 2362 rename files; equivalent of copy + remove
2363 2363 </td></tr>
2364 2364 <tr><td>
2365 2365 <a href="/help/resolve">
2366 2366 resolve
2367 2367 </a>
2368 2368 </td><td>
2369 2369 redo merges or set/view the merge status of files
2370 2370 </td></tr>
2371 2371 <tr><td>
2372 2372 <a href="/help/revert">
2373 2373 revert
2374 2374 </a>
2375 2375 </td><td>
2376 2376 restore files to their checkout state
2377 2377 </td></tr>
2378 2378 <tr><td>
2379 2379 <a href="/help/root">
2380 2380 root
2381 2381 </a>
2382 2382 </td><td>
2383 2383 print the root (top) of the current working directory
2384 2384 </td></tr>
2385 2385 <tr><td>
2386 2386 <a href="/help/shellalias">
2387 2387 shellalias
2388 2388 </a>
2389 2389 </td><td>
2390 2390 (no help text available)
2391 2391 </td></tr>
2392 2392 <tr><td>
2393 2393 <a href="/help/tag">
2394 2394 tag
2395 2395 </a>
2396 2396 </td><td>
2397 2397 add one or more tags for the current or given revision
2398 2398 </td></tr>
2399 2399 <tr><td>
2400 2400 <a href="/help/tags">
2401 2401 tags
2402 2402 </a>
2403 2403 </td><td>
2404 2404 list repository tags
2405 2405 </td></tr>
2406 2406 <tr><td>
2407 2407 <a href="/help/unbundle">
2408 2408 unbundle
2409 2409 </a>
2410 2410 </td><td>
2411 2411 apply one or more changegroup files
2412 2412 </td></tr>
2413 2413 <tr><td>
2414 2414 <a href="/help/verify">
2415 2415 verify
2416 2416 </a>
2417 2417 </td><td>
2418 2418 verify the integrity of the repository
2419 2419 </td></tr>
2420 2420 <tr><td>
2421 2421 <a href="/help/version">
2422 2422 version
2423 2423 </a>
2424 2424 </td><td>
2425 2425 output version and copyright information
2426 2426 </td></tr>
2427 2427
2428 2428
2429 2429 </table>
2430 2430 </div>
2431 2431 </div>
2432 2432
2433 2433
2434 2434
2435 2435 </body>
2436 2436 </html>
2437 2437
2438 2438
2439 2439 $ get-with-headers.py $LOCALIP:$HGPORT "help/add"
2440 2440 200 Script output follows
2441 2441
2442 2442 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2443 2443 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2444 2444 <head>
2445 2445 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2446 2446 <meta name="robots" content="index, nofollow" />
2447 2447 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2448 2448 <script type="text/javascript" src="/static/mercurial.js"></script>
2449 2449
2450 2450 <title>Help: add</title>
2451 2451 </head>
2452 2452 <body>
2453 2453
2454 2454 <div class="container">
2455 2455 <div class="menu">
2456 2456 <div class="logo">
2457 2457 <a href="https://mercurial-scm.org/">
2458 2458 <img src="/static/hglogo.png" alt="mercurial" /></a>
2459 2459 </div>
2460 2460 <ul>
2461 2461 <li><a href="/shortlog">log</a></li>
2462 2462 <li><a href="/graph">graph</a></li>
2463 2463 <li><a href="/tags">tags</a></li>
2464 2464 <li><a href="/bookmarks">bookmarks</a></li>
2465 2465 <li><a href="/branches">branches</a></li>
2466 2466 </ul>
2467 2467 <ul>
2468 2468 <li class="active"><a href="/help">help</a></li>
2469 2469 </ul>
2470 2470 </div>
2471 2471
2472 2472 <div class="main">
2473 2473 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
2474 2474 <h3>Help: add</h3>
2475 2475
2476 2476 <form class="search" action="/log">
2477 2477
2478 2478 <p><input name="rev" id="search1" type="text" size="30" /></p>
2479 2479 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
2480 2480 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
2481 2481 </form>
2482 2482 <div id="doc">
2483 2483 <p>
2484 2484 hg add [OPTION]... [FILE]...
2485 2485 </p>
2486 2486 <p>
2487 2487 add the specified files on the next commit
2488 2488 </p>
2489 2489 <p>
2490 2490 Schedule files to be version controlled and added to the
2491 2491 repository.
2492 2492 </p>
2493 2493 <p>
2494 2494 The files will be added to the repository at the next commit. To
2495 2495 undo an add before that, see 'hg forget'.
2496 2496 </p>
2497 2497 <p>
2498 2498 If no names are given, add all files to the repository (except
2499 2499 files matching &quot;.hgignore&quot;).
2500 2500 </p>
2501 2501 <p>
2502 2502 Examples:
2503 2503 </p>
2504 2504 <ul>
2505 2505 <li> New (unknown) files are added automatically by 'hg add':
2506 2506 <pre>
2507 2507 \$ ls (re)
2508 2508 foo.c
2509 2509 \$ hg status (re)
2510 2510 ? foo.c
2511 2511 \$ hg add (re)
2512 2512 adding foo.c
2513 2513 \$ hg status (re)
2514 2514 A foo.c
2515 2515 </pre>
2516 2516 <li> Specific files to be added can be specified:
2517 2517 <pre>
2518 2518 \$ ls (re)
2519 2519 bar.c foo.c
2520 2520 \$ hg status (re)
2521 2521 ? bar.c
2522 2522 ? foo.c
2523 2523 \$ hg add bar.c (re)
2524 2524 \$ hg status (re)
2525 2525 A bar.c
2526 2526 ? foo.c
2527 2527 </pre>
2528 2528 </ul>
2529 2529 <p>
2530 2530 Returns 0 if all files are successfully added.
2531 2531 </p>
2532 2532 <p>
2533 2533 options ([+] can be repeated):
2534 2534 </p>
2535 2535 <table>
2536 2536 <tr><td>-I</td>
2537 2537 <td>--include PATTERN [+]</td>
2538 2538 <td>include names matching the given patterns</td></tr>
2539 2539 <tr><td>-X</td>
2540 2540 <td>--exclude PATTERN [+]</td>
2541 2541 <td>exclude names matching the given patterns</td></tr>
2542 2542 <tr><td>-S</td>
2543 2543 <td>--subrepos</td>
2544 2544 <td>recurse into subrepositories</td></tr>
2545 2545 <tr><td>-n</td>
2546 2546 <td>--dry-run</td>
2547 2547 <td>do not perform actions, just print output</td></tr>
2548 2548 </table>
2549 2549 <p>
2550 2550 global options ([+] can be repeated):
2551 2551 </p>
2552 2552 <table>
2553 2553 <tr><td>-R</td>
2554 2554 <td>--repository REPO</td>
2555 2555 <td>repository root directory or name of overlay bundle file</td></tr>
2556 2556 <tr><td></td>
2557 2557 <td>--cwd DIR</td>
2558 2558 <td>change working directory</td></tr>
2559 2559 <tr><td>-y</td>
2560 2560 <td>--noninteractive</td>
2561 2561 <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
2562 2562 <tr><td>-q</td>
2563 2563 <td>--quiet</td>
2564 2564 <td>suppress output</td></tr>
2565 2565 <tr><td>-v</td>
2566 2566 <td>--verbose</td>
2567 2567 <td>enable additional output</td></tr>
2568 2568 <tr><td></td>
2569 2569 <td>--color TYPE</td>
2570 2570 <td>when to colorize (boolean, always, auto, never, or debug)</td></tr>
2571 2571 <tr><td></td>
2572 2572 <td>--config CONFIG [+]</td>
2573 2573 <td>set/override config option (use 'section.name=value')</td></tr>
2574 2574 <tr><td></td>
2575 2575 <td>--debug</td>
2576 2576 <td>enable debugging output</td></tr>
2577 2577 <tr><td></td>
2578 2578 <td>--debugger</td>
2579 2579 <td>start debugger</td></tr>
2580 2580 <tr><td></td>
2581 2581 <td>--encoding ENCODE</td>
2582 2582 <td>set the charset encoding (default: ascii)</td></tr>
2583 2583 <tr><td></td>
2584 2584 <td>--encodingmode MODE</td>
2585 2585 <td>set the charset encoding mode (default: strict)</td></tr>
2586 2586 <tr><td></td>
2587 2587 <td>--traceback</td>
2588 2588 <td>always print a traceback on exception</td></tr>
2589 2589 <tr><td></td>
2590 2590 <td>--time</td>
2591 2591 <td>time how long the command takes</td></tr>
2592 2592 <tr><td></td>
2593 2593 <td>--profile</td>
2594 2594 <td>print command execution profile</td></tr>
2595 2595 <tr><td></td>
2596 2596 <td>--version</td>
2597 2597 <td>output version information and exit</td></tr>
2598 2598 <tr><td>-h</td>
2599 2599 <td>--help</td>
2600 2600 <td>display help and exit</td></tr>
2601 2601 <tr><td></td>
2602 2602 <td>--hidden</td>
2603 2603 <td>consider hidden changesets</td></tr>
2604 2604 <tr><td></td>
2605 2605 <td>--pager TYPE</td>
2606 2606 <td>when to paginate (boolean, always, auto, or never) (default: auto)</td></tr>
2607 2607 </table>
2608 2608
2609 2609 </div>
2610 2610 </div>
2611 2611 </div>
2612 2612
2613 2613
2614 2614
2615 2615 </body>
2616 2616 </html>
2617 2617
2618 2618
2619 2619 $ get-with-headers.py $LOCALIP:$HGPORT "help/remove"
2620 2620 200 Script output follows
2621 2621
2622 2622 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2623 2623 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2624 2624 <head>
2625 2625 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2626 2626 <meta name="robots" content="index, nofollow" />
2627 2627 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2628 2628 <script type="text/javascript" src="/static/mercurial.js"></script>
2629 2629
2630 2630 <title>Help: remove</title>
2631 2631 </head>
2632 2632 <body>
2633 2633
2634 2634 <div class="container">
2635 2635 <div class="menu">
2636 2636 <div class="logo">
2637 2637 <a href="https://mercurial-scm.org/">
2638 2638 <img src="/static/hglogo.png" alt="mercurial" /></a>
2639 2639 </div>
2640 2640 <ul>
2641 2641 <li><a href="/shortlog">log</a></li>
2642 2642 <li><a href="/graph">graph</a></li>
2643 2643 <li><a href="/tags">tags</a></li>
2644 2644 <li><a href="/bookmarks">bookmarks</a></li>
2645 2645 <li><a href="/branches">branches</a></li>
2646 2646 </ul>
2647 2647 <ul>
2648 2648 <li class="active"><a href="/help">help</a></li>
2649 2649 </ul>
2650 2650 </div>
2651 2651
2652 2652 <div class="main">
2653 2653 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
2654 2654 <h3>Help: remove</h3>
2655 2655
2656 2656 <form class="search" action="/log">
2657 2657
2658 2658 <p><input name="rev" id="search1" type="text" size="30" /></p>
2659 2659 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
2660 2660 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
2661 2661 </form>
2662 2662 <div id="doc">
2663 2663 <p>
2664 2664 hg remove [OPTION]... FILE...
2665 2665 </p>
2666 2666 <p>
2667 2667 aliases: rm
2668 2668 </p>
2669 2669 <p>
2670 2670 remove the specified files on the next commit
2671 2671 </p>
2672 2672 <p>
2673 2673 Schedule the indicated files for removal from the current branch.
2674 2674 </p>
2675 2675 <p>
2676 2676 This command schedules the files to be removed at the next commit.
2677 2677 To undo a remove before that, see 'hg revert'. To undo added
2678 2678 files, see 'hg forget'.
2679 2679 </p>
2680 2680 <p>
2681 2681 -A/--after can be used to remove only files that have already
2682 2682 been deleted, -f/--force can be used to force deletion, and -Af
2683 2683 can be used to remove files from the next revision without
2684 2684 deleting them from the working directory.
2685 2685 </p>
2686 2686 <p>
2687 2687 The following table details the behavior of remove for different
2688 2688 file states (columns) and option combinations (rows). The file
2689 2689 states are Added [A], Clean [C], Modified [M] and Missing [!]
2690 2690 (as reported by 'hg status'). The actions are Warn, Remove
2691 2691 (from branch) and Delete (from disk):
2692 2692 </p>
2693 2693 <table>
2694 2694 <tr><td>opt/state</td>
2695 2695 <td>A</td>
2696 2696 <td>C</td>
2697 2697 <td>M</td>
2698 2698 <td>!</td></tr>
2699 2699 <tr><td>none</td>
2700 2700 <td>W</td>
2701 2701 <td>RD</td>
2702 2702 <td>W</td>
2703 2703 <td>R</td></tr>
2704 2704 <tr><td>-f</td>
2705 2705 <td>R</td>
2706 2706 <td>RD</td>
2707 2707 <td>RD</td>
2708 2708 <td>R</td></tr>
2709 2709 <tr><td>-A</td>
2710 2710 <td>W</td>
2711 2711 <td>W</td>
2712 2712 <td>W</td>
2713 2713 <td>R</td></tr>
2714 2714 <tr><td>-Af</td>
2715 2715 <td>R</td>
2716 2716 <td>R</td>
2717 2717 <td>R</td>
2718 2718 <td>R</td></tr>
2719 2719 </table>
2720 2720 <p>
2721 2721 <b>Note:</b>
2722 2722 </p>
2723 2723 <p>
2724 2724 'hg remove' never deletes files in Added [A] state from the
2725 2725 working directory, not even if &quot;--force&quot; is specified.
2726 2726 </p>
2727 2727 <p>
2728 2728 Returns 0 on success, 1 if any warnings encountered.
2729 2729 </p>
2730 2730 <p>
2731 2731 options ([+] can be repeated):
2732 2732 </p>
2733 2733 <table>
2734 2734 <tr><td>-A</td>
2735 2735 <td>--after</td>
2736 2736 <td>record delete for missing files</td></tr>
2737 2737 <tr><td>-f</td>
2738 2738 <td>--force</td>
2739 2739 <td>forget added files, delete modified files</td></tr>
2740 2740 <tr><td>-S</td>
2741 2741 <td>--subrepos</td>
2742 2742 <td>recurse into subrepositories</td></tr>
2743 2743 <tr><td>-I</td>
2744 2744 <td>--include PATTERN [+]</td>
2745 2745 <td>include names matching the given patterns</td></tr>
2746 2746 <tr><td>-X</td>
2747 2747 <td>--exclude PATTERN [+]</td>
2748 2748 <td>exclude names matching the given patterns</td></tr>
2749 2749 </table>
2750 2750 <p>
2751 2751 global options ([+] can be repeated):
2752 2752 </p>
2753 2753 <table>
2754 2754 <tr><td>-R</td>
2755 2755 <td>--repository REPO</td>
2756 2756 <td>repository root directory or name of overlay bundle file</td></tr>
2757 2757 <tr><td></td>
2758 2758 <td>--cwd DIR</td>
2759 2759 <td>change working directory</td></tr>
2760 2760 <tr><td>-y</td>
2761 2761 <td>--noninteractive</td>
2762 2762 <td>do not prompt, automatically pick the first choice for all prompts</td></tr>
2763 2763 <tr><td>-q</td>
2764 2764 <td>--quiet</td>
2765 2765 <td>suppress output</td></tr>
2766 2766 <tr><td>-v</td>
2767 2767 <td>--verbose</td>
2768 2768 <td>enable additional output</td></tr>
2769 2769 <tr><td></td>
2770 2770 <td>--color TYPE</td>
2771 2771 <td>when to colorize (boolean, always, auto, never, or debug)</td></tr>
2772 2772 <tr><td></td>
2773 2773 <td>--config CONFIG [+]</td>
2774 2774 <td>set/override config option (use 'section.name=value')</td></tr>
2775 2775 <tr><td></td>
2776 2776 <td>--debug</td>
2777 2777 <td>enable debugging output</td></tr>
2778 2778 <tr><td></td>
2779 2779 <td>--debugger</td>
2780 2780 <td>start debugger</td></tr>
2781 2781 <tr><td></td>
2782 2782 <td>--encoding ENCODE</td>
2783 2783 <td>set the charset encoding (default: ascii)</td></tr>
2784 2784 <tr><td></td>
2785 2785 <td>--encodingmode MODE</td>
2786 2786 <td>set the charset encoding mode (default: strict)</td></tr>
2787 2787 <tr><td></td>
2788 2788 <td>--traceback</td>
2789 2789 <td>always print a traceback on exception</td></tr>
2790 2790 <tr><td></td>
2791 2791 <td>--time</td>
2792 2792 <td>time how long the command takes</td></tr>
2793 2793 <tr><td></td>
2794 2794 <td>--profile</td>
2795 2795 <td>print command execution profile</td></tr>
2796 2796 <tr><td></td>
2797 2797 <td>--version</td>
2798 2798 <td>output version information and exit</td></tr>
2799 2799 <tr><td>-h</td>
2800 2800 <td>--help</td>
2801 2801 <td>display help and exit</td></tr>
2802 2802 <tr><td></td>
2803 2803 <td>--hidden</td>
2804 2804 <td>consider hidden changesets</td></tr>
2805 2805 <tr><td></td>
2806 2806 <td>--pager TYPE</td>
2807 2807 <td>when to paginate (boolean, always, auto, or never) (default: auto)</td></tr>
2808 2808 </table>
2809 2809
2810 2810 </div>
2811 2811 </div>
2812 2812 </div>
2813 2813
2814 2814
2815 2815
2816 2816 </body>
2817 2817 </html>
2818 2818
2819 2819
2820 2820 $ get-with-headers.py $LOCALIP:$HGPORT "help/dates"
2821 2821 200 Script output follows
2822 2822
2823 2823 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2824 2824 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2825 2825 <head>
2826 2826 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2827 2827 <meta name="robots" content="index, nofollow" />
2828 2828 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2829 2829 <script type="text/javascript" src="/static/mercurial.js"></script>
2830 2830
2831 2831 <title>Help: dates</title>
2832 2832 </head>
2833 2833 <body>
2834 2834
2835 2835 <div class="container">
2836 2836 <div class="menu">
2837 2837 <div class="logo">
2838 2838 <a href="https://mercurial-scm.org/">
2839 2839 <img src="/static/hglogo.png" alt="mercurial" /></a>
2840 2840 </div>
2841 2841 <ul>
2842 2842 <li><a href="/shortlog">log</a></li>
2843 2843 <li><a href="/graph">graph</a></li>
2844 2844 <li><a href="/tags">tags</a></li>
2845 2845 <li><a href="/bookmarks">bookmarks</a></li>
2846 2846 <li><a href="/branches">branches</a></li>
2847 2847 </ul>
2848 2848 <ul>
2849 2849 <li class="active"><a href="/help">help</a></li>
2850 2850 </ul>
2851 2851 </div>
2852 2852
2853 2853 <div class="main">
2854 2854 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
2855 2855 <h3>Help: dates</h3>
2856 2856
2857 2857 <form class="search" action="/log">
2858 2858
2859 2859 <p><input name="rev" id="search1" type="text" size="30" /></p>
2860 2860 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
2861 2861 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
2862 2862 </form>
2863 2863 <div id="doc">
2864 2864 <h1>Date Formats</h1>
2865 2865 <p>
2866 2866 Some commands allow the user to specify a date, e.g.:
2867 2867 </p>
2868 2868 <ul>
2869 2869 <li> backout, commit, import, tag: Specify the commit date.
2870 2870 <li> log, revert, update: Select revision(s) by date.
2871 2871 </ul>
2872 2872 <p>
2873 2873 Many date formats are valid. Here are some examples:
2874 2874 </p>
2875 2875 <ul>
2876 2876 <li> &quot;Wed Dec 6 13:18:29 2006&quot; (local timezone assumed)
2877 2877 <li> &quot;Dec 6 13:18 -0600&quot; (year assumed, time offset provided)
2878 2878 <li> &quot;Dec 6 13:18 UTC&quot; (UTC and GMT are aliases for +0000)
2879 2879 <li> &quot;Dec 6&quot; (midnight)
2880 2880 <li> &quot;13:18&quot; (today assumed)
2881 2881 <li> &quot;3:39&quot; (3:39AM assumed)
2882 2882 <li> &quot;3:39pm&quot; (15:39)
2883 2883 <li> &quot;2006-12-06 13:18:29&quot; (ISO 8601 format)
2884 2884 <li> &quot;2006-12-6 13:18&quot;
2885 2885 <li> &quot;2006-12-6&quot;
2886 2886 <li> &quot;12-6&quot;
2887 2887 <li> &quot;12/6&quot;
2888 2888 <li> &quot;12/6/6&quot; (Dec 6 2006)
2889 2889 <li> &quot;today&quot; (midnight)
2890 2890 <li> &quot;yesterday&quot; (midnight)
2891 2891 <li> &quot;now&quot; - right now
2892 2892 </ul>
2893 2893 <p>
2894 2894 Lastly, there is Mercurial's internal format:
2895 2895 </p>
2896 2896 <ul>
2897 2897 <li> &quot;1165411109 0&quot; (Wed Dec 6 13:18:29 2006 UTC)
2898 2898 </ul>
2899 2899 <p>
2900 2900 This is the internal representation format for dates. The first number
2901 2901 is the number of seconds since the epoch (1970-01-01 00:00 UTC). The
2902 2902 second is the offset of the local timezone, in seconds west of UTC
2903 2903 (negative if the timezone is east of UTC).
2904 2904 </p>
2905 2905 <p>
2906 2906 The log command also accepts date ranges:
2907 2907 </p>
2908 2908 <ul>
2909 2909 <li> &quot;&lt;DATE&quot; - at or before a given date/time
2910 2910 <li> &quot;&gt;DATE&quot; - on or after a given date/time
2911 2911 <li> &quot;DATE to DATE&quot; - a date range, inclusive
2912 2912 <li> &quot;-DAYS&quot; - within a given number of days of today
2913 2913 </ul>
2914 2914
2915 2915 </div>
2916 2916 </div>
2917 2917 </div>
2918 2918
2919 2919
2920 2920
2921 2921 </body>
2922 2922 </html>
2923 2923
2924 2924
2925 2925 Sub-topic indexes rendered properly
2926 2926
2927 2927 $ get-with-headers.py $LOCALIP:$HGPORT "help/internals"
2928 2928 200 Script output follows
2929 2929
2930 2930 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2931 2931 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
2932 2932 <head>
2933 2933 <link rel="icon" href="/static/hgicon.png" type="image/png" />
2934 2934 <meta name="robots" content="index, nofollow" />
2935 2935 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
2936 2936 <script type="text/javascript" src="/static/mercurial.js"></script>
2937 2937
2938 2938 <title>Help: internals</title>
2939 2939 </head>
2940 2940 <body>
2941 2941
2942 2942 <div class="container">
2943 2943 <div class="menu">
2944 2944 <div class="logo">
2945 2945 <a href="https://mercurial-scm.org/">
2946 2946 <img src="/static/hglogo.png" alt="mercurial" /></a>
2947 2947 </div>
2948 2948 <ul>
2949 2949 <li><a href="/shortlog">log</a></li>
2950 2950 <li><a href="/graph">graph</a></li>
2951 2951 <li><a href="/tags">tags</a></li>
2952 2952 <li><a href="/bookmarks">bookmarks</a></li>
2953 2953 <li><a href="/branches">branches</a></li>
2954 2954 </ul>
2955 2955 <ul>
2956 2956 <li><a href="/help">help</a></li>
2957 2957 </ul>
2958 2958 </div>
2959 2959
2960 2960 <div class="main">
2961 2961 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
2962 2962 <form class="search" action="/log">
2963 2963
2964 2964 <p><input name="rev" id="search1" type="text" size="30" /></p>
2965 2965 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
2966 2966 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
2967 2967 </form>
2968 2968 <table class="bigtable">
2969 2969 <tr><td colspan="2"><h2><a name="topics" href="#topics">Topics</a></h2></td></tr>
2970 2970
2971 2971 <tr><td>
2972 2972 <a href="/help/internals.bundles">
2973 2973 bundles
2974 2974 </a>
2975 2975 </td><td>
2976 2976 Bundles
2977 2977 </td></tr>
2978 2978 <tr><td>
2979 2979 <a href="/help/internals.changegroups">
2980 2980 changegroups
2981 2981 </a>
2982 2982 </td><td>
2983 2983 Changegroups
2984 2984 </td></tr>
2985 2985 <tr><td>
2986 2986 <a href="/help/internals.requirements">
2987 2987 requirements
2988 2988 </a>
2989 2989 </td><td>
2990 2990 Repository Requirements
2991 2991 </td></tr>
2992 2992 <tr><td>
2993 2993 <a href="/help/internals.revlogs">
2994 2994 revlogs
2995 2995 </a>
2996 2996 </td><td>
2997 2997 Revision Logs
2998 2998 </td></tr>
2999 2999 <tr><td>
3000 3000 <a href="/help/internals.wireprotocol">
3001 3001 wireprotocol
3002 3002 </a>
3003 3003 </td><td>
3004 3004 Wire Protocol
3005 3005 </td></tr>
3006 3006
3007 3007
3008 3008
3009 3009
3010 3010
3011 3011 </table>
3012 3012 </div>
3013 3013 </div>
3014 3014
3015 3015
3016 3016
3017 3017 </body>
3018 3018 </html>
3019 3019
3020 3020
3021 3021 Sub-topic topics rendered properly
3022 3022
3023 3023 $ get-with-headers.py $LOCALIP:$HGPORT "help/internals.changegroups"
3024 3024 200 Script output follows
3025 3025
3026 3026 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3027 3027 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
3028 3028 <head>
3029 3029 <link rel="icon" href="/static/hgicon.png" type="image/png" />
3030 3030 <meta name="robots" content="index, nofollow" />
3031 3031 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
3032 3032 <script type="text/javascript" src="/static/mercurial.js"></script>
3033 3033
3034 3034 <title>Help: internals.changegroups</title>
3035 3035 </head>
3036 3036 <body>
3037 3037
3038 3038 <div class="container">
3039 3039 <div class="menu">
3040 3040 <div class="logo">
3041 3041 <a href="https://mercurial-scm.org/">
3042 3042 <img src="/static/hglogo.png" alt="mercurial" /></a>
3043 3043 </div>
3044 3044 <ul>
3045 3045 <li><a href="/shortlog">log</a></li>
3046 3046 <li><a href="/graph">graph</a></li>
3047 3047 <li><a href="/tags">tags</a></li>
3048 3048 <li><a href="/bookmarks">bookmarks</a></li>
3049 3049 <li><a href="/branches">branches</a></li>
3050 3050 </ul>
3051 3051 <ul>
3052 3052 <li class="active"><a href="/help">help</a></li>
3053 3053 </ul>
3054 3054 </div>
3055 3055
3056 3056 <div class="main">
3057 3057 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
3058 3058 <h3>Help: internals.changegroups</h3>
3059 3059
3060 3060 <form class="search" action="/log">
3061 3061
3062 3062 <p><input name="rev" id="search1" type="text" size="30" /></p>
3063 3063 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
3064 3064 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
3065 3065 </form>
3066 3066 <div id="doc">
3067 3067 <h1>Changegroups</h1>
3068 3068 <p>
3069 3069 Changegroups are representations of repository revlog data, specifically
3070 3070 the changelog data, root/flat manifest data, treemanifest data, and
3071 3071 filelogs.
3072 3072 </p>
3073 3073 <p>
3074 3074 There are 3 versions of changegroups: &quot;1&quot;, &quot;2&quot;, and &quot;3&quot;. From a
3075 3075 high-level, versions &quot;1&quot; and &quot;2&quot; are almost exactly the same, with the
3076 3076 only difference being an additional item in the *delta header*. Version
3077 3077 &quot;3&quot; adds support for revlog flags in the *delta header* and optionally
3078 3078 exchanging treemanifests (enabled by setting an option on the
3079 3079 &quot;changegroup&quot; part in the bundle2).
3080 3080 </p>
3081 3081 <p>
3082 3082 Changegroups when not exchanging treemanifests consist of 3 logical
3083 3083 segments:
3084 3084 </p>
3085 3085 <pre>
3086 3086 +---------------------------------+
3087 3087 | | | |
3088 3088 | changeset | manifest | filelogs |
3089 3089 | | | |
3090 3090 | | | |
3091 3091 +---------------------------------+
3092 3092 </pre>
3093 3093 <p>
3094 3094 When exchanging treemanifests, there are 4 logical segments:
3095 3095 </p>
3096 3096 <pre>
3097 3097 +-------------------------------------------------+
3098 3098 | | | | |
3099 3099 | changeset | root | treemanifests | filelogs |
3100 3100 | | manifest | | |
3101 3101 | | | | |
3102 3102 +-------------------------------------------------+
3103 3103 </pre>
3104 3104 <p>
3105 3105 The principle building block of each segment is a *chunk*. A *chunk*
3106 3106 is a framed piece of data:
3107 3107 </p>
3108 3108 <pre>
3109 3109 +---------------------------------------+
3110 3110 | | |
3111 3111 | length | data |
3112 3112 | (4 bytes) | (&lt;length - 4&gt; bytes) |
3113 3113 | | |
3114 3114 +---------------------------------------+
3115 3115 </pre>
3116 3116 <p>
3117 3117 All integers are big-endian signed integers. Each chunk starts with a 32-bit
3118 3118 integer indicating the length of the entire chunk (including the length field
3119 3119 itself).
3120 3120 </p>
3121 3121 <p>
3122 3122 There is a special case chunk that has a value of 0 for the length
3123 3123 (&quot;0x00000000&quot;). We call this an *empty chunk*.
3124 3124 </p>
3125 3125 <h2>Delta Groups</h2>
3126 3126 <p>
3127 3127 A *delta group* expresses the content of a revlog as a series of deltas,
3128 3128 or patches against previous revisions.
3129 3129 </p>
3130 3130 <p>
3131 3131 Delta groups consist of 0 or more *chunks* followed by the *empty chunk*
3132 3132 to signal the end of the delta group:
3133 3133 </p>
3134 3134 <pre>
3135 3135 +------------------------------------------------------------------------+
3136 3136 | | | | | |
3137 3137 | chunk0 length | chunk0 data | chunk1 length | chunk1 data | 0x0 |
3138 3138 | (4 bytes) | (various) | (4 bytes) | (various) | (4 bytes) |
3139 3139 | | | | | |
3140 3140 +------------------------------------------------------------------------+
3141 3141 </pre>
3142 3142 <p>
3143 3143 Each *chunk*'s data consists of the following:
3144 3144 </p>
3145 3145 <pre>
3146 3146 +---------------------------------------+
3147 3147 | | |
3148 3148 | delta header | delta data |
3149 3149 | (various by version) | (various) |
3150 3150 | | |
3151 3151 +---------------------------------------+
3152 3152 </pre>
3153 3153 <p>
3154 3154 The *delta data* is a series of *delta*s that describe a diff from an existing
3155 3155 entry (either that the recipient already has, or previously specified in the
3156 3156 bundlei/changegroup).
3157 3157 </p>
3158 3158 <p>
3159 3159 The *delta header* is different between versions &quot;1&quot;, &quot;2&quot;, and
3160 3160 &quot;3&quot; of the changegroup format.
3161 3161 </p>
3162 3162 <p>
3163 3163 Version 1 (headerlen=80):
3164 3164 </p>
3165 3165 <pre>
3166 3166 +------------------------------------------------------+
3167 3167 | | | | |
3168 3168 | node | p1 node | p2 node | link node |
3169 3169 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
3170 3170 | | | | |
3171 3171 +------------------------------------------------------+
3172 3172 </pre>
3173 3173 <p>
3174 3174 Version 2 (headerlen=100):
3175 3175 </p>
3176 3176 <pre>
3177 3177 +------------------------------------------------------------------+
3178 3178 | | | | | |
3179 3179 | node | p1 node | p2 node | base node | link node |
3180 3180 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) |
3181 3181 | | | | | |
3182 3182 +------------------------------------------------------------------+
3183 3183 </pre>
3184 3184 <p>
3185 3185 Version 3 (headerlen=102):
3186 3186 </p>
3187 3187 <pre>
3188 3188 +------------------------------------------------------------------------------+
3189 3189 | | | | | | |
3190 3190 | node | p1 node | p2 node | base node | link node | flags |
3191 3191 | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (20 bytes) | (2 bytes) |
3192 3192 | | | | | | |
3193 3193 +------------------------------------------------------------------------------+
3194 3194 </pre>
3195 3195 <p>
3196 3196 The *delta data* consists of &quot;chunklen - 4 - headerlen&quot; bytes, which contain a
3197 3197 series of *delta*s, densely packed (no separators). These deltas describe a diff
3198 3198 from an existing entry (either that the recipient already has, or previously
3199 3199 specified in the bundle/changegroup). The format is described more fully in
3200 3200 &quot;hg help internals.bdiff&quot;, but briefly:
3201 3201 </p>
3202 <p>
3202 <pre>
3203 3203 +---------------------------------------------------------------+
3204 3204 | | | | |
3205 3205 | start offset | end offset | new length | content |
3206 3206 | (4 bytes) | (4 bytes) | (4 bytes) | (&lt;new length&gt; bytes) |
3207 3207 | | | | |
3208 3208 +---------------------------------------------------------------+
3209 </p>
3209 </pre>
3210 3210 <p>
3211 3211 Please note that the length field in the delta data does *not* include itself.
3212 3212 </p>
3213 3213 <p>
3214 3214 In version 1, the delta is always applied against the previous node from
3215 3215 the changegroup or the first parent if this is the first entry in the
3216 3216 changegroup.
3217 3217 </p>
3218 3218 <p>
3219 3219 In version 2 and up, the delta base node is encoded in the entry in the
3220 3220 changegroup. This allows the delta to be expressed against any parent,
3221 3221 which can result in smaller deltas and more efficient encoding of data.
3222 3222 </p>
3223 3223 <h2>Changeset Segment</h2>
3224 3224 <p>
3225 3225 The *changeset segment* consists of a single *delta group* holding
3226 3226 changelog data. The *empty chunk* at the end of the *delta group* denotes
3227 3227 the boundary to the *manifest segment*.
3228 3228 </p>
3229 3229 <h2>Manifest Segment</h2>
3230 3230 <p>
3231 3231 The *manifest segment* consists of a single *delta group* holding manifest
3232 3232 data. If treemanifests are in use, it contains only the manifest for the
3233 3233 root directory of the repository. Otherwise, it contains the entire
3234 3234 manifest data. The *empty chunk* at the end of the *delta group* denotes
3235 3235 the boundary to the next segment (either the *treemanifests segment* or the
3236 3236 *filelogs segment*, depending on version and the request options).
3237 3237 </p>
3238 3238 <h3>Treemanifests Segment</h3>
3239 3239 <p>
3240 3240 The *treemanifests segment* only exists in changegroup version &quot;3&quot;, and
3241 3241 only if the 'treemanifest' param is part of the bundle2 changegroup part
3242 3242 (it is not possible to use changegroup version 3 outside of bundle2).
3243 3243 Aside from the filenames in the *treemanifests segment* containing a
3244 3244 trailing &quot;/&quot; character, it behaves identically to the *filelogs segment*
3245 3245 (see below). The final sub-segment is followed by an *empty chunk* (logically,
3246 3246 a sub-segment with filename size 0). This denotes the boundary to the
3247 3247 *filelogs segment*.
3248 3248 </p>
3249 3249 <h2>Filelogs Segment</h2>
3250 3250 <p>
3251 3251 The *filelogs segment* consists of multiple sub-segments, each
3252 3252 corresponding to an individual file whose data is being described:
3253 3253 </p>
3254 3254 <pre>
3255 3255 +--------------------------------------------------+
3256 3256 | | | | | |
3257 3257 | filelog0 | filelog1 | filelog2 | ... | 0x0 |
3258 3258 | | | | | (4 bytes) |
3259 3259 | | | | | |
3260 3260 +--------------------------------------------------+
3261 3261 </pre>
3262 3262 <p>
3263 3263 The final filelog sub-segment is followed by an *empty chunk* (logically,
3264 3264 a sub-segment with filename size 0). This denotes the end of the segment
3265 3265 and of the overall changegroup.
3266 3266 </p>
3267 3267 <p>
3268 3268 Each filelog sub-segment consists of the following:
3269 3269 </p>
3270 3270 <pre>
3271 3271 +------------------------------------------------------+
3272 3272 | | | |
3273 3273 | filename length | filename | delta group |
3274 3274 | (4 bytes) | (&lt;length - 4&gt; bytes) | (various) |
3275 3275 | | | |
3276 3276 +------------------------------------------------------+
3277 3277 </pre>
3278 3278 <p>
3279 3279 That is, a *chunk* consisting of the filename (not terminated or padded)
3280 3280 followed by N chunks constituting the *delta group* for this file. The
3281 3281 *empty chunk* at the end of each *delta group* denotes the boundary to the
3282 3282 next filelog sub-segment.
3283 3283 </p>
3284 3284
3285 3285 </div>
3286 3286 </div>
3287 3287 </div>
3288 3288
3289 3289
3290 3290
3291 3291 </body>
3292 3292 </html>
3293 3293
3294 3294
3295 3295 $ killdaemons.py
3296 3296
3297 3297 #endif
General Comments 0
You need to be logged in to leave comments. Login now