我有以下代码用于获取当前变更集中所有文件的列表:
def changesets(repo, node):
if node == None:
yield repo[None]
else:
for rev in xrange(repo[node].rev(), len(repo)):
yield repo[rev]
def files(repo, node):
for ctx in changesets(repo, node):
for filename in ctx.files():
...
但事实证明,在 changeset.files() 中返回所有已更改的文件,而不仅仅是那些标记为已提交的文件。
Mercurial 当然,实际上知道这两种文件之间的区别,所以我mercurial/cmdutil.py
从 mercurial repo 中检查了代码,发现了这段代码:
modified, added, removed = ctx.modified(), ctx.added(), ctx.removed()
...
edittext.extend([_("HG: added %s") % f for f in added])
edittext.extend([_("HG: changed %s") % f for f in modified])
edittext.extend([_("HG: removed %s") % f for f in removed])
但问题是,在预提交挂钩中,所有文件都被标记为已修改,不确定这是故意还是错误。
好的,接下来我尝试使用pretxncommit
or commit
hook 代替precommit
,但在这种情况下 ctx 根本没有modified
,added
和removed
方法。
所以,问题是:如何区分更改的文件和将在预提交挂钩中提交的文件?