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

时间:2016-01-06 09:43:43

标签: mercurial

如果有办法获得与传入的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%^%. %'

现在我可以显示&#34;添加,删除,修改&#34;使用我基于默认创建的样式〜/ 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哈希。

那么扩展或模板是否有办法实现这一目标?

指向正确方向的任何指针?

1 个答案:

答案 0 :(得分:5)

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

因此,您可以利用--bundle选项将拉取数据存储在临时位置,然后将该捆绑包用作只读叠加存储库。

以下应该能够满足您的需求:

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

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

并且,一旦满意,您不必再次通过网络进行更改,但可以直接从捆绑中抓取它们:

hg pull .hg/changes.hg

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