Specifying Revisions
""""""""""""""""""""
Mercurial supports several ways to specify revisions.
Specifying single revisions
===========================
Простое целое число интерпретируется как номер ревизии. Отрицательные
целые числа интерпретируются как непрерывное смещение относительно
оконечной ревизии (tip). Так, -1 означает tip, -2 означает ревизию,
предшествующую tip и т.д.
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.
Любая другая строка интерпретируется как имя закладки, ветки или метки.
Закладка - это автоматически передвигаемый указатель на ревизию.
Метка - постоянное имя, ассоциированное с некоторой ревизией.
Имя ветки означает последнюю открытую голову на этой ветке. Или, если
все головы закрыты, - последнюю закрытую голову на этой ветке. Имена ветки,
метки или закладки не должны содержать символа ":".
Зарезервированное имя "tip" всегда ссылается на самую последнюю ревизию.
Зарезервированное имя "null" означает пустую ревизию. Это ревизия
пустого хранилища или родитель ревизии 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.
Finally, commands that expect a single revision (like ``hg update``) also
accept revsets (see below for details). When given a revset, they use the
last revision of the revset. A few commands accept two single revisions
(like ``hg diff``). When given a revset, they use the first and the last
revisions of the revset.
Specifying multiple revisions
=============================
Mercurial supports a functional language for selecting a set of
revisions. Expressions in this language are called revsets.
Язык поддерживает несколько предикатов, которые объединяются с помощью
инфиксных операторов. Для группировки можно использовать круглые скобки.
Различные идентификаторы, такие как имена веток, могут заключаться в
одинарные или двойные кавычки, особенно если они содержат такие символы
как ``-``, или если их имена совпадают с именем одного из предопределенных
предикатов.
В идентификаторах можно использовать специальные символы, экранируя их.
Например ``\n`` интерпретируется как перевод строки. Чтобы запретить
такую интерпретацию, поставьте перед строкой ``r``, например, ``r'...'``.
Operators
=========
Поддерживается один префиксный оператор:
``not x``
Наборы изменений, не входящие в х. Краткая форма: ``! x``.
Поддерживаемые инфиксные операторы:
``x::y``
Диапазон на графе ревизий, означающий все ревизии, являющиеся
предками y и потомками x, включая x и y. Если первая ревизия
опущена, это эквивалентно ``ancestors(y)``, если вторая ревизия
опущена, это эквивалентно ``descendants(x)``.
Альтернативная форма: ``x..y``.
``x:y``
Все ревизии с номерами от x до y, включительно. Обе могут быть
опущены, по умолчанию считаются 0 и tip соответственно.
``x and y``
Пересечение множеств ревизий x и y. Краткая форма: ``x & y``.
``x or y``
Объединение множеств ревизий x и y. Возможны две краткие формы:
``x | y`` и ``x + y``.
``x - y``
Ревизии, входящие в x, но не в y.
``x % y``
Changesets that are ancestors of x but not ancestors of y (i.e. ::x - ::y).
This is shorthand notation for ``only(x, y)`` (see below). The second
argument is optional and, if left out, is equivalent to ``only(x)``.
``x^n``
n-ый родитель x, где n == 0, 1 или 2.
Если n == 0, соответствует x; если n == 1, то соответствует первому
родителю каждой ревизии из x; если n == 2 — второму родителю.
``x~n``
The nth first ancestor of x; ``x~0`` is x; ``x~3`` is ``x^^^``.
For n < 0, the nth unambiguous descendent of x.
``x ## y``
Concatenate strings and identifiers into one string.
All other prefix, infix and postfix operators have lower priority than
``##``. For example, ``a1 ## a2~2`` is equivalent to ``(a1 ## a2)~2``.
For example::
[revsetalias]
issue(a1) = grep(r'\bissue[ :]?' ## a1 ## r'\b|\bbug\(' ## a1 ## r'\)')
``issue(1234)`` is equivalent to
``grep(r'\bissue[ :]?1234\b|\bbug\(1234\)')``
in this case. This matches against all of "issue 1234", "issue:1234",
"issue1234" and "bug(1234)".
Существует единственный постфиксный оператор:
``x^``
То же, что ``x^1`` - первый родитель каждой ревизии из x.
Patterns
========
Where noted, predicates that perform string matching can accept a pattern
string. The pattern may be either a literal, or a regular expression. If the
pattern starts with ``re:``, the remainder of the pattern is treated as a
regular expression. Otherwise, it is treated as a literal. To match a pattern
that actually starts with ``re:``, use the prefix ``literal:``.
Matching is case-sensitive, unless otherwise noted. To perform a case-
insensitive match on a case-sensitive predicate, use a regular expression,
prefixed with ``(?i)``.
For example, ``tag(r're:(?i)release')`` matches "release" or "RELEASE"
or "Release", etc.
Predicates
==========
Поддерживаются следующие предикаты:
``adds(шаблон)``
Наборы изменений, добавляющие файл, совпадающий с шаблоном.
The pattern without explicit kind like ``glob:`` is expected to be
relative to the current directory and match against a file or a
directory.
``all()``
Все наборы изменений, то же, что ``0:tip``.
``ancestor(*ревизия)``
Наиболее поздний общий предок наборов изменений.
Accepts 0 or more changesets.
Will return empty list when passed no args.
Greatest common ancestor of a single changeset is that changeset.
``ancestors(set[, depth])``
Changesets that are ancestors of changesets in set, including the
given changesets themselves.
If depth is specified, the result only includes changesets up to
the specified generation.
``author(строка)``
Псевдоним для ``user(строка)``.
``bisect(строка)``
Наборы изменений, отмеченные состоянием в ходе бисекции:
- ``good``, ``bad``, ``skip``: csets explicitly marked as good/bad/skip
- ``goods``, ``bads`` : csets topologically good/bad
- ``range`` : csets taking part in the bisection
- ``pruned`` : csets that are goods, bads or skipped
- ``untested`` : csets whose fate is yet unknown
- ``ignored`` : csets ignored due to DAG topology
- ``current`` : the cset currently being bisected
``bookmark([имя])``
Именованная закладка или все закладки.
Pattern matching is supported for `name`. See :hg:`help revisions.patterns`.
``branch(string or set)``
All changesets belonging to the given branch or the branches of the given
changesets.
Pattern matching is supported for `string`. See
:hg:`help revisions.patterns`.
``branchpoint()``
Наборы изменений, имеющие более одного дочернего набора изменений.
``bundle()``
Наборы изменений в комплекте.
Bundle must be specified by the -R option.
``children(множество)``
Дочерние наборы изменений для наборов изменений из множества.
``closed()``
Набор изменений, который закрыт.
``commonancestors(set)``
Changesets that are ancestors of every changeset in set.
``conflictlocal()``
The local side of the merge, if currently in an unresolved merge.
"merge" here includes merge conflicts from e.g. 'hg rebase' or 'hg graft'.
``conflictother()``
The other side of the merge, if currently in an unresolved merge.
"merge" here includes merge conflicts from e.g. 'hg rebase' or 'hg graft'.
``contains(pattern)``
The revision's manifest contains a file matching pattern (but might not
modify it). See :hg:`help patterns` for information about file patterns.
The pattern without explicit kind like ``glob:`` is expected to be
relative to the current directory and match against a file exactly
for efficiency.
``contentdivergent()``
Final successors of changesets with an alternative set of final
successors. (EXPERIMENTAL)
``converted([id])``
Changesets converted from the given identifier in the old repository if
present, or all converted changesets if no identifier is specified.
``date(интервал)``
Наборы изменений в интервале дат, см. :hg:`help dates`.
``desc(строка)``
Искать строку в сообщениях фиксации. Регистр букв не учитывается.
Pattern matching is supported for `string`. See
:hg:`help revisions.patterns`.
``descendants(set[, depth])``
Changesets which are descendants of changesets in set, including the
given changesets themselves.
If depth is specified, the result only includes changesets up to
the specified generation.
``destination([set])``
Changesets that were created by a graft, transplant or rebase operation,
with the given revisions specified as the source. Omitting the optional set
is the same as passing all().
``diffcontains(pattern)``
Search revision differences for when the pattern was added or removed.
The pattern may be a substring literal or a regular expression. See
:hg:`help revisions.patterns`.
``draft()``
Набор изменений в черновой фазе.
``expectsize(set[, size])``
Return the given revset if size matches the revset size.
Abort if the revset doesn't expect given size.
size can either be an integer range or an integer.
For example, ``expectsize(0:1, 3:5)`` will abort as revset size is 2 and
2 is not between 3 and 5 inclusive.
``extdata(source)``
Changesets in the specified extdata source. (EXPERIMENTAL)
``extinct()``
Obsolete changesets with obsolete descendants only. (EXPERIMENTAL)
``extra(label, [value])``
Changesets with the given label in the extra metadata, with the given
optional value.
Pattern matching is supported for `value`. See
:hg:`help revisions.patterns`.
``file(шаблон)``
Наборы изменений, затрагивающие файлы, совпадающие с шаблоном.
For a faster but less accurate result, consider using ``filelog()``
instead.
This predicate uses ``glob:`` as the default kind of pattern.
``filelog(шаблон)``
Наборы изменений, связанные с указанным объектом filelog.
For performance reasons, visits only revisions mentioned in the file-level
filelog, rather than filtering through all changesets (much faster, but
doesn't include deletes or duplicate changes). For a slower, more accurate
result, use ``file()``.
The pattern without explicit kind like ``glob:`` is expected to be
relative to the current directory and match against a file exactly
for efficiency.
``first(множество, [n])``
Псевдоним для limit().
``follow([file[, startrev]])``
An alias for ``::.`` (ancestors of the working directory's first parent).
If file pattern is specified, the histories of files matching given
pattern in the revision given by startrev are followed, including copies.
``followlines(file, fromline:toline[, startrev=., descend=False])``
Changesets modifying `file` in line range ('fromline', 'toline').
Line range corresponds to 'file' content at 'startrev' and should hence be
consistent with file size. If startrev is not specified, working directory's
parent is used.
By default, ancestors of 'startrev' are returned. If 'descend' is True,
descendants of 'startrev' are returned though renames are (currently) not
followed in this direction.
``grep(regex)``
Like ``keyword(string)`` but accepts a regex. Use ``grep(r'...')``
to ensure special escape characters are handled correctly. Unlike
``keyword(string)``, the match is case-sensitive.
``head()``
Набор изменений, являющийся головой именованной ветки.
``heads(множество)``
Элементы множества, у которых в этом множестве нет детей.
``hidden()``
Скрытые наборы изменений.
``id(строка)``
Ревизия, однозначно идентифицируемая данным шестнадцатеричным префиксом.
``keyword(string)``
Search commit message, user name, and names of changed files for
string. The match is case-insensitive.
For a regular expression or case sensitive search of these fields, use
``grep(regex)``.
``last(множество, [n])``
Последние n элементов множества. По умолчанию 1 элемент.
``limit(set[, n[, offset]])``
First n members of set, defaulting to 1, starting from offset.
``matching(revision [, field])``
Changesets in which a given set of fields match the set of fields in the
selected revision or set.
To match more than one field pass the list of fields to match separated
by spaces (e.g. ``author description``).
Valid fields are most regular revision fields and some special fields.
Regular revision fields are ``description``, ``author``, ``branch``,
``date``, ``files``, ``phase``, ``parents``, ``substate``, ``user``
and ``diff``.
Note that ``author`` and ``user`` are synonyms. ``diff`` refers to the
contents of the revision. Two revisions matching their ``diff`` will
also match their ``files``.
Special fields are ``summary`` and ``metadata``:
``summary`` matches the first line of the description.
``metadata`` is equivalent to matching ``description user date``
(i.e. it matches the main metadata fields).
``metadata`` is the default field which is used when no fields are
specified. You can match more than one field at a time.
``max(множество)``
Набор изменений с наибольшим номером ревизии из множества.
``merge()``
Набор изменений, являющийся ревизией слияния.
``min(множество)``
Набор изменений с наименьшим номером ревизии из множества.
``modifies(шаблон)``
Наборы изменений, изменяющие файлы, совпадающие с шаблоном.
The pattern without explicit kind like ``glob:`` is expected to be
relative to the current directory and match against a file or a
directory.
``named(namespace)``
The changesets in a given namespace.
Pattern matching is supported for `namespace`. See
:hg:`help revisions.patterns`.
``nodefromfile(path)``
Read a list of nodes from the file at `path`.
This applies `id(LINE)` to each line of the file.
This is useful when the amount of nodes you need to specify gets too large
for the command line.
``none()``
No changesets.
``obsolete()``
Mutable changeset with a newer version. (EXPERIMENTAL)
``only(set, [set])``
Changesets that are ancestors of the first set that are not ancestors
of any other head in the repo. If a second set is specified, the result
is ancestors of the first set that are not ancestors of the second set
(i.e. ::<set1> - ::<set2>).
``origin([set])``
Changesets that were specified as a source for the grafts, transplants or
rebases that created the given revisions. Omitting the optional set is the
same as passing all(). If a changeset created by these operations is itself
specified as a source for one of these operations, only the source changeset
for the first operation is selected.
``orphan()``
Non-obsolete changesets with obsolete ancestors. (EXPERIMENTAL)
``outgoing([path])``
Changesets not found in the specified destination repository, or the
default push location.
If the location resolve to multiple repositories, the union of all
outgoing changeset will be used.
``p1([множество])``
Первый родитель для всех наборов изменений из множества
или для рабочего каталога.
``p2([множество])``
Второй родитель для всех наборов изменений из множества
или для рабочего каталога.
``parents([множество])``
Множество всех родителей для всех наборов изменений из множества
или для рабочего каталога.
``phasedivergent()``
Mutable changesets marked as successors of public changesets.
Only non-public and non-obsolete changesets can be `phasedivergent`.
(EXPERIMENTAL)
``present(set)``
An empty set, if any revision in set isn't found; otherwise,
all revisions in set.
If any of specified revisions is not present in the local repository,
the query is normally aborted. But this predicate allows the query
to continue even in such cases.
``public()``
Набор изменений в публичной фазе.
``remote([id [,path]])``
Local revision that corresponds to the given identifier in a
remote repository, if present. Here, the '.' identifier is a
synonym for the current local branch.
``removes(шаблон)``
Наборы изменений, удаляющие файлы, совпадающие с шаблоном.
The pattern without explicit kind like ``glob:`` is expected to be
relative to the current directory and match against a file or a
directory.
``rev(число)``
Ревизия с указанным числовым идентификатором.
``reverse(множество)``
Элементы множества в обратном порядке.
``revset(set)``
Strictly interpret the content as a revset.
The content of this special predicate will be strictly interpreted as a
revset. For example, ``revset(id(0))`` will be interpreted as "id(0)"
without possible ambiguity with a "id(0)" bookmark or tag.
``roots(множество)``
Наборы изменений из множества, не имеющие родителя во множестве.
``secret()``
Набор изменений в секретной фазе.
``sort(set[, [-]key... [, ...]])``
Sort set by keys. The default sort order is ascending, specify a key
as ``-key`` to sort in descending order.
The keys can be:
- ``rev`` for the revision number,
- ``branch`` for the branch name,
- ``desc`` for the commit message (description),
- ``user`` for user name (``author`` can be used as an alias),
- ``date`` for the commit date
- ``topo`` for a reverse topographical sort
- ``node`` the nodeid of the revision
- ``random`` randomly shuffle revisions
The ``topo`` sort order cannot be combined with other sort keys. This sort
takes one optional argument, ``topo.firstbranch``, which takes a revset that
specifies what topographical branches to prioritize in the sort.
The ``random`` sort takes one optional ``random.seed`` argument to control
the pseudo-randomness of the result.
``stack([revs])``
Experimental revset for the stack of changesets or working directory
parent. (EXPERIMENTAL)
``subrepo([pattern])``
Changesets that add, modify or remove the given subrepo. If no subrepo
pattern is named, any subrepo changes are returned.
``successors(set)``
All successors for set, including the given set themselves.
(EXPERIMENTAL)
``tag([имя])``
Именованная метка или все помеченные ревизии, если имя не указано.
Pattern matching is supported for `name`. See
:hg:`help revisions.patterns`.
``unstable()``
Changesets with instabilities. (EXPERIMENTAL)
``user(строка)``
Имя пользователя содержит строку. Регистр букв не учитывается.
Pattern matching is supported for `string`. See
:hg:`help revisions.patterns`.
``wdir()``
Working directory. (EXPERIMENTAL)
Aliases
=======
Можно определить новые предикаты (известные как псевдонимы или "алиасы"),
используя любые комбинации существующих предикатов или псевдонимов.
Определение псевдонима имеет вид::
<псевдоним> = <определение>
in the ``revsetalias`` section of a Mercurial configuration file. Arguments
of the form `a1`, `a2`, etc. are substituted from the alias into the
definition.
Например,
::
[revsetalias]
h = heads()
d(s) = sort(s, date)
rs(s, k) = reverse(sort(s, k))
определяет три псевдонима, ``h``, ``d`` и ``rs``. ``rs(0:tip, автор)`` -
это ровно то же самое, что ``reverse(sort(0:tip, автор))``.
Equivalents
===========
Аналоги командной строки для :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)
Examples
========
Примеры запросов:
- Ревизии на ветке default::
hg log -r "branch(default)"
- Ревизии на ветке default, начиная с метки 1.5, не включая ревизии
слияния::
hg log -r "branch(default) and 1.5:: and not merge()"
- Головы открытых веток::
hg log -r "head() and not closed()"
- Ревизии между метками 1.3 и 1.5, содержащие в описании слово "bug",
в которых были изменены файлы ``hgext/*``::
hg log -r "1.3::1.5 and keyword(bug) and file('hgext/*')"
- Ревизии, зафиксированные в мае 2008, отсортированные по пользователю::
hg log -r "sort(date('May 2008'), user)"
- Наборы изменений, содержащие в описании слова "bug" или "issue",
и не входящие в помеченный релиз::
hg log -r "(keyword(bug) or keyword(issue)) and not ancestors(tag())"
- Update to the commit that bookmark @ is pointing to, without activating the
bookmark (this works because the last revision of the revset is used)::
hg update :@
- Show diff between tags 1.3 and 1.5 (this works because the first and the
last revisions of the revset are used)::
hg diff -r 1.3::1.5