Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
hgbook.pdf
Скачиваний:
50
Добавлен:
17.03.2015
Размер:
3.15 Mб
Скачать

Настройка вывода Mercurial

Как мы уже отмечали выше, ключевое слово date выводит не человекочитаемый текст, поэтому мы должны обрабатывать его специально. Это связано с использованием фильтров, о которых смотрите в разделе Раздел 11.6, «Фильтрация ключевых слов, чтобы отобразить результат».

$ hg log -r1 --template 'date: {date}\n' date: 1328191809.00

$ hg log -r1 --template 'date: {date|isodate}\n' date: 2012-02-02 14:10 +0000

11.5. Escape последовательности

Движок шаблонов Mercurial распознаёт наиболее часто используемые управляющие последовательности в строках. Когда он видит символ обратной косой черты («\»), он читает следующий символ и заменяет 2 символа на один, как описано ниже.

\: Обратная косая черта, «\», ASCII 134.

\n: Перевод строки, ASCII 12.

\r: Возврат каретки, ASCII 15.

\t: Табуляция, ASCII 11.

\v: Вертикальная табуляция, ASCII 13.

\{: Открывающая фигурная скобка, «{», ASCII 173.

\}: Закрывающая фигурная скобка, «}», ASCII 175.

Как указано выше, если вы хотите при развёртывании шаблона использовать символы «\», «{» или «}», вы должны экранировать их.

11.6. Фильтрация ключевых слов, чтобы отобразить результат

Некоторые из результатов расширения шаблона не просты в использовании. Mercurial позволяет указать необязательную цепочку фильтров, чтобы изменить результат расширения ключевого слова. Вы уже видели, общий фильтр, isodate, в действии выше, чтобы сделать дату читаемой.

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

addbreaks: Любой текст. Добавляет тег XHTML «<br/>» перед концом каждой строки, кроме последней. Например, «foo\nbar» преобразуется в «foo<br/>\nbar».

age: ключевое слово date. Формирует интервал времени который прошел со времени ревизии до текущего времени. Возвращает строку типа «10 minutes».

basename: Любой текст, но наиболее полезна для работы с ключевым словом files и похожими. Применённый к пути файла, и верней имя файла. Например, «foo/bar/baz» преобразуется в «baz».

date: ключевое слово date. Формирует дату в том же формате, что и команда Unix date, но с указанием

часового пояса. Возвращает строку, например «Mon Sep 04 15:13:13 2006 -0700».

domain: Любой текст, но наиболее полезно для ключевого слова author. Находит первую строку, которая выглядит как адрес электронной почты, и извлекает только доменную часть. Например, «Bryan O'Sullivan <bos@serpentine.com>» преобразуется в «serpentine.com».

132

Настройка вывода Mercurial

email: Любой текст, но наиболее полезно для ключевого слова author. Находит первую строку, которая выглядит как адрес электронной почты, и извлекает email. Например, «Bryan O'Sullivan

<bos@serpentine.com>» преобразуется в «bos@serpentine.com».

escape: Любой текст. Заменяет спецсимволы XML/XHTML «&», «<» и «>» на XML-entities.

fill68: Любой текст. Разбивает текст чтоб он помещался в 68 колонок. Это полезно, сделать перед тем как передать текст на фильтр tabindent, если мы все еще хотим, чтобы он помещается в 80 колонок фиксированного шрифта окна.

fill76: Любой текст. Разбивает текст чтоб он помещался в 76 колонок.

firstline: Любой текст. Возвращает первую строку текста, без завершающих строк.

hgdate: ключевое слово date. Генерирует дату, как пара читаемых чисел. Возвращает строку вида

«1157407993 25200».

isodate: ключевое слово date. Генерирует дату, как текстовую строку в формате ISO 8601. Возвращает строку

вида «2006-09-04 15:13:13 -0700».

obfuscate: Любой текст, но наиболее полезно для ключевого слова author. Возвращает текст преобразованный в последовательность XML entities. Это помогает победить некоторых, особенно глупых сканеров собирающих адреса для спам-ботов.

person: Любой текст, но наиболее полезно для ключевого слова author. Возвращает текст перед адресом email. Например, «Bryan O'Sullivan <bos@serpentine.com>» преобразуется в «Bryan O'Sullivan».

rfc822date: ключевое слово date. Генерирует дату, как текстовую строку в формате использующемся в

заголовках email. Возвращает строку вида «Mon, 04 Sep 2006 15:13:13 -0700».

