test_trust_live: ride out a transient Gitea error while waiting for the dismissal
A dropped connection or a 5xx inside the wait is retried until the deadline; any other error fails at once (review on #164). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J5Utyfzw7gF7UhjRDEtjTk
This commit is contained in:
1 parent
63ad679c8b
commit
a1eeab1bc7
1 file changed
+18
-1
@@ -5,6 +5,7 @@ and a commit pushed after the approval needs approving again: at once by the
|
||||
agent's own check, and by Gitea once it has dismissed the approval."""
|
||||
|
||||
import base64
|
||||
import re
|
||||
import time
|
||||
import uuid
|
||||
from pathlib import Path
|
||||
@@ -44,13 +45,29 @@ def wait_for_dismissal(gitea: GiteaClient, repo: str, pr: int) -> None:
|
||||
in the push itself, and its merge check counts what isn't dismissed yet.
|
||||
A merge tried before that job has run can still go through (#162)."""
|
||||
deadline = time.monotonic() + DISMISS_WAIT_S
|
||||
while gitea.approvals(repo, pr): # dismissed ones aren't listed
|
||||
while True:
|
||||
try:
|
||||
if not gitea.approvals(repo, pr): # dismissed ones aren't listed
|
||||
return
|
||||
except GiteaError as exc:
|
||||
# A busy Gitea may drop a call or answer 5xx; ask again. Anything
|
||||
# else, such as a 4xx, is a real failure.
|
||||
if not transient(exc) or time.monotonic() > deadline:
|
||||
raise
|
||||
assert time.monotonic() < deadline, (
|
||||
f"Gitea didn't dismiss the approval within {DISMISS_WAIT_S}s"
|
||||
)
|
||||
time.sleep(0.5)
|
||||
|
||||
|
||||
def transient(exc: GiteaError) -> bool:
|
||||
"""A dropped connection or a 5xx: worth asking again."""
|
||||
text = str(exc)
|
||||
return text.startswith("gitea request failed") or bool(
|
||||
re.search(r" returned 5\d\d:", text)
|
||||
)
|
||||
|
||||
|
||||
def test_merging_needs_the_operators_approval_of_the_pr_as_it_is(
|
||||
tmp_path: Path, live_config: AgentConfig, gitea: GiteaClient
|
||||
) -> None:
|
||||
|
||||
Reference in new issue
Block a user