1
0
mirror of https://github.com/openSUSE/osc.git synced 2024-11-15 08:36:13 +01:00
github.com_openSUSE_osc/osc/gitea_api/branch.py

87 lines
2.7 KiB
Python
Raw Normal View History

from typing import Optional
from .connection import Connection
from .connection import GiteaHTTPResponse
from .exceptions import BranchDoesNotExist
from .exceptions import BranchExists
from .exceptions import GiteaException
class Branch:
@classmethod
def get(
cls,
conn: Connection,
owner: str,
repo: str,
branch: str,
) -> GiteaHTTPResponse:
"""
Retrieve details about a repository branch.
:param conn: Gitea ``Connection`` instance.
:param owner: Owner of the repo.
:param repo: Name of the repo.
:param branch: Name of the branch.
"""
url = conn.makeurl("repos", owner, repo, "branches", branch)
try:
return conn.request("GET", url)
except GiteaException as e:
if e.status == 404:
raise BranchDoesNotExist(e.response, owner, repo, branch) from None
raise
@classmethod
def list(
cls,
conn: Connection,
owner: str,
repo: str,
) -> GiteaHTTPResponse:
"""
Retrieve details about all repository branches.
:param conn: Gitea ``Connection`` instance.
:param owner: Owner of the repo.
:param repo: Name of the repo.
"""
url = conn.makeurl("repos", owner, repo, "branches")
# XXX: returns 'null' when there are no branches; an empty list would be a better API
return conn.request("GET", url)
@classmethod
def create(
cls,
conn: Connection,
owner: str,
repo: str,
*,
old_ref_name: Optional[str] = None,
new_branch_name: str,
exist_ok: bool = False,
) -> GiteaHTTPResponse:
"""
Create a new branch in a repository.
:param conn: Gitea ``Connection`` instance.
:param owner: Owner of the repo.
:param repo: Name of the repo.
:param old_ref_name: Name of the old branch/tag/commit to create from.
:param new_branch_name: Name of the branch to create.
:param exist_ok: A ``BranchExists`` exception is raised when the target exists. Set to ``True`` to avoid throwing the exception.
"""
json_data = {
"new_branch_name": new_branch_name,
"old_ref_name": old_ref_name,
}
url = conn.makeurl("repos", owner, repo, "branches")
try:
return conn.request("POST", url, json_data=json_data)
except GiteaException as e:
if e.status == 409:
if exist_ok:
return cls.get(conn, owner, repo, new_branch_name)
raise BranchExists(e.response, owner, repo, new_branch_name) from None
raise