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(шаблон)"
Наборы изменений, добавляющие файл, совпадающий с шаблоном.

Ожидается, что шаблон без явного задания вида, например "glob:", задан относительно текущего каталога и соответствует файлу или каталогу.

"all()"
Все наборы изменений, то же, что "0:tip".
"ancestor(*ревизия)"
Наиболее поздний общий предок наборов изменений.

Принимает 0 или более ревизий. Без аргументов возвращает пустой список. Наиболее поздний общий предок одной ревизии - сама эта ревизия.

"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": явно помеченные как хороший/плохой/пропущенный
  • "goods", "bads" : топологически хорошие/плохие
  • "range" : находящиеся в рамках бисекции
  • "pruned" : goods, bads или пропущенные
  • "untested" : те, чья судьба ещё неизвестна
  • "ignored" : игнорируемые ввиду топологии графа ревизий
  • "current" : обрабатываемый в данный момент
"bookmark([имя])"
Именованная закладка или все закладки.

Pattern matching is supported for 'name'. See 'hg help revisions.patterns'.

"branch(строка или множество)"
Все наборы изменений, принадлежащие указанной ветке или веткам данных наборов изменений.

Pattern matching is supported for 'string'. See 'hg help revisions.patterns'.

"branchpoint()"
Наборы изменений, имеющие более одного дочернего набора изменений.
"bundle()"
Наборы изменений в комплекте.

Комплект должен быть задан с помощью параметра -R.

"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(шаблон)"
Манифест ревизии содержит файл, совпадающий с шаблоном, (но может не менять его). См. справку по шаблонам имён файлов: 'hg help patterns'.

Ожидается, что шаблон без явного задания вида, например "glob:", задан относительно текущего каталога и совпадает с именем файла в точности для эффективности поиска.

"contentdivergent()"
Final successors of changesets with an alternative set of final successors. (EXPERIMENTAL)
"converted([id])"
Наборы изменений, сконвертированные из заданного идентификатора в старом хранилище, или все сконвертированные наборы изменений, если идентификатор не указан.
"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([множество])"
Наборы изменений, созданные с помощью операций graft, transplant или rebase c указанными ревизиями в качестве источников. Если множество ревизий опущено, вместо него предполагается 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, [значение])"
Наборы изменений с заданной меткой в дополнительных метаданных и с заданным значением (необязательным).

Pattern matching is supported for 'value'. See 'hg help revisions.patterns'.

"file(шаблон)"
Наборы изменений, затрагивающие файлы, совпадающие с шаблоном.

Для более быстрого, но не столь точного результата, используйте "filelog()".

Предикат использует вид шаблона "glob:" по умолчанию.

"filelog(шаблон)"
Наборы изменений, связанные с указанным объектом filelog.

Из соображений производительности, проверяет только ревизии, упомянутые в истории файла, а не фильтруя все наборы изменений (намного быстрее, но не включает удаления и дублирующие изменения). Для медленного, более точного результата используйте "file()".

Ожидается, что шаблон без явного задания вида, например "glob:", задан относительно текущего каталога и совпадает с именем файла в точности для эффективности поиска.

"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(регулярное_выражение)"
То же, что "keyword(строка)", но принимает регулярное выражение. Используйте "grep(r'...')", чтобы включить в выражение специальные символы. В отличие от "keyword(строка)", регистр букв учитывается.
"head()"
Набор изменений, являющийся головой именованной ветки.
"heads(множество)"
Элементы множества, у которых в этом множестве нет детей.
"hidden()"
Скрытые наборы изменений.
"id(строка)"
Ревизия, однозначно идентифицируемая данным шестнадцатеричным префиксом.
"keyword(строка)"
Искать строку в сообщениях фиксации, именах пользователей, именах изменённых файлов. Регистр букв не учитывается.

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(ревизия [, поле])"
Наборы изменений, в которых заданный набор полей совпадает с набором полей в выбранной ревизии или множестве ревизий.

Для поиска ревизий с несколькими совпадающими полями, задайте список имен, полей, разделенных пробелами (например, "author description").

В качестве полей могут выступать "обычные" поля ревизий, а также несколько особых полей.

"Обычные" поля ревизий: "description", "author", "branch", "date", "files", "phase", "parents", "substate", "user" и "diff". (описание, автор, ветка, дата, файлы, фаза, родители, состояние, еще раз автор-пользователь, и различия). Обратите внимание, что "author" and "user" являются синонимами. "diff" означает содержимое ревизии. У двух ревизий, совпадающих с заданным "diff", совпадут также и "files".

Особыми полями являются "summary" and "metadata": "summary" соответствует первой строке описания. "metadata" эквивалентно совпадению "description user date" (т.е. это основные поля метаданных).

"metadata" используется по умолчанию, когда не указано ни одного поля. Можно искать по нескольким полям за раз.

"max(множество)"
Набор изменений с наибольшим номером ревизии из множества.
"merge()"
Набор изменений, являющийся ревизией слияния.
"min(множество)"
Набор изменений с наименьшим номером ревизии из множества.
"modifies(шаблон)"
Наборы изменений, изменяющие файлы, совпадающие с шаблоном.

Ожидается, что шаблон без явного задания вида, например "glob:", задан относительно текущего каталога и соответствует файлу или каталогу.

"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(множество, [множество])"
Предки первого множества, которые не являются предками любой другой головы в хранилище. Если задано второе множество, то результат - это предки первого множества, не являющиеся предками второго (т.е., ::<множество1> - ::<множество2>).
"origin([множество])"
Наборы изменений, которые были заданы в качестве исходных для операций graft, rebase или transplant, создавших указанные ревизии. Если множество не задано, предполагается all(). Если набор изменений, созданный этими операциями, указан в качестве источника для одной из этих операций, будет выбран только исходный набор изменений для первой операции.
"orphan()"
Non-obsolete changesets with obsolete ancestors. (EXPERIMENTAL)
"outgoing([путь])"
Наборы изменений, отсутствующие в указанном целевом хранилище, или в месте для проталкивания по умолчанию.

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(множество)"
Пустое множество, если какая-либо ревизия из множества не найдена. Иначе все ревизии из множества.

Если любая из заданных ревизий отсутствует в локальном хранилище, выполнение запроса обычно прерывается. Этот же предикат позволяет продолжить выполнение запроса даже в таких случаях.

"public()"
Набор изменений в публичной фазе.
"remote([id [,path]])"
Локальная ревизия, соответствующая указанному идентификатору в отдалённом хранилище, если такая существует. Идентификатор '.' является здесь синонимом текущей локальной ветки.
"removes(шаблон)"
Наборы изменений, удаляющие файлы, совпадающие с шаблоном.

Ожидается, что шаблон без явного задания вида, например "glob:", задан относительно текущего каталога и соответствует файлу или каталогу.

"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.

В качестве ключа можно указать:

  • "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

Примеры запросов: