Обрезать "desc" в N символов в выводе журнала hg с помощью шаблонов

Я пытаюсь создать собственный шаблон для hg log с частью, которая показывает первые N (например, 72) символов первой строки. Исходя из этого ответа на другой вопрос, который я получил до сих пор:

hg log --template '{desc|strip|firstline}\n'

Теперь я пытаюсь ограничить этот бит определенным количеством символов. Тем не менее, соответствующие документы по использованию шаблона не дают результатов поиска для "substring", "left" и т. Д. Я пробовал несколько вещей, в том числе

hg log --template '{desc|strip|firstline|strip|50}\n'

и только для тестирования

hg log --template '{desc|strip|50}\n'

но они дают ошибку:

hg: ошибка разбора: неизвестная функция '50'

Я рискнул бы предположить, что то, что я хочу, возможно, но я просто не могу найти подходящий синтаксис. Как я могу создать шаблон, который выводит первую строку сообщения коммита, максимум до N символов?

1 ответ

Решение

Вы можете использовать регулярные выражения и sub() функция для достижения этой цели. Например:

hg log --template '{sub("^(.{0,50})(.|\n)*","\\1",desc)}\n'

sub() Функция принимает три аргумента: шаблон, замену и строку для обработки. В этом примере мы используем группу, которая захватывает от 0 до 50 символов (кроме новой строки), за которой следует другой шаблон, который выползает вверх по остальным (так что он отбрасывается). Строка замены просто показывает первую группу, и мы используем desc в качестве входа. Просто измените 50 в приведенном выше примере с шириной, которую вы на самом деле хотите.

Если вы не хотите, чтобы описания обрезались в середине слова, вы также можете использовать fill() в сочетании с firstline, Вот, fill() разбит ввод на строки, затем мы используем первую строку вывода. Пример:

hg log --template '{fill(desc,"50")|firstline}\n'

Обратите внимание, что слова с тире в них могут быть обрезаны, так как fill() считает позицию после тире правильным выбором для перевода строки.

Другие вопросы по тегам