Обрезать "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()
считает позицию после тире правильным выбором для перевода строки.