Получить последний коммит для каждого файла списка файлов в Mercurial - PullRequest
1 голос
/ 23 сентября 2019

У меня есть репозиторий hg, и я хотел бы знать дату последнего принятия каждого файла в sources/php/dracca/endpoint/wiki/**/Wiki*.php

Пока у меня есть один вкладыш:

find sources/php/dracca/endpoint/wiki/ -name "Wiki*.php" -exec hg log --limit 1 --template "{date|shortdate}" {} \; -exec echo {} \;

Ноэто кажется очень медленным, поскольку (я полагаю) find делает 1 hg вызов на файл, что приводит к 15 секундам вычисления для (скажем) ~ 40 файлов, которые у меня там есть ...

Есть либолее быстрый путь?

Вывод этой команды выглядит следующим образом:

2019-09-20 sources/php/dracca/endpoint/wiki/characters/colmarr/WikiCharactersColmarrEndpoint.php
2019-09-20 sources/php/dracca/endpoint/wiki/characters/dracquints/allgroup/WikiCharactersDracquintsAllgroupEndpoint.php
...

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

1 Ответ

2 голосов
/ 24 сентября 2019
  1. Даже с find + exec у вас может быть более короткая (на один последний exec) цепочка с измененным шаблоном {date|shortdate}\n
  2. Вы можете использовать (принятый) perl-ism из этот вопрос или попросить кого-нибудь обновить упомянутое расширение lof до текущего Mercurial ( код с 2012 не будет работать сейчас)

Альтернативы (грязные уродливые хаки)

В любом случае вы можете | вызвать hg только один раз и выполнить некоторую постобработку результатов.

Перед этим трюком прочитайте hg help filesets и получите один общий набор файлов для ваших файлов (Я полагаю, это может быть просто set:sources/php/dracca/endpoint/wiki/**/Wiki*.php, но TBT!)

После этого вы можете:

  • Выполнить журнал hg следующим образом

    hg log setup. * --Template "{files% '{file} {rev} {date | shortdate} \ n'}"

(я использовал простойшаблон для тестирования, вы должны иметь собственный набор файлов)

получить вывод в таком виде

setup.py 1163 2018-11-07
README.md 1162 2018-11-07
setup.py 1162 2018-11-07
hggit/git_handler.py 1124 2018-05-01
setup.py 1124 2018-05-01
setup.cfg 1118 2017-11-27
setup.py 1117 2017-11-27
hggit/git2hg.py 1111 2017-11-27
hggit/overlay.py 1111 2017-11-27
setup.py 1111 2017-11-27
…

(есть некоторые нежелательные неожиданные файлы, потому что я все файлы в ревизия, затрагивающая интересующий файл, без фильтра).Вы должны выполнить поиск только необходимых файлов, отсортировать по столбцам 1 + 2 и использовать дату последней редакции каждого файла

  • Использовать hg grep.Для вышеуказанного тестового шаблона

    hg grep "."-I настройки. * --Files-with-match -d -q

(найти любые изменения, вывод только имя файла + редакция, короткая дата)

you 'Вы получите что-то вроде

setup.py:1163:2018-11-07
setup.cfg:1118:2017-11-27

, а 3-й столбец будет необходимой датой последнего изменения файла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...