3

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

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

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

好的,接下来我尝试使用pretxncommitor commithook 代替precommit,但在这种情况下 ctx 根本没有modified,addedremoved方法。

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

4

0 回答 0