生成包含在修订之间更改的文件的目录列表

Generating a list of directories containing files changed between revisions

我从this answer知道我能做到

hg status --rev x:y

列出在修订 xy 之间更改的文件。有没有办法不获取单个文件,而只获取它们所在的目录?

例如,如果上面的命令会产生

A Foo\Bar\SomeFile.txt
A Foo\Bar\AnotherFile.cs
M Baz\AnotherFile.txt

我想得到

Foo\Bar
Baz

相反。

不是现成的解决方案(见尾注),只是提示

  • 您可以使用模板更改 hg st 的输出格式,就像对任何 "log-like" hg 命令所做的一样(参见 -T 选项)
  • 在模板中,您可以使用过滤器 "dirname" 过滤输出(文件名),这将去除文件的文件名部分

但我尝试了一下并发现(在我的回购协议中)一些 "oddities"(和 预期的 麻烦)

尾注:

  1. 虽然 hg st 的默认输出会消除结果中的重复文件名(如果出现),但您的模板不会(同样,"by default")
  2. 我看到相同状态范围的模板化输出结果错误(完全错误)

>hg st --rev 1170:tip
M hggit\__init__.py
M hggit\compat.py
M hggit\git_handler.py
M hggit\gitdirstate.py
M hggit\hg2git.py
M tests\test-illegal-contents.t

我的

>hg st --rev 1170:tip --template "{files % '{file}\n'}"
hggit/__init__.py
hggit/__init__.py
hggit/__init__.py
hggit/__init__.py
hggit/__init__.py
hggit/__init__.py

(文件的六倍 仅来自提示 而不是范围)

  1. 即使使用 hg log -T 而不是 st(它给出 所有文件),你也会遇到第 1 页的问题:"more than one file-entry in output for the same file"