Как заставить 'hg log --verbose' показывать файлы в несколько строк? - PullRequest
14 голосов
/ 27 декабря 2011

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

Как сделать так, чтобы каждый файл отображался в отдельной строке?

Ответы [ 5 ]

12 голосов
/ 27 декабря 2011

Реальный способ просмотра информации об измененных файлах заключается в использовании hg status. Здесь показаны файлы, которые были изменены в ревизии 100:

$ hg status -c 100

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

Однако вывод hg log контролируется системой шаблонов , и вы можете написать свои собственные стили для нее. Стиль по умолчанию здесь , и вы можете настроить, чтобы сделать то, что вы хотите, изменив

file = ' {file}'

до

file = '{file}\n'

Затем сохраните новый стиль как my-default.style и добавьте

[ui]
style = ~/path/to/my-default.style

в ваш файл конфигурации. Это дает вам один файл на строку, и это работает, даже если в именах файлов есть пробелы.

Мне известна одна проблема: вы теряете цвета в выводе hg log. Оказывается, Mercurial обманывает здесь! На самом деле он не использует шаблон по умолчанию, который я показал вам при создании вывода журнала. Он вообще не использует систему шаблонов, он просто генерирует вывод с использованием прямого кода, поскольку это быстрее. Проблема в том, что расширение цвета работает только с жестко заданным шаблоном. Когда вы переключаетесь на пользовательский шаблон и тем самым запускаете механизм шаблонов, вы теряете вывод цвета.

Однако вы можете восстановить цвета, вставив управляющие коды ANSI непосредственно в шаблон (в Unix-подобных системах). Изменение

changeset = 'changeset:   {rev}:{node|short}\n{branches}...

до

changeset = '\033[33mchangeset:   {rev}:{node|short}\033[0m\n{branches}...

делает трюк и жестко кодирует желтую строку заголовка для набора изменений. Отрегулируйте также строки changeset_verbose и changeset_quiet, и вы получите цветной вывод с собственным шаблоном.

5 голосов
/ 03 февраля 2015

Файл справки *1001* hg содержит этот гем в своих примерах.

Формат списков, например файлы:

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

Это работает в Windows без перевода.

2 голосов
/ 27 декабря 2011

Я считаю, что нет встроенного способа для достижения этой цели, но немного sed (также доступно для Windows: http://gnuwin32.sourceforge.net/packages/sed.htm) может помочь:

hg log --template "Rev: {rev}:{node}\nDate: {date|isodate}\nFiles: {files}\n\n" -l 10 | sed -e '/^Files:/s/ /\n  /g'

Вывод:

Rev: 1:2538bd4661c755ccab9b68e1d5e91144f6f97d33
Date: 2011-12-20 15:47 +0100
Files:
  test1.txt

Rev: 2:853a6f3c505308c9babff5a5a2f1e09303f1689c
Date: 2011-12-20 15:44 +0100
Files:
  test2.txt
  test3.txt

Объяснение sed -e '/^Files:/s/ /\n /g':

  1. /^Files:/ ищет строки, начинающиеся с "Files:", и применяет следующий поиск и заменяет только эти строки
  2. s/ /\n /g заменяет все строки новой строкой, за которой следуют пробелы.

Это решение не будет работать, если имена файлов содержат пробелы.

0 голосов
/ 13 февраля 2015

Чтобы увидеть все файлы, которые были изменены в ревизии, используйте:

hg status --change REV
0 голосов
/ 12 января 2014
  • hg log --style changelog

ИЛИ

  • hg log --template "Description: {desc}\n" - перечислены поддерживаемые ключевые слова, такие как desc, файлы и т. Д. здесь
...