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

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

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

Некоторые встроенные стили поставляются с Mercurial. Их можно посмотреть с помощью "hg log --template list". Пример использования:

$ hg log -r1.0::1.1 --template changelog

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

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

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

author
Строка. Неизмененный автор набора изменений.
bisect
Строка. Состояние поиска делением пополам (bisect) набора изменений.
bookmarks
Список строк. Все закладки, ассоциированные с набором изменений.
branch
Строка. Имя ветки, на которую был зафиксирован набор изменений.
children
Список строк. Дочерние ревизии набора изменений.
currentbookmark
Строкa. Активная закладка, если она установлена на набор изменений.
date
Информация о дате. Дата фиксации набора изменений.
desc
Строка. Текст описания набора изменений.
diffstat
Строка. Статистика изменений в следующем формате: "измененные файлы: +добавленных/-удаленных строк"
extras
Список словарей с парами ключ-значение из поля 'extras' текущего набора изменений.
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
Целое число. Локальный номер ревизии в этом хранилище.
subrepos
Список строк. Подхранилища, обнавленные в наборе изменений.
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".
splitlines
Произвольный текст. Разбивает текст в список строк.
stringify
Любой тип. Превращает значение в текст, путем конвертации значений в текст и их объединения.
strip
Произвольный текст. Удаляет ведущие и замыкающие пробельные символы.
stripdir
Считает входной текст путем файловой системы и по возможности удаляет последний уровень каталога. Например, "foo" и "foo/bar" преобразуются в "foo".
tabindent
Произвольный текст. Возвращает текст, каждая непустая строка которого, кроме первой, начинается с символа табуляции.
urlescape
Произвольный текст. Экранирует все "специальные" символы. Например, "foo bar" превращается в "foo%20bar".
user
Произвольный текст. Возвращает короткий вариант имени пользователя или email-адреса.

Обратите внимание, что фильтр это просто вызов функции, т.е. "expr|filter" эквивалентно "filter(expr)".

В дополнение к фильтрам, существует несколько встроенных функций:

Также, для любого выражения, возвращающего список, есть оператор:

Примеры шаблонов в командной строке: