【问题标题】:How to get files for mercurial changeset in rhodecode extension如何在 rhodecode 扩展中获取 mercurial 变更集的文件
【发布时间】:2021-01-24 02:19:57
【问题描述】:

我为 rhodecode 启用了 rcextensions,并复制了示例 _pre_push_hook,它应该允许验证文件大小,例如如果文件大于给定大小,则拒绝任何文件。

我发现该钩子不起作用:它允许所有文件,无论其大小如何,经过一番挖掘后,我发现 relevant helper function 缺少 mercurial 的实现:

def get_hg_files(repo, vcs_repo, refs):
    files = []
    return files

谁能建议如何实现此功能,以获取新变更集中文件的信息?

我尝试过调整等效的 git 辅助函数,注意到 mercurial 存储库对象包含更方便的 get_diff 方法。但我无法成功获取 repo 的相关提交,我猜是因为它们尚未添加到 repo 中。

def get_hg_files(repo, vcs_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 rhodecode


    【解决方案1】:

    这是 Mercurial 的一个问题,在 rcextensions 中无法看到数据“先于”在 rcextensions 中推送,因为看到数据的对象仅在 Mercurial 的内部挂钩中,等等。我们仍在对此进行调查,但似乎需要将逻辑移入钩子本身。对于 SVN 和 GIT,这很好用

    【讨论】:

    • “我们”是谁? :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    相关资源
    最近更新 更多