diff options
author | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
commit | 458120dd40db6b4df55a4e96b650e16798ef06a0 (patch) | |
tree | 8f82685be24fef97e715c6f5ca4c68d34d5074ee /sys/src/cmd/hg/mercurial/help.py | |
parent | 3a742c699f6806c1145aea5149bf15de15a0afd7 (diff) |
add hg and python
Diffstat (limited to 'sys/src/cmd/hg/mercurial/help.py')
-rw-r--r-- | sys/src/cmd/hg/mercurial/help.py | 527 |
1 files changed, 527 insertions, 0 deletions
diff --git a/sys/src/cmd/hg/mercurial/help.py b/sys/src/cmd/hg/mercurial/help.py new file mode 100644 index 000000000..a553ac15e --- /dev/null +++ b/sys/src/cmd/hg/mercurial/help.py @@ -0,0 +1,527 @@ +# help.py - help data for mercurial +# +# Copyright 2006 Matt Mackall <mpm@selenic.com> +# +# This software may be used and distributed according to the terms of the +# GNU General Public License version 2, incorporated herein by reference. + +from i18n import _ +import extensions, util + + +def moduledoc(file): + '''return the top-level python documentation for the given file + + Loosely inspired by pydoc.source_synopsis(), but rewritten to handle \''' + as well as """ and to return the whole text instead of just the synopsis''' + result = [] + + line = file.readline() + while line[:1] == '#' or not line.strip(): + line = file.readline() + if not line: break + + start = line[:3] + if start == '"""' or start == "'''": + line = line[3:] + while line: + if line.rstrip().endswith(start): + line = line.split(start)[0] + if line: + result.append(line) + break + elif not line: + return None # unmatched delimiter + result.append(line) + line = file.readline() + else: + return None + + return ''.join(result) + +def listexts(header, exts, maxlength): + '''return a text listing of the given extensions''' + if not exts: + return '' + result = '\n%s\n\n' % header + for name, desc in sorted(exts.iteritems()): + result += ' %-*s %s\n' % (maxlength + 2, ':%s:' % name, desc) + return result + +def extshelp(): + doc = _(r''' + Mercurial has the ability to add new features through the use of + extensions. Extensions may add new commands, add options to + existing commands, change the default behavior of commands, or + implement hooks. + + Extensions are not loaded by default for a variety of reasons: + they can increase startup overhead; they may be meant for advanced + usage only; they may provide potentially dangerous abilities (such + as letting you destroy or modify history); they might not be ready + for prime time; or they may alter some usual behaviors of stock + Mercurial. It is thus up to the user to activate extensions as + needed. + + To enable the "foo" extension, either shipped with Mercurial or in + the Python search path, create an entry for it in your hgrc, like + this:: + + [extensions] + foo = + + You may also specify the full path to an extension:: + + [extensions] + myfeature = ~/.hgext/myfeature.py + + To explicitly disable an extension enabled in an hgrc of broader + scope, prepend its path with !:: + + [extensions] + # disabling extension bar residing in /path/to/extension/bar.py + hgext.bar = !/path/to/extension/bar.py + # ditto, but no path was supplied for extension baz + hgext.baz = ! + ''') + + exts, maxlength = extensions.enabled() + doc += listexts(_('enabled extensions:'), exts, maxlength) + + exts, maxlength = extensions.disabled() + doc += listexts(_('disabled extensions:'), exts, maxlength) + + return doc + +helptable = ( + (["dates"], _("Date Formats"), + _(r''' + Some commands allow the user to specify a date, e.g.: + + - backout, commit, import, tag: Specify the commit date. + - log, revert, update: Select revision(s) by date. + + Many date formats are valid. Here are some examples:: + + "Wed Dec 6 13:18:29 2006" (local timezone assumed) + "Dec 6 13:18 -0600" (year assumed, time offset provided) + "Dec 6 13:18 UTC" (UTC and GMT are aliases for +0000) + "Dec 6" (midnight) + "13:18" (today assumed) + "3:39" (3:39AM assumed) + "3:39pm" (15:39) + "2006-12-06 13:18:29" (ISO 8601 format) + "2006-12-6 13:18" + "2006-12-6" + "12-6" + "12/6" + "12/6/6" (Dec 6 2006) + + Lastly, there is Mercurial's internal format:: + + "1165432709 0" (Wed Dec 6 13:18:29 2006 UTC) + + This is the internal representation format for dates. unixtime is + the number of seconds since the epoch (1970-01-01 00:00 UTC). + offset is the offset of the local timezone, in seconds west of UTC + (negative if the timezone is east of UTC). + + The log command also accepts date ranges:: + + "<{datetime}" - at or before a given date/time + ">{datetime}" - on or after a given date/time + "{datetime} to {datetime}" - a date range, inclusive + "-{days}" - within a given number of days of today + ''')), + + (["patterns"], _("File Name Patterns"), + _(r''' + Mercurial accepts several notations for identifying one or more + files at a time. + + By default, Mercurial treats filenames as shell-style extended + glob patterns. + + Alternate pattern notations must be specified explicitly. + + To use a plain path name without any pattern matching, start it + with "path:". These path names must completely match starting at + the current repository root. + + To use an extended glob, start a name with "glob:". Globs are + rooted at the current directory; a glob such as "``*.c``" will + only match files in the current directory ending with ".c". + + The supported glob syntax extensions are "``**``" to match any + string across path separators and "{a,b}" to mean "a or b". + + To use a Perl/Python regular expression, start a name with "re:". + Regexp pattern matching is anchored at the root of the repository. + + Plain examples:: + + path:foo/bar a name bar in a directory named foo in the root + of the repository + path:path:name a file or directory named "path:name" + + Glob examples:: + + glob:*.c any name ending in ".c" in the current directory + *.c any name ending in ".c" in the current directory + **.c any name ending in ".c" in any subdirectory of the + current directory including itself. + foo/*.c any name ending in ".c" in the directory foo + foo/**.c any name ending in ".c" in any subdirectory of foo + including itself. + + Regexp examples:: + + re:.*\.c$ any name ending in ".c", anywhere in the repository + + ''')), + + (['environment', 'env'], _('Environment Variables'), + _(r''' +HG + Path to the 'hg' executable, automatically passed when running + hooks, extensions or external tools. If unset or empty, this is + the hg executable's name if it's frozen, or an executable named + 'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on + Windows) is searched. + +HGEDITOR + This is the name of the editor to run when committing. See EDITOR. + + (deprecated, use .hgrc) + +HGENCODING + This overrides the default locale setting detected by Mercurial. + This setting is used to convert data including usernames, + changeset descriptions, tag names, and branches. This setting can + be overridden with the --encoding command-line option. + +HGENCODINGMODE + This sets Mercurial's behavior for handling unknown characters + while transcoding user input. The default is "strict", which + causes Mercurial to abort if it can't map a character. Other + settings include "replace", which replaces unknown characters, and + "ignore", which drops them. This setting can be overridden with + the --encodingmode command-line option. + +HGMERGE + An executable to use for resolving merge conflicts. The program + will be executed with three arguments: local file, remote file, + ancestor file. + + (deprecated, use .hgrc) + +HGRCPATH + A list of files or directories to search for hgrc files. Item + separator is ":" on Unix, ";" on Windows. If HGRCPATH is not set, + platform default search path is used. If empty, only the .hg/hgrc + from the current repository is read. + + For each element in HGRCPATH: + + - if it's a directory, all files ending with .rc are added + - otherwise, the file itself will be added + +HGUSER + This is the string used as the author of a commit. If not set, + available values will be considered in this order: + + - HGUSER (deprecated) + - hgrc files from the HGRCPATH + - EMAIL + - interactive prompt + - LOGNAME (with '@hostname' appended) + + (deprecated, use .hgrc) + +EMAIL + May be used as the author of a commit; see HGUSER. + +LOGNAME + May be used as the author of a commit; see HGUSER. + +VISUAL + This is the name of the editor to use when committing. See EDITOR. + +EDITOR + Sometimes Mercurial needs to open a text file in an editor for a + user to modify, for example when writing commit messages. The + editor it uses is determined by looking at the environment + variables HGEDITOR, VISUAL and EDITOR, in that order. The first + non-empty one is chosen. If all of them are empty, the editor + defaults to 'vi'. + +PYTHONPATH + This is used by Python to find imported modules and may need to be + set appropriately if this Mercurial is not installed system-wide. + ''')), + + (['revs', 'revisions'], _('Specifying Single Revisions'), + _(r''' + Mercurial supports several ways to specify individual revisions. + + A plain integer is treated as a revision number. Negative integers + are treated as sequential offsets from the tip, with -1 denoting + the tip, -2 denoting the revision prior to the tip, and so forth. + + A 40-digit hexadecimal string is treated as a unique revision + identifier. + + A hexadecimal string less than 40 characters long is treated as a + unique revision identifier and is referred to as a short-form + identifier. A short-form identifier is only valid if it is the + prefix of exactly one full-length identifier. + + Any other string is treated as a tag or branch name. A tag name is + a symbolic name associated with a revision identifier. A branch + name denotes the tipmost revision of that branch. Tag and branch + names must not contain the ":" character. + + The reserved name "tip" is a special tag that always identifies + the most recent revision. + + The reserved name "null" indicates the null revision. This is the + revision of an empty repository, and the parent of revision 0. + + The reserved name "." indicates the working directory parent. If + no working directory is checked out, it is equivalent to null. If + an uncommitted merge is in progress, "." is the revision of the + first parent. + ''')), + + (['mrevs', 'multirevs'], _('Specifying Multiple Revisions'), + _(r''' + When Mercurial accepts more than one revision, they may be + specified individually, or provided as a topologically continuous + range, separated by the ":" character. + + The syntax of range notation is [BEGIN]:[END], where BEGIN and END + are revision identifiers. Both BEGIN and END are optional. If + BEGIN is not specified, it defaults to revision number 0. If END + is not specified, it defaults to the tip. The range ":" thus means + "all revisions". + + If BEGIN is greater than END, revisions are treated in reverse + order. + + A range acts as a closed interval. This means that a range of 3:5 + gives 3, 4 and 5. Similarly, a range of 9:6 gives 9, 8, 7, and 6. + ''')), + + (['diffs'], _('Diff Formats'), + _(r''' + Mercurial's default format for showing changes between two + versions of a file is compatible with the unified format of GNU + diff, which can be used by GNU patch and many other standard + tools. + + While this standard format is often enough, it does not encode the + following information: + + - executable status and other permission bits + - copy or rename information + - changes in binary files + - creation or deletion of empty files + + Mercurial also supports the extended diff format from the git VCS + which addresses these limitations. The git diff format is not + produced by default because a few widespread tools still do not + understand this format. + + This means that when generating diffs from a Mercurial repository + (e.g. with "hg export"), you should be careful about things like + file copies and renames or other things mentioned above, because + when applying a standard diff to a different repository, this + extra information is lost. Mercurial's internal operations (like + push and pull) are not affected by this, because they use an + internal binary format for communicating changes. + + To make Mercurial produce the git extended diff format, use the + --git option available for many commands, or set 'git = True' in + the [diff] section of your hgrc. You do not need to set this + option when importing diffs in this format or using them in the mq + extension. + ''')), + (['templating', 'templates'], _('Template Usage'), + _(r''' + Mercurial allows you to customize output of commands through + templates. You can either pass in a template from the command + line, via the --template option, or select an existing + template-style (--style). + + You can customize output for any "log-like" command: log, + outgoing, incoming, tip, parents, heads and glog. + + Three styles are packaged with Mercurial: default (the style used + when no explicit preference is passed), compact and changelog. + Usage:: + + $ hg log -r1 --style changelog + + A template is a piece of text, with markup to invoke variable + expansion:: + + $ hg log -r1 --template "{node}\n" + b56ce7b07c52de7d5fd79fb89701ea538af65746 + + Strings in curly braces are called keywords. The availability of + keywords depends on the exact context of the templater. These + keywords are usually available for templating a log-like command: + + :author: String. The unmodified author of the changeset. + :branches: String. The name of the branch on which the changeset + was committed. Will be empty if the branch name was + default. + :date: Date information. The date when the changeset was + committed. + :desc: String. The text of the changeset description. + :diffstat: String. Statistics of changes with the following + format: "modified files: +added/-removed lines" + :files: List of strings. All files modified, added, or removed + by this changeset. + :file_adds: List of strings. Files added by this changeset. + :file_mods: List of strings. Files modified by this changeset. + :file_dels: List of strings. Files removed by this changeset. + :node: String. The changeset identification hash, as a + 40-character hexadecimal string. + :parents: List of strings. The parents of the changeset. + :rev: Integer. The repository-local changeset revision + number. + :tags: List of strings. Any tags associated with the + changeset. + + The "date" keyword does not produce human-readable output. If you + want to use a date in your output, you can use a filter to process + it. Filters are functions which return a string based on the input + variable. You can also use a chain of filters to get the desired + output:: + + $ hg tip --template "{date|isodate}\n" + 2008-08-21 18:22 +0000 + + List of filters: + + :addbreaks: Any text. Add an XHTML "<br />" tag before the end of + every line except the last. + :age: Date. Returns a human-readable date/time difference + between the given date/time and the current + date/time. + :basename: Any text. Treats the text as a path, and returns the + last component of the path after splitting by the + path separator (ignoring trailing separators). For + example, "foo/bar/baz" becomes "baz" and "foo/bar//" + becomes "bar". + :stripdir: Treat the text as path and strip a directory level, + if possible. For example, "foo" and "foo/bar" becomes + "foo". + :date: Date. Returns a date in a Unix date format, including + the timezone: "Mon Sep 04 15:13:13 2006 0700". + :domain: Any text. Finds the first string that looks like an + email address, and extracts just the domain + component. Example: 'User <user@example.com>' becomes + 'example.com'. + :email: Any text. Extracts the first string that looks like + an email address. Example: 'User <user@example.com>' + becomes 'user@example.com'. + :escape: Any text. Replaces the special XML/XHTML characters + "&", "<" and ">" with XML entities. + :fill68: Any text. Wraps the text to fit in 68 columns. + :fill76: Any text. Wraps the text to fit in 76 columns. + :firstline: Any text. Returns the first line of text. + :nonempty: Any text. Returns '(none)' if the string is empty. + :hgdate: Date. Returns the date as a pair of numbers: + "1157407993 25200" (Unix timestamp, timezone offset). + :isodate: Date. Returns the date in ISO 8601 format. + :localdate: Date. Converts a date to local date. + :obfuscate: Any text. Returns the input text rendered as a + sequence of XML entities. + :person: Any text. Returns the text before an email address. + :rfc822date: Date. Returns a date using the same format used in + email headers. + :short: Changeset hash. Returns the short form of a changeset + hash, i.e. a 12-byte hexadecimal string. + :shortdate: Date. Returns a date like "2006-09-18". + :strip: Any text. Strips all leading and trailing whitespace. + :tabindent: Any text. Returns the text, with every line except + the first starting with a tab character. + :urlescape: Any text. Escapes all "special" characters. For + example, "foo bar" becomes "foo%20bar". + :user: Any text. Returns the user portion of an email + address. + ''')), + + (['urls'], _('URL Paths'), + _(r''' + Valid URLs are of the form:: + + local/filesystem/path[#revision] + file://local/filesystem/path[#revision] + http://[user[:pass]@]host[:port]/[path][#revision] + https://[user[:pass]@]host[:port]/[path][#revision] + ssh://[user[:pass]@]host[:port]/[path][#revision] + + Paths in the local filesystem can either point to Mercurial + repositories or to bundle files (as created by 'hg bundle' or 'hg + incoming --bundle'). + + An optional identifier after # indicates a particular branch, tag, + or changeset to use from the remote repository. See also 'hg help + revisions'. + + Some features, such as pushing to http:// and https:// URLs are + only possible if the feature is explicitly enabled on the remote + Mercurial server. + + Some notes about using SSH with Mercurial: + + - SSH requires an accessible shell account on the destination + machine and a copy of hg in the remote path or specified with as + remotecmd. + - path is relative to the remote user's home directory by default. + Use an extra slash at the start of a path to specify an absolute + path:: + + ssh://example.com//tmp/repository + + - Mercurial doesn't use its own compression via SSH; the right + thing to do is to configure it in your ~/.ssh/config, e.g.:: + + Host *.mylocalnetwork.example.com + Compression no + Host * + Compression yes + + Alternatively specify "ssh -C" as your ssh command in your hgrc + or with the --ssh command line option. + + These URLs can all be stored in your hgrc with path aliases under + the [paths] section like so:: + + [paths] + alias1 = URL1 + alias2 = URL2 + ... + + You can then use the alias for any command that uses a URL (for + example 'hg pull alias1' would pull from the 'alias1' path). + + Two path aliases are special because they are used as defaults + when you do not provide the URL to a command: + + default: + When you create a repository with hg clone, the clone command + saves the location of the source repository as the new + repository's 'default' path. This is then used when you omit + path from push- and pull-like commands (including incoming and + outgoing). + + default-push: + The push command will look for a path named 'default-push', and + prefer it over 'default' if both are defined. + ''')), + (["extensions"], _("Using additional features"), extshelp), +) |