获取 Mercurial 文件列表中每个文件的最后一次提交
Get last commit for every file of a file list in Mercurial
我有一个 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
,导致我在那里的(比如说)~40 个文件需要 15 秒的计算。 .
有没有更快的方法?
此命令的输出如下所示:
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 个日期,然后文件列表针对该日期更改,或类似这样的内容)
- 即使使用 find+exec,您也可以使用修改后的模板获得更短的(最后一个 exec)链
{date|shortdate}\n
- 您可以使用(已接受的)来自 this question or ask anybody to update mentioned lof extension to current Mercurial (code from 2012 的 perl-ism 现在不起作用)
备选方案(肮脏丑陋的技巧)
在任何情况下,您都可以|只调用一次 hg 并执行一些 post-结果处理。
在这些技巧之前,阅读 hg help filesets
并为您的文件获取一个通用文件集(我想,它 可以 只是 set:sources/php/dracca/endpoint/wiki/**/Wiki*.php
但 TBT!)
之后,您可以:
像这样执行 hg log
hg 日志设置。* --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
…
(有一些不需要的意外文件,因为我在修订中删除了所有文件,这影响了感兴趣的文件,没有过滤器)。您只需要 grep 需要的文件,按 cols 1+2 排序并使用每个文件的最新修订日期
使用hg grep
。对于上面的测试模式
hg grep "." -I setup.* --files-with-matches -d -q
(查找任何更改,仅输出文件名+修订版,短日期)
你会得到类似
的东西
setup.py:1163:2018-11-07
setup.cfg:1118:2017-11-27
并且第 3 列将是您需要的文件的最后修改日期
我有一个 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
,导致我在那里的(比如说)~40 个文件需要 15 秒的计算。 .
有没有更快的方法?
此命令的输出如下所示:
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 个日期,然后文件列表针对该日期更改,或类似这样的内容)
- 即使使用 find+exec,您也可以使用修改后的模板获得更短的(最后一个 exec)链
{date|shortdate}\n
- 您可以使用(已接受的)来自 this question or ask anybody to update mentioned lof extension to current Mercurial (code from 2012 的 perl-ism 现在不起作用)
备选方案(肮脏丑陋的技巧)
在任何情况下,您都可以|只调用一次 hg 并执行一些 post-结果处理。
在这些技巧之前,阅读 hg help filesets
并为您的文件获取一个通用文件集(我想,它 可以 只是 set:sources/php/dracca/endpoint/wiki/**/Wiki*.php
但 TBT!)
之后,您可以:
像这样执行 hg log
hg 日志设置。* --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
…
(有一些不需要的意外文件,因为我在修订中删除了所有文件,这影响了感兴趣的文件,没有过滤器)。您只需要 grep 需要的文件,按 cols 1+2 排序并使用每个文件的最新修订日期
使用
hg grep
。对于上面的测试模式hg grep "." -I setup.* --files-with-matches -d -q
(查找任何更改,仅输出文件名+修订版,短日期)
你会得到类似
的东西setup.py:1163:2018-11-07
setup.cfg:1118:2017-11-27
并且第 3 列将是您需要的文件的最后修改日期