跳到内容

仓库处理器

本文档描述了 Django Packages 仓库处理器 API。

在 Django Packages 中添加像 GitHub 这样的新仓库系统是一项相对简单的工作。你需要提供两样东西

  1. 在 apps.models.repos 目录中添加一个新的仓库处理器,并遵循所述的 API
  2. 添加测试来检查你的工作
  3. 文档中记录所有特殊设置。
  4. 更改 SUPPORTED_REPO 以包含新的仓库处理器的名称。

如果无法自动检测(例如,自托管的 Forgejo 实例),请将包上的 Repo host 字段设置为所需的处理器。即使仓库 URL 不匹配内置正则表达式,也会使用选定的处理器。

如果我的目标仓库不支持所有必要的字段怎么办?

假设你想使用 GitBlarg,一个新服务,其 API 不提供仓库关注者数量或参与者数量。为了处理它们,你只需设置这些值,直到 GitBlarg 支持正确的数据。

例如,正如你在 apps.models.repos.base_handler.BaseHandler.fetch_metadata() 方法中看到的那样,它期望看到的 Package 实例是一个逗号分隔的值

def fetch_metadata(self, package):
    """Accepts a package.models.Package instance:

        return: package.models.Package instance

    Must set the following fields:

        package.repo_watchers (int)
        package.repo_forks (int)
        package.repo_description (text )
        package.participants = (comma-separated value)

    """
    raise NotImplemented()

所以你的代码可能会做以下事情

from GitBlargLib import GitBlargAPI


def fetch_metadata(self, package):
    # fetch the GitBlarg data
    git_blarg_data = GitBlargAPI.get(package.repo_name())

    # set the package attributes
    package.repo_watchers = 0  # GitBlagAPI doesn't have this so we set to 0
    package.repo_forks = git_blarg_data.forks
    package.repo_description = git_blarg_data.note
    package.participants = (
        ""  # GitBlagAPI doesn't have this so we set to an empty string
    )

    return package

克隆 GitBlarg 的仓库怎么样,这样我们就能更好地查看数据?

问题在于,开发人员、设计师和经理会很高兴地将千兆字节的数据放入 git/hg/svn/fossil/cvs 仓库中。对于单个项目来说,这听起来不算多,但是当你处理 Django Packages 实例中的数千个包时,数据的规模变得……好吧……令人恐惧。现在轻微的烦恼变成了一个惊人的大问题。

因此,试图通过这种方式解决问题的仓库处理器上的拉取请求将一概拒绝