问题描述
我为 rhodecode 启用了 rcextensions,并复制了示例 _pre_push_hook,它应该允许验证文件大小,例如拒绝任何大于给定大小的文件。
我发现钩子不起作用:它允许所有文件,无论它们的大小如何,经过一番挖掘,我发现 relevant helper function 缺少 mercurial 的实现:
def get_hg_files(repo,vcs_repo,refs):
files = []
return files
任何人都可以建议应该如何实现此功能,以获取新变更集中文件的信息?
我尝试调整等效的 git helper 函数,注意到 mercurial 存储库对象包括更方便的 get_diff 方法。但是我无法成功获得 repo 的相关提交,我猜是因为它们尚未添加到 repo 中。
def get_hg_files(repo,refs):
files = []
for data in refs:
old_rev = data['old_rev']
new_rev = data['new_rev']
# These fail,as the commit is not found
old_commit = vcs_repo.get_commit(old_rev)
new_commit = vcs_repo.get_commit(new_rev)
vcs_diff = vcs_repo.get_diff(old_commit,new_commit)
diff_processor = diffs.DiffProcessor(vcs_diff,format='newdiff')
files = _parsed = diff_processor.prepare()
return files
我意识到我可以使用纯 mercurial 钩子作为替代方案,但我有兴趣在这里使用 rhodecode 钩子。
解决方法
这是 Mercurial 的一个问题,并且在 rcextensions 中无法看到数据“先于”推送到 rcextensions 内部,因为看到数据的对象仅在 Mercurial 的内部钩子中,等等。我们仍在对此进行调查,但似乎需要将逻辑移至钩子本身。对于 SVN 和 GIT,这很好用