This commit is contained in:
2026-05-26 18:15:37 +03:00
parent 0b6f61623e
commit ee08e2f3dd
15 changed files with 13702 additions and 7702 deletions

View File

@@ -130,9 +130,9 @@ class GitServiceGiteaMixin:
# endregion list_gitea_repositories
# region create_gitea_repository [TYPE Function]
# @PURPOSE: Create repository in Gitea for authenticated user.
# @PURPOSE: Create repository in Gitea for authenticated user. Idempotent — returns existing repo if name already taken.
# @PRE name is non-empty and PAT has repo creation permission.
# @POST Returns created repository payload.
# @POST Returns created or existing repository payload.
# @RETURN dict
async def create_gitea_repository(
self, server_url: str, pat: str, name: str, private: bool = True,
@@ -143,7 +143,19 @@ class GitServiceGiteaMixin:
payload["description"] = description
if default_branch:
payload["default_branch"] = default_branch
created = await self._gitea_request("POST", server_url, pat, "/user/repos", payload=payload)
try:
created = await self._gitea_request("POST", server_url, pat, "/user/repos", payload=payload)
except HTTPException as exc:
if exc.status_code == 409:
logger.reason(
f"Repository '{name}' already exists on Gitea, fetching existing repo",
extra={"src": "create_gitea_repository"},
)
username = await self.get_gitea_current_user(server_url, pat)
existing = await self._gitea_request("GET", server_url, pat, f"/repos/{username}/{name}")
if isinstance(existing, dict):
return existing
raise
if not isinstance(created, dict):
raise HTTPException(status_code=500, detail="Unexpected Gitea response while creating repository")
return created