Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/help.py @ 9539:c904e76e3834
help: move help topics from mercurial/help.py to help/*.txt
The help topics are loaded on demand so we wont hit the disk unless we
really have to.
author | Martin Geisler <mg@lazybytes.net> |
---|---|
date | Sun, 04 Oct 2009 09:59:13 +0200 |
parents | f04d17912441 |
children | e2b1de5fee04 |
comparison
equal
deleted
inserted
replaced
9538:f96ee862aba0 | 9539:c904e76e3834 |
---|---|
3 # Copyright 2006 Matt Mackall <mpm@selenic.com> | 3 # Copyright 2006 Matt Mackall <mpm@selenic.com> |
4 # | 4 # |
5 # This software may be used and distributed according to the terms of the | 5 # This software may be used and distributed according to the terms of the |
6 # GNU General Public License version 2, incorporated herein by reference. | 6 # GNU General Public License version 2, incorporated herein by reference. |
7 | 7 |
8 from i18n import _ | 8 from i18n import gettext, _ |
9 import sys, os | |
9 import extensions, util | 10 import extensions, util |
10 | 11 |
11 | 12 |
12 def moduledoc(file): | 13 def moduledoc(file): |
13 '''return the top-level python documentation for the given file | 14 '''return the top-level python documentation for the given file |
47 for name, desc in sorted(exts.iteritems()): | 48 for name, desc in sorted(exts.iteritems()): |
48 result += ' %-*s %s\n' % (maxlength + 2, ':%s:' % name, desc) | 49 result += ' %-*s %s\n' % (maxlength + 2, ':%s:' % name, desc) |
49 return result | 50 return result |
50 | 51 |
51 def extshelp(): | 52 def extshelp(): |
52 doc = _(r''' | 53 doc = loaddoc('extensions')() |
53 Mercurial has the ability to add new features through the use of | |
54 extensions. Extensions may add new commands, add options to | |
55 existing commands, change the default behavior of commands, or | |
56 implement hooks. | |
57 | |
58 Extensions are not loaded by default for a variety of reasons: | |
59 they can increase startup overhead; they may be meant for advanced | |
60 usage only; they may provide potentially dangerous abilities (such | |
61 as letting you destroy or modify history); they might not be ready | |
62 for prime time; or they may alter some usual behaviors of stock | |
63 Mercurial. It is thus up to the user to activate extensions as | |
64 needed. | |
65 | |
66 To enable the "foo" extension, either shipped with Mercurial or in | |
67 the Python search path, create an entry for it in your hgrc, like | |
68 this:: | |
69 | |
70 [extensions] | |
71 foo = | |
72 | |
73 You may also specify the full path to an extension:: | |
74 | |
75 [extensions] | |
76 myfeature = ~/.hgext/myfeature.py | |
77 | |
78 To explicitly disable an extension enabled in an hgrc of broader | |
79 scope, prepend its path with !:: | |
80 | |
81 [extensions] | |
82 # disabling extension bar residing in /path/to/extension/bar.py | |
83 hgext.bar = !/path/to/extension/bar.py | |
84 # ditto, but no path was supplied for extension baz | |
85 hgext.baz = ! | |
86 ''') | |
87 | 54 |
88 exts, maxlength = extensions.enabled() | 55 exts, maxlength = extensions.enabled() |
89 doc += listexts(_('enabled extensions:'), exts, maxlength) | 56 doc += listexts(_('enabled extensions:'), exts, maxlength) |
90 | 57 |
91 exts, maxlength = extensions.disabled() | 58 exts, maxlength = extensions.disabled() |
92 doc += listexts(_('disabled extensions:'), exts, maxlength) | 59 doc += listexts(_('disabled extensions:'), exts, maxlength) |
93 | 60 |
94 return doc | 61 return doc |
95 | 62 |
63 def loaddoc(topic): | |
64 """Return a delayed loader for help/topic.txt.""" | |
65 | |
66 def loader(): | |
67 if hasattr(sys, 'frozen'): | |
68 module = sys.executable | |
69 else: | |
70 module = __file__ | |
71 base = os.path.dirname(module) | |
72 | |
73 for dir in ('.', '..'): | |
74 docdir = os.path.join(base, dir, 'help') | |
75 if os.path.isdir(docdir): | |
76 break | |
77 | |
78 path = os.path.join(docdir, topic + ".txt") | |
79 return gettext(open(path).read()) | |
80 return loader | |
81 | |
96 helptable = ( | 82 helptable = ( |
97 (["dates"], _("Date Formats"), | 83 (["dates"], _("Date Formats"), loaddoc('dates')), |
98 _(r''' | 84 (["patterns"], _("File Name Patterns"), loaddoc('patterns')), |
99 Some commands allow the user to specify a date, e.g.: | 85 (['environment', 'env'], _('Environment Variables'), loaddoc('environment')), |
100 | 86 (['revs', 'revisions'], _('Specifying Single Revisions'), loaddoc('revisions')), |
101 - backout, commit, import, tag: Specify the commit date. | 87 (['mrevs', 'multirevs'], _('Specifying Multiple Revisions'), loaddoc('multirevs')), |
102 - log, revert, update: Select revision(s) by date. | 88 (['diffs'], _('Diff Formats'), loaddoc('diffs')), |
103 | 89 (['templating', 'templates'], _('Template Usage'), loaddoc('templates')), |
104 Many date formats are valid. Here are some examples:: | 90 (['urls'], _('URL Paths'), loaddoc('urls')), |
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 | |
153 only match files in the current directory ending with ".c". | |
154 | |
155 The supported glob syntax extensions are "``**``" to match any | |
156 string 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 | |
164 of 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 | |
226 - if it's a directory, all files ending with .rc are added | |
227 - otherwise, the file itself will be added | |
228 | |
229 HGUSER | |
230 This is the string used as the author of a commit. If not set, | |
231 available values will be considered in this order: | |
232 | |
233 - HGUSER (deprecated) | |
234 - hgrc files from the HGRCPATH | |
235 - EMAIL | |
236 - interactive prompt | |
237 - LOGNAME (with '@hostname' appended) | |
238 | |
239 (deprecated, use .hgrc) | |
240 | |
241 EMAIL | |
242 May be used as the author of a commit; see HGUSER. | |
243 | |
244 LOGNAME | |
245 May be used as the author of a commit; see HGUSER. | |
246 | |
247 VISUAL | |
248 This is the name of the editor to use when committing. See EDITOR. | |
249 | |
250 EDITOR | |
251 Sometimes Mercurial needs to open a text file in an editor for a | |
252 user to modify, for example when writing commit messages. The | |
253 editor it uses is determined by looking at the environment | |
254 variables HGEDITOR, VISUAL and EDITOR, in that order. The first | |
255 non-empty one is chosen. If all of them are empty, the editor | |
256 defaults to 'vi'. | |
257 | |
258 PYTHONPATH | |
259 This is used by Python to find imported modules and may need to be | |
260 set appropriately if this Mercurial is not installed system-wide. | |
261 ''')), | |
262 | |
263 (['revs', 'revisions'], _('Specifying Single Revisions'), | |
264 _(r''' | |
265 Mercurial supports several ways to specify individual revisions. | |
266 | |
267 A plain integer is treated as a revision number. Negative integers | |
268 are treated as sequential offsets from the tip, with -1 denoting | |
269 the tip, -2 denoting the revision prior to the tip, and so forth. | |
270 | |
271 A 40-digit hexadecimal string is treated as a unique revision | |
272 identifier. | |
273 | |
274 A hexadecimal string less than 40 characters long is treated as a | |
275 unique revision identifier and is referred to as a short-form | |
276 identifier. A short-form identifier is only valid if it is the | |
277 prefix of exactly one full-length identifier. | |
278 | |
279 Any other string is treated as a tag or branch name. A tag name is | |
280 a symbolic name associated with a revision identifier. A branch | |
281 name denotes the tipmost revision of that branch. Tag and branch | |
282 names must not 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', 'templates'], _('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 | |
378 default. | |
379 :date: Date information. The date when the changeset was | |
380 committed. | |
381 :desc: String. The text of the changeset description. | |
382 :diffstat: String. Statistics of changes with the following | |
383 format: "modified files: +added/-removed lines" | |
384 :files: List of strings. All files modified, added, or removed | |
385 by this changeset. | |
386 :file_adds: List of strings. Files added by this changeset. | |
387 :file_mods: List of strings. Files modified by this changeset. | |
388 :file_dels: List of strings. Files removed by this changeset. | |
389 :node: String. The changeset identification hash, as a | |
390 40-character hexadecimal string. | |
391 :parents: List of strings. The parents of the changeset. | |
392 :rev: Integer. The repository-local changeset revision | |
393 number. | |
394 :tags: List of strings. Any tags associated with the | |
395 changeset. | |
396 :latesttag: String. Most recent global tag in the ancestors of this | |
397 changeset. | |
398 :latesttagdistance: Integer. Longest path to the latest tag. | |
399 | |
400 The "date" keyword does not produce human-readable output. If you | |
401 want to use a date in your output, you can use a filter to process | |
402 it. Filters are functions which return a string based on the input | |
403 variable. You can also use a chain of filters to get the desired | |
404 output:: | |
405 | |
406 $ hg tip --template "{date|isodate}\n" | |
407 2008-08-21 18:22 +0000 | |
408 | |
409 List of filters: | |
410 | |
411 :addbreaks: Any text. Add an XHTML "<br />" tag before the end of | |
412 every line except the last. | |
413 :age: Date. Returns a human-readable date/time difference | |
414 between the given date/time and the current | |
415 date/time. | |
416 :basename: Any text. Treats the text as a path, and returns the | |
417 last component of the path after splitting by the | |
418 path separator (ignoring trailing separators). For | |
419 example, "foo/bar/baz" becomes "baz" and "foo/bar//" | |
420 becomes "bar". | |
421 :stripdir: Treat the text as path and strip a directory level, | |
422 if possible. For example, "foo" and "foo/bar" becomes | |
423 "foo". | |
424 :date: Date. Returns a date in a Unix date format, including | |
425 the timezone: "Mon Sep 04 15:13:13 2006 0700". | |
426 :domain: Any text. Finds the first string that looks like an | |
427 email address, and extracts just the domain | |
428 component. Example: 'User <user@example.com>' becomes | |
429 'example.com'. | |
430 :email: Any text. Extracts the first string that looks like | |
431 an email address. Example: 'User <user@example.com>' | |
432 becomes 'user@example.com'. | |
433 :escape: Any text. Replaces the special XML/XHTML characters | |
434 "&", "<" and ">" with XML entities. | |
435 :fill68: Any text. Wraps the text to fit in 68 columns. | |
436 :fill76: Any text. Wraps the text to fit in 76 columns. | |
437 :firstline: Any text. Returns the first line of text. | |
438 :nonempty: Any text. Returns '(none)' if the string is empty. | |
439 :hgdate: Date. Returns the date as a pair of numbers: | |
440 "1157407993 25200" (Unix timestamp, timezone offset). | |
441 :isodate: Date. Returns the date in ISO 8601 format: | |
442 "2009-08-18 13:00 +0200". | |
443 :isodatesec: Date. Returns the date in ISO 8601 format, including | |
444 seconds: "2009-08-18 13:00:13 +0200". See also the | |
445 rfc3339date filter. | |
446 :localdate: Date. Converts a date to local date. | |
447 :obfuscate: Any text. Returns the input text rendered as a | |
448 sequence of XML entities. | |
449 :person: Any text. Returns the text before an email address. | |
450 :rfc822date: Date. Returns a date using the same format used in | |
451 email headers: "Tue, 18 Aug 2009 13:00:13 +0200". | |
452 :rfc3339date: Date. Returns a date using the Internet date format | |
453 specified in RFC 3339: "2009-08-18T13:00:13+02:00". | |
454 :short: Changeset hash. Returns the short form of a changeset | |
455 hash, i.e. a 12-byte hexadecimal string. | |
456 :shortdate: Date. Returns a date like "2006-09-18". | |
457 :strip: Any text. Strips all leading and trailing whitespace. | |
458 :tabindent: Any text. Returns the text, with every line except | |
459 the first starting with a tab character. | |
460 :urlescape: Any text. Escapes all "special" characters. For | |
461 example, "foo bar" becomes "foo%20bar". | |
462 :user: Any text. Returns the user portion of an email | |
463 address. | |
464 ''')), | |
465 | |
466 (['urls'], _('URL Paths'), | |
467 _(r''' | |
468 Valid URLs are of the form:: | |
469 | |
470 local/filesystem/path[#revision] | |
471 file://local/filesystem/path[#revision] | |
472 http://[user[:pass]@]host[:port]/[path][#revision] | |
473 https://[user[:pass]@]host[:port]/[path][#revision] | |
474 ssh://[user[:pass]@]host[:port]/[path][#revision] | |
475 | |
476 Paths in the local filesystem can either point to Mercurial | |
477 repositories or to bundle files (as created by 'hg bundle' or 'hg | |
478 incoming --bundle'). | |
479 | |
480 An optional identifier after # indicates a particular branch, tag, | |
481 or changeset to use from the remote repository. See also 'hg help | |
482 revisions'. | |
483 | |
484 Some features, such as pushing to http:// and https:// URLs are | |
485 only possible if the feature is explicitly enabled on the remote | |
486 Mercurial server. | |
487 | |
488 Some notes about using SSH with Mercurial: | |
489 | |
490 - SSH requires an accessible shell account on the destination | |
491 machine and a copy of hg in the remote path or specified with as | |
492 remotecmd. | |
493 - path is relative to the remote user's home directory by default. | |
494 Use an extra slash at the start of a path to specify an absolute | |
495 path:: | |
496 | |
497 ssh://example.com//tmp/repository | |
498 | |
499 - Mercurial doesn't use its own compression via SSH; the right | |
500 thing to do is to configure it in your ~/.ssh/config, e.g.:: | |
501 | |
502 Host *.mylocalnetwork.example.com | |
503 Compression no | |
504 Host * | |
505 Compression yes | |
506 | |
507 Alternatively specify "ssh -C" as your ssh command in your hgrc | |
508 or with the --ssh command line option. | |
509 | |
510 These URLs can all be stored in your hgrc with path aliases under | |
511 the [paths] section like so:: | |
512 | |
513 [paths] | |
514 alias1 = URL1 | |
515 alias2 = URL2 | |
516 ... | |
517 | |
518 You can then use the alias for any command that uses a URL (for | |
519 example 'hg pull alias1' would pull from the 'alias1' path). | |
520 | |
521 Two path aliases are special because they are used as defaults | |
522 when you do not provide the URL to a command: | |
523 | |
524 default: | |
525 When you create a repository with hg clone, the clone command | |
526 saves the location of the source repository as the new | |
527 repository's 'default' path. This is then used when you omit | |
528 path from push- and pull-like commands (including incoming and | |
529 outgoing). | |
530 | |
531 default-push: | |
532 The push command will look for a path named 'default-push', and | |
533 prefer it over 'default' if both are defined. | |
534 ''')), | |
535 (["extensions"], _("Using additional features"), extshelp), | 91 (["extensions"], _("Using additional features"), extshelp), |
536 ) | 92 ) |