Оглавление templating

Использование шаблонов

    Mercurial позволяет вам настраивать вывод команд с помощью шаблонов. Вы
    можете передать шаблон через командную строку с помощью опции --template,
    либо выбрать существующий шаблонный стиль (--style).

    Можно настроить вывод для любой команды, похожей на log: log, outgoing,
    incoming, tip, parents, heads и glog.

    С Mercurial поставляются четыре стиля: стиль по умолчанию (используется,
    когда другой стиль явно не указан), compact, changelog и xml.
    Использование:

      $ hg log -r1 --style changelog

    Шаблон - это текст с разметкой, позволяющей выполнять подстановку
    переменных:

      $ hg log -r1 --template "{node}\n"
      b56ce7b07c52de7d5fd79fb89701ea538af65746

    Строки в фигурных скобках называются ключевыми словами. Ключевые слова
    доступны в зависимости от контекста, в котором применяется шаблон. Эти
    ключевые слова как правило доступны в шаблонах для команд, похожих на log:

    author        Строка. Неизмененный автор набора изменений.
    bisect        Строка. Состояние поиска делением пополам (bisect) набора
                  изменений.
    bookmarks     Список строк. Все закладки, ассоциированные с набором
                  изменений.
    branch        Строка. Имя ветки, на которую был зафиксирован набор
                  изменений.
    branches      Список строк. Имя ветки, на которую был зафиксирован набор
                  изменений. Будет пустым, если имя ветки было default.
    children      Список строк. Дочерние ревизии набора изменений.
    date          Информация о дате. Дата фиксации набора изменений.
    desc          Строка. Текст описания набора изменений.
    diffstat      Строка. Статистика изменений в следующем формате:
                  "измененные файлы: +добавленных/-удаленных строк"
    file_adds     Список строк. Файлы, добавленные этим набором изменений.
    file_copies   Список строк. Файлы, скопированные в этом наборе изменений,
                  вместе с их источниками.
    file_copies_switch
                  Список строк. То же, что "file_copies", но отображается
                  только если была установлена опция --copied.
    file_dels     Список строк. Файлы, удаленные этим набором изменений.
    file_mods     Список строк. Файлы, измененные этим набором изменений.
    files         Список строк. Все файлы, измененные, добавленные или
                  удаленные этим набором изменений.
    latesttag     Строка. Последняя глобальная метка среди предков данного
                  набора изменений.
    latesttagdistance
                  Целое число. Самый длинный путь до последней метки.
    node          Строка. Хэш набора изменений в виде 40-значной
                  шестнадцатеричной строки.
    p1node        Строка. Хэш первого родителя набора изменений в виде
                  40-значного шестнадцатиричного числа. Если у данного набора
                  изменений родителя нет, все цифры равны 0.
    p1rev         целое число. Локальный номер ревизии первого родителя набора
                  изменений, либо -1, если родителей у него нет.
    p2node        Строка. Хэш второго родителя набора изменений в виде
                  40-значного шестнадцатиричного числа. Если у данного набора
                  изменений второго родителя нет, все цифры равны 0.
    p2rev         целое число. Локальный номер ревизии второго родителя набора
                  изменений, либо -1, если второго родителе у него нет.
    parents       Список строк. Родители ревизии в формате "номер
                  ревизии:хэш". Если набор изменений имеет только одного
                  "естественного" родителя (предшествующая ревизия), ничего не
                  показывается.
    phase         Строка. Имя фазы набора изменений.
    phaseidx      Целое число. Индекс фазы набора изменений.
    rev           Целое число. Локальный номер ревизии в этом хранилище.
    tags          Список строк. Все метки, ассоциированные с набором
                  изменений.

    Ключевое слово "date" не создает читаемого вывода. Если вы хотите
    использовать дату в выходном тексте, можно использовать для этого фильтр.
    Фильтры - это функции, которые возвращают строку, основанную на входной
    переменной. Убедитесь, что сначала используется фильтр, преобразующий
    входные значения в строки, если вы хотите применить фильтр, принимающий на
    вход строку, к входной переменной типа список. Можно также использовать
    цепочку фильтров для получения желаемого результата:

      $ hg tip --template "{date|isodate}\n"
      2008-08-21 18:22 +0000

    Список фильтров (вход, описание):

    addbreaks     Произвольный текст. Добавляет XHTML-тег "<br />" перед
                  окончанием каждой строки кроме последней.
    age           Дата. Возвращает читаемый интервал дат/времени между данной
                  датой/временем и текущей датой/временем.
    basename      Произвольный текст. Интерпретирует текст как путь и
                  возвращает последний его компонент после разбиения по
                  разделителям пути (игнорируя разделители на конце).
                  Например, "foo/bar/baz" преобразуется в "baz", а "foo/bar//"
                  - в "bar".
    date          Дата. Возвращает дату в формате Unix, включая часовой пояс:
                  "Mon Sep 04 15:13:13 2006 0700".
    domain        Произвольный текст. Ищет первую строку, которая выглядит как
                  email-адрес, и вычленяет из нее домен. Пример: "User
                  <user@example.com>" преобразуется в "example.com".
    email         Произвольный текст. Выделяет первую строку, которая выглядит
                  как email-адрес. Пример: "User <user@example.com>"
                  преобразуется в "user@example.com".
    emailuser     Произвольный текст. Возвращает пользователя из email-адреса.
    escape        Произвольный текст. Заменяет спецсимволы XML/XHTML "&", "<"
                  и ">" соответствующими сущностями XML и отфильтровывает NUL-
                  символы.
    fill68        Произвольный текст. Делает строки не длиннее 68 символов.
    fill76        Произвольный текст. Делает строки не длиннее 76 символов.
    firstline     Произвольный текст. Возвращает первую строку текста.
    hex           Произвольный текст. Преобразует двоичный идентификатор
                  ревизии в длинную шестнадцатеричную форму.
    hgdate        Дата. Возвращает дату в виде пары чисел: "1157407993 25200"
                  (метка времени Unix, смещение часового пояса).
    isodate       Дата. Возвращает дату в формате ISO 8601: "2009-08-18 13:00
                  +0200".
    isodatesec    Дата. Возвращает дату в формате ISO 8601 включая секунды:
                  "2009-08-18 13:00:13 +0200". См. также фильтр rfc3339date.
    localdate     Дата. Преобразует дату в локальный формат.
    nonempty      Произвольный текст. Возвращает '(none)' если входная строка
                  пуста.
    obfuscate     Произвольный текст. Возвращает входной текст в виде
                  последовательности XML-сущностей.
    person        Произвольный текст. Возвращает имя перед email-адресом,
                  интерпретируя его согласно RFC 5322.
    rfc3339date   Дата. Возвращает дату в Internet-формате, описанном в RFC
                  3339: "2009-08-18T13:00:13+02:00".
    rfc822date    Дата. Возвращает дату, используя формат заголовков email-
                  сообщений: "Tue, 18 Aug 2009 13:00:13 +0200".
    short         Хэш набора изменений. Возвращает хэш набора изменений в
                  сокращенной форме, т.е. строку из 12 шестнадцатеричных
                  символов.
    shortbisect   Произвольный текст. Воспринимает "текст" как статус бисекции
                  и возвращает одну букву, представляющую статус (G: good
                  (хорошая), B: bad (плохая), S: skipped (пропущена), U:
                  untested (не тестировалась), I: ignored (игнорирована).
                  Возвращает один пробел, если "текст" не является корректным
                  статусом бисекции.
    shortdate     Дата. Возвращает дату в виде "2006-09-18".
    stringify     Любой тип. Превращает значение в текст, путем конвертации
                  значений в текст и их объединения.
    strip         Произвольный текст. Удаляет ведущие и замыкающие пробельные
                  символы.
    stripdir      Считает входной текст путем файловой системы и по
                  возможности удаляет последний уровень каталога. Например,
                  "foo" и "foo/bar" преобразуются в "foo".
    tabindent     Произвольный текст. Возвращает текст, каждая строка
                  которого, кроме первой, начинается с символа табуляции.
    urlescape     Произвольный текст. Экранирует все "специальные" символы.
                  Например, "foo bar" превращается в "foo%20bar".
    user          Произвольный текст. Возвращает короткий вариант имени
                  пользователя или email-адреса.

    Note that a filter is nothing more than a function call, i.e.
    "expr|filter" is equivalent to "filter(expr)".

    In addition to filters, there are some basic built-in functions:

    - if(expr, then[, else])
    - ifeq(expr, expr, then[, else])
    - sub(pat, repl, expr)
    - join(list, sep)
    - label(label, expr)
    - date(date[, fmt])
    - fill(text[, width])

    Also, for any expression that returns a list, there is a list operator:

    - expr % "{template}"

    Some sample command line templates:

    - Format lists, e.g. files:

        $ hg log -r 0 --template "files:\n{files % '  {file}\n'}"

    - Join the list of files with a ", ":

        $ hg log -r 0 --template "files: {join(files, ', ')}\n"

    - Format date:

        $ hg log -r 0 --template "{date(date, '%Y')}\n"

    - Output the description set to a fill-width of 30:

        $ hg log -r 0 --template "{fill(desc, '30')}"

    - Use a conditional to test for the default branch:

        $ hg log -r 0 --template "{ifeq(branch, 'default', 'on the main branch',
        'on branch {branch}')}\n"

    - Append a newline if not empty:

        $ hg tip --template "{if(author, '{author}\n')}"

    - Label the output for use with the color extension:

        $ hg log -r 0 --template "{label('changeset.{phase}', node|short)}\n"

    - Invert the firstline filter, i.e. everything but the first line:

        $ hg log -r 0 --template "{sub(r'^.*\n?\n?', '', desc)}\n"