跳转到主要内容

解析和构造GitHub仓库URL和指定符

项目描述

Project Status: Active — The project has reached a stable, usable state and is being actively developed. CI Status https://codecov.io/gh/jwodder/ghrepo/branch/master/graph/badge.svg https://img.shields.io/pypi/pyversions/ghrepo.svg MIT License

GitHub | PyPI | 问题 | 变更日志

ghrepo 从各种GitHub URL格式(或仅从形式为 OWNER/REPONAMEREPONAME 的字符串)中提取GitHub仓库的所有者 & 名称,并结果对象提供反向确定可能的URL的属性。还包括一个用于确定本地Git仓库的GitHub所有者 & 名称的函数,以及其他几个有用的Git仓库检查函数。

安装

ghrepo 需要 Python 3.7 或更高版本。只需使用 pip 为 Python 3 安装即可(您有pip吗?)

python3 -m pip install ghrepo

API

GHRepo

class GHRepo(typing.NamedTuple):
    owner: str
    name: str

GitHub仓库所有者和基础名称的一对。将一个GHRepo实例字符串化会生成形式为{owner}/{name}的仓库“全名”。

property api_url: str

通过GitHub REST API访问仓库的基本URL;这是一个形式为https://api.github.com/repos/{owner}/{name}的字符串。

property clone_url: str

通过HTTPS克隆仓库的URL

property git_url: str

通过本地Git协议克隆仓库的URL

property html_url: str

仓库的Web界面URL

property ssh_url: str

通过SSH克隆仓库的URL

classmethod parse_url(url: str) -> GHRepo

解析GitHub仓库URL。以下URL格式被识别

  • [https://[<username>[:<password>]@]][www.]github.com/<owner>/<name>[.git][/]

  • [https://]api.github.com/repos/<owner>/<name>

  • git://github.com/<owner>/<name>[.git]

  • [ssh://]git@github.com:<owner>/<name>[.git]

其他所有格式都会产生一个ValueError

classmethod parse(
    spec: str,
    default_owner: Optional[Union[str, Callable[[], str]]] = None,
) -> GHRepo

解析GitHub仓库指定器。这可以是URL(由parse_url()接受)或形式为{owner}/{name}的字符串。如果指定了default_owner(作为一个字符串或一个零参数的可调用对象,返回一个字符串),字符串仅仅是仓库名称也是可接受的,生成的GHRepo实例将把其owner设置为给定的值。

函数和常量

注意:所有函数都需要安装Git才能工作。我不确定最小可行的Git版本,但这些函数应该与任何至少从版本1.7开始的Git一起工作。

get_local_repo(dirpath: Optional[AnyPath] = None, remote: str = "origin") -> GHRepo

通过解析指定的远程的URL来确定位于或包含目录dirpath(默认:当前目录)的Git仓库的GitHub仓库。如果给定的远程不存在,则引发NoSuchRemoteError。如果发生不同的Git错误,如给定的路径不在Git仓库中,则引发subprocess.CalledProcessError

get_branch_upstream(branch: str, dirpath: Optional[AnyPath] = None) -> GHRepo

(自版本0.5.0起新增) 确定位于或包含目录dirpath(默认:当前目录)中给定分支的上游远程的GitHub仓库。

如果给定的分支没有配置上游远程,则引发NoUpstreamError(这包括分支不存在的情况)。如果发生不同的Git错误,如给定的路径不在Git仓库中,则引发subprocess.CalledProcessError

get_current_branch(dirpath: Optional[AnyPath] = None) -> str

获取位于或包含目录dirpath(默认:当前目录)的Git仓库的当前分支。如果仓库处于分离的HEAD状态,则引发DetachedHeadError。如果发生不同的Git错误,如给定的路径不在Git仓库中,则引发subprocess.CalledProcessError

is_git_repo(dirpath: Optional[AnyPath] = None) -> bool

测试给定的目录(默认:当前目录)是否是Git仓库或包含在其中

GH_USER_RGX: str

一个用于有效GitHub用户名或组织名的正则表达式字符串(非锚定)。

GH_REPO_RGX: str

一个用于有效GitHub仓库名(不含“.git”扩展名)的正则表达式字符串(非锚定)。

异常

class DetachedHeadError(Exception)

(自版本0.6.0起新增) 如果Git仓库处于分离的HEAD状态,则由get_current_branch()引发。

class NoSuchRemoteError(Exception)

(自版本0.6.0起新增) 如果在GitHub仓库中不存在给定的远程,则由get_local_repo()引发。查询到的远程作为remote属性可用。

class NoUpstreamError(Exception)

(自版本0.6.0起新增) 如果给定的分支没有配置远程,则由get_branch_upstream()引发。查询到的分支作为branch属性可用。

命令

ghrepo 还提供了一个同名的命令,用于获取与本地 Git 仓库关联的 GitHub 仓库。

ghrepo [<options>] [<dirpath>]

默认情况下,ghrepo 命令仅输出仓库的“全名”(形如 {owner}/{name} 的字符串)。如果提供了 -J--json 选项,则输出一个 JSON 对象,包含仓库所有者、名称、全名和单个 URL 字段,如下所示

{
    "owner": "jwodder",
    "name": "ghrepo",
    "fullname": "jwodder/ghrepo",
    "api_url": "https://api.github.com/repos/jwodder/ghrepo",
    "clone_url": "https://github.com/jwodder/ghrepo.git",
    "git_url": "git://github.com/jwodder/ghrepo.git",
    "html_url": "https://github.com/jwodder/ghrepo",
    "ssh_url": "git@github.com:jwodder/ghrepo.git"
}

选项

-J--json

输出 JSON

-r REMOTE--remote REMOTE

从给定的远程解析 GitHub URL [默认:origin]

由以下机构支持