135
|
1 # help.py - help data for mercurial
|
|
2 #
|
|
3 # Copyright 2006 Matt Mackall <mpm@selenic.com>
|
|
4 #
|
|
5 # This software may be used and distributed according to the terms of the
|
|
6 # GNU General Public License version 2, incorporated herein by reference.
|
|
7
|
|
8 from i18n import _
|
|
9 import extensions, util
|
|
10
|
|
11
|
|
12 def moduledoc(file):
|
|
13 '''return the top-level python documentation for the given file
|
|
14
|
|
15 Loosely inspired by pydoc.source_synopsis(), but rewritten to handle \'''
|
|
16 as well as """ and to return the whole text instead of just the synopsis'''
|
|
17 result = []
|
|
18
|
|
19 line = file.readline()
|
|
20 while line[:1] == '#' or not line.strip():
|
|
21 line = file.readline()
|
|
22 if not line: break
|
|
23
|
|
24 start = line[:3]
|
|
25 if start == '"""' or start == "'''":
|
|
26 line = line[3:]
|
|
27 while line:
|
|
28 if line.rstrip().endswith(start):
|
|
29 line = line.split(start)[0]
|
|
30 if line:
|
|
31 result.append(line)
|
|
32 break
|
|
33 elif not line:
|
|
34 return None # unmatched delimiter
|
|
35 result.append(line)
|
|
36 line = file.readline()
|
|
37 else:
|
|
38 return None
|
|
39
|
|
40 return ''.join(result)
|
|
41
|
|
42 def listexts(header, exts, maxlength):
|
|
43 '''return a text listing of the given extensions'''
|
|
44 if not exts:
|
|
45 return ''
|
|
46 result = '\n%s\n\n' % header
|
|
47 for name, desc in sorted(exts.iteritems()):
|
|
48 desc = util.wrap(desc, maxlength + 4)
|
|
49 result += ' %s %s\n' % (name.ljust(maxlength), desc)
|
|
50 return result
|
|
51
|
|
52 def extshelp():
|
|
53 doc = _(r'''
|
|
54 Mercurial has the ability to add new features through the use of
|
|
55 extensions. Extensions may add new commands, add options to
|
|
56 existing commands, change the default behavior of commands, or
|
|
57 implement hooks.
|
|
58
|
|
59 Extensions are not loaded by default for a variety of reasons:
|
|
60 they can increase startup overhead; they may be meant for
|
|
61 advanced usage only; they may provide potentially dangerous
|
|
62 abilities (such as letting you destroy or modify history); they
|
|
63 might not be ready for prime time; or they may alter some
|
|
64 usual behaviors of stock Mercurial. It is thus up to the user to
|
|
65 activate extensions as needed.
|
|
66
|
|
67 To enable the "foo" extension, either shipped with Mercurial
|
|
68 or in the Python search path, create an entry for it in your
|
|
69 hgrc, like this:
|
|
70
|
|
71 [extensions]
|
|
72 foo =
|
|
73
|
|
74 You may also specify the full path to an extension:
|
|
75
|
|
76 [extensions]
|
|
77 myfeature = ~/.hgext/myfeature.py
|
|
78
|
|
79 To explicitly disable an extension enabled in an hgrc of broader
|
|
80 scope, prepend its path with !:
|
|
81
|
|
82 [extensions]
|
|
83 # disabling extension bar residing in /path/to/extension/bar.py
|
|
84 hgext.bar = !/path/to/extension/bar.py
|
|
85 # ditto, but no path was supplied for extension baz
|
|
86 hgext.baz = !
|
|
87 ''')
|
|
88
|
|
89 exts, maxlength = extensions.enabled()
|
|
90 doc += listexts(_('enabled extensions:'), exts, maxlength)
|
|
91
|
|
92 exts, maxlength = extensions.disabled()
|
|
93 doc += listexts(_('disabled extensions:'), exts, maxlength)
|
|
94
|
|
95 return doc
|
|
96
|
|
97 helptable = (
|
|
98 (["dates"], _("Date Formats"),
|
|
99 _(r'''
|
|
100 Some commands allow the user to specify a date, e.g.:
|
|
101 * backout, commit, import, tag: Specify the commit date.
|
|
102 * log, revert, update: Select revision(s) by date.
|
|
103
|
|
104 Many date formats are valid. Here are some examples:
|
|
105
|
|
106 "Wed Dec 6 13:18:29 2006" (local timezone assumed)
|
|
107 "Dec 6 13:18 -0600" (year assumed, time offset provided)
|
|
108 "Dec 6 13:18 UTC" (UTC and GMT are aliases for +0000)
|
|
109 "Dec 6" (midnight)
|
|
110 "13:18" (today assumed)
|
|
111 "3:39" (3:39AM assumed)
|
|
112 "3:39pm" (15:39)
|
|
113 "2006-12-06 13:18:29" (ISO 8601 format)
|
|
114 "2006-12-6 13:18"
|
|
115 "2006-12-6"
|
|
116 "12-6"
|
|
117 "12/6"
|
|
118 "12/6/6" (Dec 6 2006)
|
|
119
|
|
120 Lastly, there is Mercurial's internal format:
|
|
121
|
|
122 "1165432709 0" (Wed Dec 6 13:18:29 2006 UTC)
|
|
123
|
|
124 This is the internal representation format for dates. unixtime is
|
|
125 the number of seconds since the epoch (1970-01-01 00:00 UTC).
|
|
126 offset is the offset of the local timezone, in seconds west of UTC
|
|
127 (negative if the timezone is east of UTC).
|
|
128
|
|
129 The log command also accepts date ranges:
|
|
130
|
|
131 "<{datetime}" - at or before a given date/time
|
|
132 ">{datetime}" - on or after a given date/time
|
|
133 "{datetime} to {datetime}" - a date range, inclusive
|
|
134 "-{days}" - within a given number of days of today
|
|
135 ''')),
|
|
136
|
|
137 (["patterns"], _("File Name Patterns"),
|
|
138 _(r'''
|
|
139 Mercurial accepts several notations for identifying one or more
|
|
140 files at a time.
|
|
141
|
|
142 By default, Mercurial treats filenames as shell-style extended
|
|
143 glob patterns.
|
|
144
|
|
145 Alternate pattern notations must be specified explicitly.
|
|
146
|
|
147 To use a plain path name without any pattern matching, start it
|
|
148 with "path:". These path names must completely match starting at
|
|
149 the current repository root.
|
|
150
|
|
151 To use an extended glob, start a name with "glob:". Globs are
|
|
152 rooted at the current directory; a glob such as "*.c" will only
|
|
153 match files in the current directory ending with ".c".
|
|
154
|
|
155 The supported glob syntax extensions are "**" to match any string
|
|
156 across path separators and "{a,b}" to mean "a or b".
|
|
157
|
|
158 To use a Perl/Python regular expression, start a name with "re:".
|
|
159 Regexp pattern matching is anchored at the root of the repository.
|
|
160
|
|
161 Plain examples:
|
|
162
|
|
163 path:foo/bar a name bar in a directory named foo in the root of
|
|
164 the repository
|
|
165 path:path:name a file or directory named "path:name"
|
|
166
|
|
167 Glob examples:
|
|
168
|
|
169 glob:*.c any name ending in ".c" in the current directory
|
|
170 *.c any name ending in ".c" in the current directory
|
|
171 **.c any name ending in ".c" in any subdirectory of the
|
|
172 current directory including itself.
|
|
173 foo/*.c any name ending in ".c" in the directory foo
|
|
174 foo/**.c any name ending in ".c" in any subdirectory of foo
|
|
175 including itself.
|
|
176
|
|
177 Regexp examples:
|
|
178
|
|
179 re:.*\.c$ any name ending in ".c", anywhere in the repository
|
|
180
|
|
181 ''')),
|
|
182
|
|
183 (['environment', 'env'], _('Environment Variables'),
|
|
184 _(r'''
|
|
185 HG::
|
|
186 Path to the 'hg' executable, automatically passed when running
|
|
187 hooks, extensions or external tools. If unset or empty, this is
|
|
188 the hg executable's name if it's frozen, or an executable named
|
|
189 'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on
|
|
190 Windows) is searched.
|
|
191
|
|
192 HGEDITOR::
|
|
193 This is the name of the editor to run when committing. See EDITOR.
|
|
194
|
|
195 (deprecated, use .hgrc)
|
|
196
|
|
197 HGENCODING::
|
|
198 This overrides the default locale setting detected by Mercurial.
|
|
199 This setting is used to convert data including usernames,
|
|
200 changeset descriptions, tag names, and branches. This setting can
|
|
201 be overridden with the --encoding command-line option.
|
|
202
|
|
203 HGENCODINGMODE::
|
|
204 This sets Mercurial's behavior for handling unknown characters
|
|
205 while transcoding user input. The default is "strict", which
|
|
206 causes Mercurial to abort if it can't map a character. Other
|
|
207 settings include "replace", which replaces unknown characters, and
|
|
208 "ignore", which drops them. This setting can be overridden with
|
|
209 the --encodingmode command-line option.
|
|
210
|
|
211 HGMERGE::
|
|
212 An executable to use for resolving merge conflicts. The program
|
|
213 will be executed with three arguments: local file, remote file,
|
|
214 ancestor file.
|
|
215
|
|
216 (deprecated, use .hgrc)
|
|
217
|
|
218 HGRCPATH::
|
|
219 A list of files or directories to search for hgrc files. Item
|
|
220 separator is ":" on Unix, ";" on Windows. If HGRCPATH is not set,
|
|
221 platform default search path is used. If empty, only the .hg/hgrc
|
|
222 from the current repository is read.
|
|
223
|
|
224 For each element in HGRCPATH:
|
|
225 * if it's a directory, all files ending with .rc are added
|
|
226 * otherwise, the file itself will be added
|
|
227
|
|
228 HGUSER::
|
|
229 This is the string used as the author of a commit. If not set,
|
|
230 available values will be considered in this order:
|
|
231
|
|
232 * HGUSER (deprecated)
|
|
233 * hgrc files from the HGRCPATH
|
|
234 * EMAIL
|
|
235 * interactive prompt
|
|
236 * LOGNAME (with '@hostname' appended)
|
|
237
|
|
238 (deprecated, use .hgrc)
|
|
239
|
|
240 EMAIL::
|
|
241 May be used as the author of a commit; see HGUSER.
|
|
242
|
|
243 LOGNAME::
|
|
244 May be used as the author of a commit; see HGUSER.
|
|
245
|
|
246 VISUAL::
|
|
247 This is the name of the editor to use when committing. See EDITOR.
|
|
248
|
|
249 EDITOR::
|
|
250 Sometimes Mercurial needs to open a text file in an editor for a
|
|
251 user to modify, for example when writing commit messages. The
|
|
252 editor it uses is determined by looking at the environment
|
|
253 variables HGEDITOR, VISUAL and EDITOR, in that order. The first
|
|
254 non-empty one is chosen. If all of them are empty, the editor
|
|
255 defaults to 'vi'.
|
|
256
|
|
257 PYTHONPATH::
|
|
258 This is used by Python to find imported modules and may need to be
|
|
259 set appropriately if this Mercurial is not installed system-wide.
|
|
260 ''')),
|
|
261
|
|
262 (['revs', 'revisions'], _('Specifying Single Revisions'),
|
|
263 _(r'''
|
|
264 Mercurial supports several ways to specify individual revisions.
|
|
265
|
|
266 A plain integer is treated as a revision number. Negative integers
|
|
267 are treated as topological offsets from the tip, with -1 denoting
|
|
268 the tip. As such, negative numbers are only useful if you've
|
|
269 memorized your local tree numbers and want to save typing a single
|
|
270 digit. This editor suggests copy and paste.
|
|
271
|
|
272 A 40-digit hexadecimal string is treated as a unique revision
|
|
273 identifier.
|
|
274
|
|
275 A hexadecimal string less than 40 characters long is treated as a
|
|
276 unique revision identifier, and referred to as a short-form
|
|
277 identifier. A short-form identifier is only valid if it is the
|
|
278 prefix of exactly one full-length identifier.
|
|
279
|
|
280 Any other string is treated as a tag name, which is a symbolic
|
|
281 name associated with a revision identifier. Tag names may not
|
|
282 contain the ":" character.
|
|
283
|
|
284 The reserved name "tip" is a special tag that always identifies
|
|
285 the most recent revision.
|
|
286
|
|
287 The reserved name "null" indicates the null revision. This is the
|
|
288 revision of an empty repository, and the parent of revision 0.
|
|
289
|
|
290 The reserved name "." indicates the working directory parent. If
|
|
291 no working directory is checked out, it is equivalent to null. If
|
|
292 an uncommitted merge is in progress, "." is the revision of the
|
|
293 first parent.
|
|
294 ''')),
|
|
295
|
|
296 (['mrevs', 'multirevs'], _('Specifying Multiple Revisions'),
|
|
297 _(r'''
|
|
298 When Mercurial accepts more than one revision, they may be
|
|
299 specified individually, or provided as a topologically continuous
|
|
300 range, separated by the ":" character.
|
|
301
|
|
302 The syntax of range notation is [BEGIN]:[END], where BEGIN and END
|
|
303 are revision identifiers. Both BEGIN and END are optional. If
|
|
304 BEGIN is not specified, it defaults to revision number 0. If END
|
|
305 is not specified, it defaults to the tip. The range ":" thus means
|
|
306 "all revisions".
|
|
307
|
|
308 If BEGIN is greater than END, revisions are treated in reverse
|
|
309 order.
|
|
310
|
|
311 A range acts as a closed interval. This means that a range of 3:5
|
|
312 gives 3, 4 and 5. Similarly, a range of 9:6 gives 9, 8, 7, and 6.
|
|
313 ''')),
|
|
314
|
|
315 (['diffs'], _('Diff Formats'),
|
|
316 _(r'''
|
|
317 Mercurial's default format for showing changes between two
|
|
318 versions of a file is compatible with the unified format of GNU
|
|
319 diff, which can be used by GNU patch and many other standard
|
|
320 tools.
|
|
321
|
|
322 While this standard format is often enough, it does not encode the
|
|
323 following information:
|
|
324
|
|
325 - executable status and other permission bits
|
|
326 - copy or rename information
|
|
327 - changes in binary files
|
|
328 - creation or deletion of empty files
|
|
329
|
|
330 Mercurial also supports the extended diff format from the git VCS
|
|
331 which addresses these limitations. The git diff format is not
|
|
332 produced by default because a few widespread tools still do not
|
|
333 understand this format.
|
|
334
|
|
335 This means that when generating diffs from a Mercurial repository
|
|
336 (e.g. with "hg export"), you should be careful about things like
|
|
337 file copies and renames or other things mentioned above, because
|
|
338 when applying a standard diff to a different repository, this
|
|
339 extra information is lost. Mercurial's internal operations (like
|
|
340 push and pull) are not affected by this, because they use an
|
|
341 internal binary format for communicating changes.
|
|
342
|
|
343 To make Mercurial produce the git extended diff format, use the
|
|
344 --git option available for many commands, or set 'git = True' in
|
|
345 the [diff] section of your hgrc. You do not need to set this
|
|
346 option when importing diffs in this format or using them in the mq
|
|
347 extension.
|
|
348 ''')),
|
|
349 (['templating'], _('Template Usage'),
|
|
350 _(r'''
|
|
351 Mercurial allows you to customize output of commands through
|
|
352 templates. You can either pass in a template from the command
|
|
353 line, via the --template option, or select an existing
|
|
354 template-style (--style).
|
|
355
|
|
356 You can customize output for any "log-like" command: log,
|
|
357 outgoing, incoming, tip, parents, heads and glog.
|
|
358
|
|
359 Three styles are packaged with Mercurial: default (the style used
|
|
360 when no explicit preference is passed), compact and changelog.
|
|
361 Usage:
|
|
362
|
|
363 $ hg log -r1 --style changelog
|
|
364
|
|
365 A template is a piece of text, with markup to invoke variable
|
|
366 expansion:
|
|
367
|
|
368 $ hg log -r1 --template "{node}\n"
|
|
369 b56ce7b07c52de7d5fd79fb89701ea538af65746
|
|
370
|
|
371 Strings in curly braces are called keywords. The availability of
|
|
372 keywords depends on the exact context of the templater. These
|
|
373 keywords are usually available for templating a log-like command:
|
|
374
|
|
375 - author: String. The unmodified author of the changeset.
|
|
376 - branches: String. The name of the branch on which the changeset
|
|
377 was committed. Will be empty if the branch name was default.
|
|
378 - date: Date information. The date when the changeset was committed.
|
|
379 - desc: String. The text of the changeset description.
|
|
380 - diffstat: String. Statistics of changes with the following
|
|
381 format: "modified files: +added/-removed lines"
|
|
382 - files: List of strings. All files modified, added, or removed by
|
|
383 this changeset.
|
|
384 - file_adds: List of strings. Files added by this changeset.
|
|
385 - file_mods: List of strings. Files modified by this changeset.
|
|
386 - file_dels: List of strings. Files removed by this changeset.
|
|
387 - node: String. The changeset identification hash, as a
|
|
388 40-character hexadecimal string.
|
|
389 - parents: List of strings. The parents of the changeset.
|
|
390 - rev: Integer. The repository-local changeset revision number.
|
|
391 - tags: List of strings. Any tags associated with the changeset.
|
|
392
|
|
393 The "date" keyword does not produce human-readable output. If you
|
|
394 want to use a date in your output, you can use a filter to process
|
|
395 it. Filters are functions which return a string based on the input
|
|
396 variable. You can also use a chain of filters to get the desired
|
|
397 output:
|
|
398
|
|
399 $ hg tip --template "{date|isodate}\n"
|
|
400 2008-08-21 18:22 +0000
|
|
401
|
|
402 List of filters:
|
|
403
|
|
404 - addbreaks: Any text. Add an XHTML "<br />" tag before the end of
|
|
405 every line except the last.
|
|
406 - age: Date. Returns a human-readable date/time difference between
|
|
407 the given date/time and the current date/time.
|
|
408 - basename: Any text. Treats the text as a path, and returns the
|
|
409 last component of the path after splitting by the path
|
|
410 separator (ignoring trailing separators). For example,
|
|
411 "foo/bar/baz" becomes "baz" and "foo/bar//" becomes "bar".
|
|
412 - stripdir: Treat the text as path and strip a directory level, if
|
|
413 possible. For example, "foo" and "foo/bar" becomes "foo".
|
|
414 - date: Date. Returns a date in a Unix date format, including
|
|
415 the timezone: "Mon Sep 04 15:13:13 2006 0700".
|
|
416 - domain: Any text. Finds the first string that looks like an
|
|
417 email address, and extracts just the domain component.
|
|
418 Example: 'User <user@example.com>' becomes 'example.com'.
|
|
419 - email: Any text. Extracts the first string that looks like an
|
|
420 email address. Example: 'User <user@example.com>' becomes
|
|
421 'user@example.com'.
|
|
422 - escape: Any text. Replaces the special XML/XHTML characters "&",
|
|
423 "<" and ">" with XML entities.
|
|
424 - fill68: Any text. Wraps the text to fit in 68 columns.
|
|
425 - fill76: Any text. Wraps the text to fit in 76 columns.
|
|
426 - firstline: Any text. Returns the first line of text.
|
|
427 - nonempty: Any text. Returns '(none)' if the string is empty.
|
|
428 - hgdate: Date. Returns the date as a pair of numbers:
|
|
429 "1157407993 25200" (Unix timestamp, timezone offset).
|
|
430 - isodate: Date. Returns the date in ISO 8601 format.
|
|
431 - localdate: Date. Converts a date to local date.
|
|
432 - obfuscate: Any text. Returns the input text rendered as a
|
|
433 sequence of XML entities.
|
|
434 - person: Any text. Returns the text before an email address.
|
|
435 - rfc822date: Date. Returns a date using the same format used
|
|
436 in email headers.
|
|
437 - short: Changeset hash. Returns the short form of a changeset
|
|
438 hash, i.e. a 12-byte hexadecimal string.
|
|
439 - shortdate: Date. Returns a date like "2006-09-18".
|
|
440 - strip: Any text. Strips all leading and trailing whitespace.
|
|
441 - tabindent: Any text. Returns the text, with every line except
|
|
442 the first starting with a tab character.
|
|
443 - urlescape: Any text. Escapes all "special" characters. For
|
|
444 example, "foo bar" becomes "foo%20bar".
|
|
445 - user: Any text. Returns the user portion of an email address.
|
|
446 ''')),
|
|
447
|
|
448 (['urls'], _('URL Paths'),
|
|
449 _(r'''
|
|
450 Valid URLs are of the form:
|
|
451
|
|
452 local/filesystem/path[#revision]
|
|
453 file://local/filesystem/path[#revision]
|
|
454 http://[user[:pass]@]host[:port]/[path][#revision]
|
|
455 https://[user[:pass]@]host[:port]/[path][#revision]
|
|
456 ssh://[user[:pass]@]host[:port]/[path][#revision]
|
|
457
|
|
458 Paths in the local filesystem can either point to Mercurial
|
|
459 repositories or to bundle files (as created by 'hg bundle' or
|
|
460 'hg incoming --bundle').
|
|
461
|
|
462 An optional identifier after # indicates a particular branch, tag,
|
|
463 or changeset to use from the remote repository. See also 'hg help
|
|
464 revisions'.
|
|
465
|
|
466 Some features, such as pushing to http:// and https:// URLs are
|
|
467 only possible if the feature is explicitly enabled on the remote
|
|
468 Mercurial server.
|
|
469
|
|
470 Some notes about using SSH with Mercurial:
|
|
471 - SSH requires an accessible shell account on the destination
|
|
472 machine and a copy of hg in the remote path or specified with as
|
|
473 remotecmd.
|
|
474 - path is relative to the remote user's home directory by default.
|
|
475 Use an extra slash at the start of a path to specify an absolute path:
|
|
476 ssh://example.com//tmp/repository
|
|
477 - Mercurial doesn't use its own compression via SSH; the right
|
|
478 thing to do is to configure it in your ~/.ssh/config, e.g.:
|
|
479 Host *.mylocalnetwork.example.com
|
|
480 Compression no
|
|
481 Host *
|
|
482 Compression yes
|
|
483 Alternatively specify "ssh -C" as your ssh command in your hgrc
|
|
484 or with the --ssh command line option.
|
|
485
|
|
486 These URLs can all be stored in your hgrc with path aliases under
|
|
487 the [paths] section like so:
|
|
488 [paths]
|
|
489 alias1 = URL1
|
|
490 alias2 = URL2
|
|
491 ...
|
|
492
|
|
493 You can then use the alias for any command that uses a URL (for
|
|
494 example 'hg pull alias1' would pull from the 'alias1' path).
|
|
495
|
|
496 Two path aliases are special because they are used as defaults
|
|
497 when you do not provide the URL to a command:
|
|
498
|
|
499 default:
|
|
500 When you create a repository with hg clone, the clone command
|
|
501 saves the location of the source repository as the new
|
|
502 repository's 'default' path. This is then used when you omit
|
|
503 path from push- and pull-like commands (including incoming and
|
|
504 outgoing).
|
|
505
|
|
506 default-push:
|
|
507 The push command will look for a path named 'default-push', and
|
|
508 prefer it over 'default' if both are defined.
|
|
509 ''')),
|
|
510 (["extensions"], _("Using additional features"), extshelp),
|
|
511 )
|