Mercurial: последние изменения в файле - PullRequest
0 голосов
/ 10 декабря 2018

Я ищу способ сделать вывод Mercurial в виде таблицы:

File        Most recent revision changing the file          Date of that revision
====        ======================================          =====================
foo.py      44159adb0312                                    2018-09-16 12:24
...         ...                                             ...

Это так же, как это делает github на странице обзора "Код".(скриншот из torvalds / linux): screenshot github

«Самые последние» могут ссылаться на дату или на иерархию DAG относительно текущего набора изменений или, возможно, на текущую ветвь.Возможно, последнее более полезно, но в моем конкретном случае использования это не имеет значения.

Я также хотел бы иметь возможность предоставить список файлов или подкаталог, для которого я хочуТаблица.(Я не обязательно хочу это для всего)

Я знаю, что я мог бы сделать это с помощью небольшого скрипта с циклом по hg log -l 1 <file>, но мне было интересно, есть ли более эффективное / более естественное решение.

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Git будет следовать за коммитом DAG, потому что это все, что у него есть.В Mercurial у вас есть (много) больше опций, потому что у вас больше данных.

Вероятно, идеальным вариантом здесь является follow(file, .) (в сочетании с first или last в зависимости от ситуации).Но, как скажет hg help revset, у вас есть следующие опции (я сократил список до очевидных применимых):

  • ancestors(set[, depth])

    Использованиеэто с set, являющимся ., чтобы получить предков текущего коммита, например, если вы хотите выполнить DAG-следование а-ля Git.Или используйте ::., который в основном совпадает.

  • branch(string or set)

    Используйте это с ., чтобы получить все коммиты в текущей ветви.Объедините его с другими ограничителями (например, parents), чтобы не смотреть на последующие коммиты в текущей ветви, если вы не на кончике текущей ветви.

  • file(pattern)

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

  • filelog(pattern)

    Как file, но быстрее, торгуянекоторая точность по скорости (см. документацию для получения дополнительной информации).

  • follow([file[, startrev]])

    Цитировать документацию:

    Псевдоним для"::." (предки первого родителя рабочего каталога).Если указан шаблон файла, следуют истории файлов, соответствующих данному шаблону в ревизии, заданной startrev, включая копии.

  • modifies(pattern)

    Использованиеэто (с любым шаблоном, а не просто глобусом), чтобы найти наборы изменений, которые изменяют некоторый файл или каталог.Я думаю, что это ограничено модификациями типа M, а не добавлением или удалением файлов, так как есть также adds(pattern) и removes(pattern).Используйте все три, or -ed вместе, чтобы найти любые операции добавления / изменения / удаления.

  • first(set, [n])
    last(set, [n])
    limit(set[, n[, offset]])

    Используйте это, чтобы извлечь конкретную запись из Revset.

При поиске вперед (по умолчанию), last(follow(file, .)), кажется, работает хорошо, чтобы найти правильныйпересмотр.Как вы заметили, вы должны делать это один раз для каждого файла - это будет определенно быстрее, если вы напишите свой собственный плагин Mercurial, чтобы сделать это без перезагрузки остальной системы все время.

0 голосов
/ 11 декабря 2018

Вы не будете обходить все файлы.Но с hg manifest вы получаете этот список файлов.Затем создайте шаблон для вывода по мере необходимости:

for f in $(hg ma); do hg log -l1 $f -T"$f\t\t{rev}:{node|short}\t\t{date|isodate}"; done

Это дает вывод наподобие

.hgignore               38289:f9c426385853              2018-06-09 13:34 +0900
.hgsigs         38289:f9c426385853              2018-06-09 13:34 +0900
.hgtags         38289:f9c426385853              2018-06-09 13:34 +0900

Возможно, вы захотите еще больше изменить форматирование вывода.См. mercurial wiki для полного обзора шаблонов вывода.

0 голосов
/ 10 декабря 2018

Каким-то более эффективным / более естественным решением может быть:

  • создать шаблон | стиль для желаемого вывода журнала (я не могу предсказать, какой путь будет лучше для вас )
  • создать псевдоним для hg log -l 1 --template ... или hg log -l 1 --style ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...