|
|
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 must be quoted with single or double
|
|
|
quotes if they contain characters outside of
|
|
|
``[._a-zA-Z0-9\x80-\xff]`` 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
|
|
|
|
|
|
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())"
|
|
|
|