mirror of
https://github.com/openSUSE/osc.git
synced 2024-11-15 08:36:13 +01:00
87 lines
2.7 KiB
Python
87 lines
2.7 KiB
Python
|
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
|