解析和构造GitHub仓库URL和指定符
项目描述
ghrepo 从各种GitHub URL格式(或仅从形式为 OWNER/REPONAME 或 REPONAME 的字符串)中提取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]
ghrepo-0.7.0.tar.gz 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 5713c7b7fbc4fcdb557685c499175e727a64b472113a6696a603f1ba2b0a0a5a |
|
MD5 | 9ac9e875644916fa5c1b927ca663f626 |
|
BLAKE2b-256 | 1b93285929b5cf1fa4120d3bd31e6395055c7b1d20d3c50d8ff4a96aca61fd8b |
ghrepo-0.7.0-py3-none-any.whl 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | b7d71e23cae04d4a341907f21ae3841e27c9d125df281c6d9bfbef03573ab059 |
|
MD5 | 70cb8344d63815e851c4b11c7b54f093 |
|
BLAKE2b-256 | 723f6e7c57ca3c3da46cc8861ddaa3424559267a415cf6fb3178c00d6cd11553 |