Mercurial pre-commit hook:如何区分已更改和已提交的文件

时间:2014-07-04 02:17:10

标签: mercurial pre-commit-hook mercurial-hook pre-commit

我有以下代码用于获取当前变更集中所有文件的列表:

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 repo检查了mercurial/cmdutil.py中的代码,并找到了这段代码:

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])

但事实是,在预提交挂钩中,所有文件都被标记为已修改,不确定这是故意还是错误。

好的,接下来我尝试的是使用pretxncommitcommit挂钩代替precommit,但在这种情况下,ctx没有modified,{ {1}}和added方法。

所以,问题是:如何区分已更改的文件和将在预提交钩子中提交的文件?

0 个答案:

没有答案