From 21d76ffb6f4ec30f68580d72a62cf083b5ec816b Mon Sep 17 00:00:00 2001 From: Matthieu Baerts Date: Tue, 27 Oct 2026 11:10:34 +0100 Subject: [PATCH] tree: git retry: use an exponential backoff Limited to 10 times the initial value. In case of rate limit, that seems safer to do that than just retrying after 30 seconds. That means operations will timeout after ~32.5 minutes instead of 5. But it seems better to do that than crashing after 5 minutes. Signed-off-by: Matthieu Baerts --- core/tree.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/tree.py b/core/tree.py index fa8f6f2..ad4234d 100644 --- a/core/tree.py +++ b/core/tree.py @@ -84,8 +84,10 @@ def git(self, args: List[str]): finally: self.lock.release() - def git_retry(self, cmd, err_msg, n=10, sleep=30): + def git_retry(self, cmd, err_msg, n=10, sleep_init=30): last = n - 1 + sleep = sleep_init + for i in range(n): try: return self.git(cmd) @@ -93,7 +95,9 @@ def git_retry(self, cmd, err_msg, n=10, sleep=30): core.log(f"{err_msg} (attempt {i + 1})", repr(e)) if i == last: raise - time.sleep(sleep) + # with n = 10, max 32.5 minutes + time.sleep(min(sleep, sleep_init * 10)) + sleep *= 2 def git_am(self, patch): return self.git(["am", "-s", "--", patch])