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

@@ -158,10 +158,10 @@ async def get_repository_status(
_=Depends(has_permission("plugin:git", "EXECUTE")),
):
with belief_scope("get_repository_status"):
from . import _resolve_dashboard_id_from_ref_async
from . import _resolve_dashboard_id_from_ref
try:
dashboard_id = await _resolve_dashboard_id_from_ref_async(
dashboard_id = _resolve_dashboard_id_from_ref(
dashboard_ref, config_manager, env_id
)
return _resolve_repository_status(dashboard_id)

View File

@@ -232,8 +232,8 @@ class GitPlugin(PluginBase):
shutil.rmtree(backup_dir, ignore_errors=True)
try:
repo.git.add(A=True)
app_logger.reason("Changes staged in git", extra={"src": "_handle_sync"})
repo.git.add(A=True, force=True)
app_logger.reason("Changes staged in git (force)", extra={"src": "_handle_sync"})
except Exception as ge:
app_logger.explore(f"Failed to stage changes: {ge}", extra={"src": "_handle_sync"})

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