summaryrefslogtreecommitdiff
path: root/mercurial/help/revsets.txt
diff options
context:
space:
mode:
Diffstat (limited to 'mercurial/help/revsets.txt')
-rw-r--r--mercurial/help/revsets.txt121
1 files changed, 121 insertions, 0 deletions
diff --git a/mercurial/help/revsets.txt b/mercurial/help/revsets.txt
new file mode 100644
index 0000000..6511668
--- /dev/null
+++ b/mercurial/help/revsets.txt
@@ -0,0 +1,121 @@
+Mercurial supports a functional language for selecting a set of
+revisions.
+
+The language supports a number of predicates which are joined by infix
+operators. Parenthesis can be used for grouping.
+
+Identifiers such as branch names may need quoting with single or
+double quotes if they contain characters like ``-`` or if they match
+one of the predefined predicates.
+
+Special characters can be used in quoted identifiers by escaping them,
+e.g., ``\n`` is interpreted as a newline. To prevent them from being
+interpreted, strings can be prefixed with ``r``, e.g. ``r'...'``.
+
+There is a single prefix operator:
+
+``not x``
+ Changesets not in x. Short form is ``! x``.
+
+These are the supported infix operators:
+
+``x::y``
+ A DAG range, meaning all changesets that are descendants of x and
+ ancestors of y, including x and y themselves. If the first endpoint
+ is left out, this is equivalent to ``ancestors(y)``, if the second
+ is left out it is equivalent to ``descendants(x)``.
+
+ An alternative syntax is ``x..y``.
+
+``x:y``
+ All changesets with revision numbers between x and y, both
+ inclusive. Either endpoint can be left out, they default to 0 and
+ tip.
+
+``x and y``
+ The intersection of changesets in x and y. Short form is ``x & y``.
+
+``x or y``
+ The union of changesets in x and y. There are two alternative short
+ forms: ``x | y`` and ``x + y``.
+
+``x - y``
+ Changesets in x but not in y.
+
+``x^n``
+ The nth parent of x, n == 0, 1, or 2.
+ For n == 0, x; for n == 1, the first parent of each changeset in x;
+ for n == 2, the second parent of changeset in x.
+
+``x~n``
+ The nth first ancestor of x; ``x~0`` is x; ``x~3`` is ``x^^^``.
+
+There is a single postfix operator:
+
+``x^``
+ Equivalent to ``x^1``, the first parent of each changeset in x.
+
+
+The following predicates are supported:
+
+.. predicatesmarker
+
+New predicates (known as "aliases") can be defined, using any combination of
+existing predicates or other aliases. An alias definition looks like::
+
+ <alias> = <definition>
+
+in the ``revsetalias`` section of a Mercurial configuration file. Arguments
+of the form `$1`, `$2`, etc. are substituted from the alias into the
+definition.
+
+For example,
+
+::
+
+ [revsetalias]
+ h = heads()
+ d($1) = sort($1, date)
+ rs($1, $2) = reverse(sort($1, $2))
+
+defines three aliases, ``h``, ``d``, and ``rs``. ``rs(0:tip, author)`` is
+exactly equivalent to ``reverse(sort(0:tip, author))``.
+
+Command line equivalents for :hg:`log`::
+
+ -f -> ::.
+ -d x -> date(x)
+ -k x -> keyword(x)
+ -m -> merge()
+ -u x -> user(x)
+ -b x -> branch(x)
+ -P x -> !::x
+ -l x -> limit(expr, x)
+
+Some sample queries:
+
+- Changesets on the default branch::
+
+ hg log -r "branch(default)"
+
+- Changesets on the default branch since tag 1.5 (excluding merges)::
+
+ hg log -r "branch(default) and 1.5:: and not merge()"
+
+- Open branch heads::
+
+ hg log -r "head() and not closed()"
+
+- Changesets between tags 1.3 and 1.5 mentioning "bug" that affect
+ ``hgext/*``::
+
+ hg log -r "1.3::1.5 and keyword(bug) and file('hgext/*')"
+
+- Changesets committed in May 2008, sorted by user::
+
+ hg log -r "sort(date('May 2008'), user)"
+
+- Changesets mentioning "bug" or "issue" that are not in a tagged
+ release::
+
+ hg log -r "(keyword(bug) or keyword(issue)) and not ancestors(tagged())"