short: Хеш ревизии. Возвращает короткую форму хеша ревизии. 12-символьную шестнадцатеричную строку.

shortdate: ключевое слово date. Генерирует год, месяц и день даты. Возвращает строку вида

«2006-09-04».

strip: Любой текст. Удаляет все начальные и конечные пробелы из строки.

tabindent: Любой текст. Возвращает текст в котором каждая строка, кроме первой, начинаются с символа табуляции.

urlescape: Любой текст. Экранирует все символы, которые считаются «специальными» для url-анализаторов. Так, например, foo bar преобразуется в foo%20bar.

user: Любой текст, но наиболее полезно для ключевого слова author. Возвращает часть «user» из email адреса.

Например, «Bryan O'Sullivan <bos@serpentine.com>» преобразуется в «bos».

$ hg log -r1 --template '{author}\n'

Bryan O'Sullivan <bos@serpentine.com>

$ hg log -r1 --template '{author|domain}\n' serpentine.com

$ hg log -r1 --template '{author|email}\n' bos@serpentine.com

$ hg log -r1 --template '{author|obfuscate}\n' | cut -c-76

Bryan O'Sulli

$ hg log -r1

--template

'{author|person}\n'

Bryan O'Sullivan

 

$ hg log -r1

--template

'{author|user}\n'

bos

 

 

$ hg log -r1

--template

'looks almost right, but actually garbage: {date}\n'

looks almost

right, but

actually garbage: 1328191809.00

$ hg log -r1

--template

'{date|age}\n'

2 seconds ago

 

 

133

Настройка вывода Mercurial

$ hg log -r1 --template '{date|date}\n'

Thu Feb 02 14:10:09 2012 +0000

$ hg log -r1 --template '{date|hgdate}\n'

1328191809 0

$ hg log -r1 --template '{date|isodate}\n'

2012-02-02 14:10 +0000

$ hg log -r1 --template '{date|rfc822date}\n'

Thu, 02 Feb 2012 14:10:09 +0000

$ hg log -r1 --template '{date|shortdate}\n'

2012-02-02

$ hg log -r1 --template '{desc}\n' | cut -c-76 added line to end of <<hello>> file.

in addition, added a file with the helpful name (at least i hope that some m $ hg log -r1 --template '{desc|addbreaks}\n' | cut -c-76

added line to end of <<hello>> file.<br/> <br/>

in addition, added a file with the helpful name (at least i hope that some m $ hg log -r1 --template '{desc|escape}\n' | cut -c-76

added line to end of <<hello>> file.

in addition, added a file with the helpful name (at least i hope that some m $ hg log -r1 --template '{desc|fill68}\n'

added line to end of <<hello>> file.

in addition, added a file with the helpful name (at least i hope that some might consider it so) of goodbye.

$ hg log -r1 --template '{desc|fill76}\n' added line to end of <<hello>> file.

in addition, added a file with the helpful name (at least i hope that some might consider it so) of goodbye.

$ hg log -r1 --template '{desc|firstline}\n' added line to end of <<hello>> file.

$ hg log -r1 --template '{desc|strip}\n' | cut -c-76 added line to end of <<hello>> file.

in addition, added a file with the helpful name (at least i hope that some m $ hg log -r1 --template '{desc|tabindent}\n' | expand | cut -c-76

added line to end of <<hello>> file.

in addition, added a file with the helpful name (at least i hope tha $ hg log -r1 --template '{node}\n'

6f5ce6bc18989ecdb1e0ddf5d63d539787a66eb2 $ hg log -r1 --template '{node|short}\n'

6f5ce6bc1898

Примечание

Если вы попробуете применить фильтр к фрагменту данных, который не может быть обработан, Mercurial напечатает исключение Python. Например, попытка запустить фильтр isodate для ключевого слова desc, будет не очень хорошей идеей.

11.6.1. Объединение фильтров

Легко объединять фильтры для получения нужного результата. Следующая цепочка фильтров приводит в порядок описание, убеждаемся что оно влезает в 68 столбцов, потом вставляем отступы в 8 символов (по крайней мере на unix-подобных системах, где табуляция условно занимает 8 символов).

$ hg log -r1 --template 'description:\n\t{desc|strip|fill68|tabindent}\n' description:

added line to end of <<hello>> file.

in addition, added a file with the that some might consider it so) of

helpful name (at least i hope goodbye.

Обратите внимание на использование «\t» (символ табуляции) в шаблоне, чтобы заставить первую строку отступить, это необходимо, поскольку tabindent вставляем отступы везде, кроме первой строки.

134

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]