Оглавление revsets

Задание набора ревизий

    Mercurial поддерживает функциональный язык для задания множества ревизий.

    Язык поддерживает несколько предикатов, которые объединяются с помощью
    инфиксных операторов. Для группировки можно использовать круглые скобки.

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

    В идентификаторах можно использовать специальные символы, экранируя их.
    Например "\n" интерпретируется как перевод строки. Чтобы запретить такую
    интерпретацию, поставьте перед строкой "r", например, "r'...'".

    Поддерживается один префиксный оператор:

    "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^n"
      n-ый родитель x, где n == 0, 1 или 2. Если n == 0, соответствует x; если
      n == 1, то соответствует первому родителю каждой ревизии из x; если n ==
      2 — второму родителю.

    "x~n"
      n-ый первый предок x; "x~0" соответствует x; "x~3" - "x^^^".

    Существует единственный постфиксный оператор:

    "x^"
      То же, что "x^1" - первый родитель каждой ревизии из x.

    Поддерживаются следующие предикаты:

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

    "all()"
      Все наборы изменений, то же, что "0:tip".

    "ancestor(одна_ревизия, одна_ревизия)"
      Наибольший общий предок двух наборов изменений.

    "ancestors(множество)"
      Наборы изменений, являющиеся предками какого-либо набора изменений из
      множества.

    "author(строка)"
      Псевдоним для "user(строка)".

    "bisect(строка)"
      Наборы изменений, отмеченные состоянием в ходе бисекции:

      - "good", "bad", "skip": явно помеченные как хороший/плохой/пропущенный
      - "goods", "bads"      : топологически хорошие/плохие
      - "range"              : находящиеся в рамках бисекции
      - "pruned"             : goods, bads или пропущенные
      - "untested"           : те, чья судьба ещё неизвестна
      - "ignored"            : игнорируемые ввиду топологии графа ревизий
      - "current"            : обрабатываемый в данный момент

    "bookmark([имя])"
      Именованная закладка или все закладки.

      Если "имя" начинается с "re:", остальная часть имени считается
      регулярным выражением. Чтобы найти закладку, имя которой начинается с
      символов "re:", используйте префикс "literal:".

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

      Если "строка" начинается с "re:", остальная часть имени считается
      регулярным выражением. Чтобы найти ветку, имя которой начинается с
      символов "re:", используйте префикс "literal:".

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

    "bumped()"
      Изменяемые (mutable) ревизии, помеченные как потомки публичных ревизий.

      Только непубличные и неустаревшие ревизии могут быть "bumped".

    "bundle()"
      Changesets in the bundle.

      Bundle must be specified by the -R option.

    "children(множество)"
      Дочерние наборы изменений для наборов изменений из множества.

    "closed()"
      Набор изменений, который закрыт.

    "contains(шаблон)"
      Ревизия, содержащая файл, совпадающий с шаблоном. См. справку по
      шаблонам имён файлов: "hg help patterns".

    "converted([id])"
      Наборы изменений, сконвертированные из заданного идентификатора в старом
      хранилище, или все сконвертированные наборы изменений, если
      идентификатор не указан.

    "date(интервал)"
      Наборы изменений в интервале дат, см. "hg help dates".

    "desc(строка)"
      Искать строку в сообщениях фиксации. Регистр букв не учитывается.

    "descendants(множество)"
      Наборы изменений, являющиеся потомками наборов из множества.

    "destination([множество])"
      Наборы изменений, созданные с помощью операций graft, transplant или
      rebase c указанными ревизиями в качестве источников. Если множество
      ревизий опущено, вместо него предполагается all().

    "divergent()"
      Final successors of changesets with an alternative set of final
      successors.

    "draft()"
      Набор изменений в черновой фазе.

    "extinct()"
      Устаревший набор изменений, имеющий только устаревших потомков.

    "extra(label, [значение])"
      Наборы изменений с заданной меткой в дополнительных метаданных и с
      заданным значением (необязательным).

      Если "значение" начинается с "re:", остальная часть значения считается
      регулярным выражением. Чтобы найти значение, которое начинается с
      символов "re:", используйте префикс "literal:".

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

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

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

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

    "first(множество, [n])"
      Псевдоним для limit().

    "follow([файл])"
      Псевдоним для "::." (предки первого родителя рабочей копии). Если
      указано имя файла, прослеживается вся история данного файла, включая
      копии.

    "grep(регулярное_выражение)"
      То же, что "keyword(строка)", но принимает регулярное выражение.
      Используйте "grep(r'...')", чтобы включить в выражение специальные
      символы. В отличие от "keyword(строка)", регистр букв учитывается.

    "head()"
      Набор изменений, являющийся головой именованной ветки.

    "heads(множество)"
      Элементы множества, у которых в этом множестве нет детей.

    "hidden()"
      Скрытые наборы изменений.

    "id(строка)"
      Ревизия, однозначно идентифицируемая данным шестнадцатеричным префиксом.

    "keyword(строка)"
      Искать строку в сообщениях фиксации, именах пользователей, именах
      изменённых файлов. Регистр букв не учитывается.

    "last(множество, [n])"
      Последние n элементов множества. По умолчанию 1 элемент.

    "limit(множество, [n])"
      Первые n элементов множества. По умолчанию 1 элемент.

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

    "obsolete()"
      Изменяемый набор изменений, имеющий более новую версию.

    "origin([множество])"
      Наборы изменений, которые были заданы в качестве исходных для операций
      graft, rebase или transplant, создавших указанные ревизии. Если
      множество не задано, предполагается all(). Если набор изменений,
      созданный этими операциями, указан в качестве источника для одной из
      этих операций, будет выбран только исходный набор изменений для первой
      операции.

    "outgoing([путь])"
      Наборы изменений, отсутствующие в указанном целевом хранилище, или в
      месте для проталкивания по умолчанию.

    "p1([множество])"
      Первый родитель для всех наборов изменений из множества или для рабочего
      каталога.

    "p2([множество])"
      Второй родитель для всех наборов изменений из множества или для рабочего
      каталога.

    "parents([множество])"
      Множество всех родителей для всех наборов изменений из множества или для
      рабочего каталога.

    "present(множество)"
      Пустое множество, если какая-либо ревизия из множества не найдена. Иначе
      все ревизии из множества.

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

    "public()"
      Набор изменений в публичной фазе.

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

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

    "rev(число)"
      Ревизия с указанным числовым идентификатором.

    "reverse(множество)"
      Элементы множества в обратном порядке.

    "roots(множество)"
      Наборы изменений из множества, не имеющие родителя во множестве.

    "secret()"
      Набор изменений в секретной фазе.

    "sort(множество[, [-]ключ...])"
      Сортировать множество по ключам. Порядок по умолчанию — возрастающий,
      укажите "-ключ", чтобы отсортировать в убывающем порядке.

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

      - "rev" для сортировки по номеру ревизии,
      - "branch" по имени ветки,
      - "desc" по сообщению фиксации,
      - "user" по имени пользователя (то же, что "author"),
      - "date" по дате фиксации

    "tag([имя])"
      Именованная метка или все помеченные ревизии, если имя не указано.

    "unstable()"
      Неустаревшие наборы изменений с устаревшими предками.

    "user(строка)"
      Имя пользователя содержит строку. Регистр букв не учитывается.

      Если "строка" начинается с "re:", остальная часть имени считается
      регулярным выражением. Чтобы найти пользователя, имя которого начинается
      с символов "re:", используйте префикс "literal:".

    Можно определить новые предикаты (известные как псевдонимы или "алиасы"),
    используя любые комбинации существующих предикатов или псевдонимов.
    Определение псевдонима имеет вид:

      <псевдоним> = <определение>

    в секции "revsetalias" конфига Mercurial. Аргументы вида "$1", "$2" и т.д.
    передаются из псевдонима в его определение.

    Например,

      [revsetalias]
      h = heads()
      d($1) = sort($1, date)
      rs($1, $2) = reverse(sort($1, $2))

    определяет три псевдонима, "h", "d" и "rs". "rs(0:tip, автор)" - это ровно
    то же самое, что "reverse(sort(0:tip, автор))".

    Аналоги командной строки для "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)

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

    - Ревизии на ветке 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())"