Mercurial 获取传入文件更改摘要的最佳方法

Mercurial best way to get summary of incoming file changes

我一直在努力弄清楚是否有办法获得与传入的 hg 状态相同的信息。 (这是使用 hg 版本 1.9.2)

因此,如果您提取一个回购协议,您就可以获得所有更改的摘要:

hg pull
hg status --rev .:default

但是在拉取之前传入最好的是:

hg incoming --stat

这很适合显示已更改的文件。但没有给出所有变更集的总体总结。

现在我可以使用一些 bash 来总结所有文件:

hg in --rev default --template '< {desc|tabindent}\n' -q | sed 's%\t%<   %'
filechanges=`hg in --rev default --template '{files} ' -q`
echo ${filechanges} | xargs -n1 | sort -u | sed -e 's%^%. %'

现在我可以使用我根据默认创建的样式显示 "add,del,modify" ~/hgtemplates/map-cmdline.files:

# specify a changeset
changeset_verbose = 'changeset: {node} {rev} {branch}\ndescription:\n{desc|tabindent}\nFiles:\n{file_mods}{file_adds}{file_dels}{file_copies_switch}\n'
changeset = 'desc: {desc|tabindent}\nFiles:\n{file_mods}{file_adds}{file_dels}{file_copies_switch}\n'
changeset_quiet = '{file_mods}{file_adds}{file_dels}{file_copies_switch}\n'

# Using hg status prefixes

# Modified M prefix
start_file_mods = ''
file_mod = 'M {file_mod}\n'
end_file_mods = ''

# Added A prefix
start_file_adds = ''
file_add = 'A {file_add}\n'
end_file_adds = ''

# Deleted ! prefix
start_file_dels = ''
file_del = '! {file_del}\n'
end_file_dels = ''

# Copies C prefix ??????
start_file_copies = 'copies:     '
file_copy = 'C {name} ({source})\n'
end_file_copies = ''

然后通过以下方式使用它:

hg in --style ~/hgtemplates/map-cmdline.files -q

但是我将不得不使用更复杂的合并脚本,可能是基于名称的 perl 哈希。

那么有没有办法使用扩展程序或模板来做到这一点?

有正确方向的指示吗?

首先,您需要了解 hg incoming 通过线路发送与 hg pull 相同的数据。在许多情况下(您只想查看日志)这很浪费,但是当您需要额外信息时这很好。

因此,您可以利用 --bundle 选项将拉取数据存储在临时位置,然后将捆绑包用作 read-only 覆盖存储库。

以下应该可以满足您的需求:

hg incoming --bundle .hg/changes.hg
hg status -R .hg/changes.hg --rev 'bundle()'

此外,当然还有您可能希望使用 hg -R .hg/changes.hg 执行的任何其他 read-only 存储库操作。 revset bundle() 将包含所有传入的修订。请注意,虽然我在这里跟随您使用 --rev,但我认为您实际上可能想要 --change 选项。

而且,一旦满意,您就不必再次通过网络拉取更改,而是可以直接从包中获取它们:

hg pull .hg/changes.hg

请注意,您可以将捆绑文件放在任何您想要的位置,不一定要 .hg/changes.hg