1+ import logging
12import os
3+ import random
24import shutil
35from time import sleep
46
1315from .markdown_builder import _create_member_file
1416from .strings import _
1517
18+ logger = logging .getLogger (__name__ )
19+
1620
1721def get_repo (token : str ) -> tuple [str , Repository ]:
1822 auth = Auth .Token (token )
@@ -41,8 +45,27 @@ def fork_repo(token: str, original_repo: Repository) -> tuple[str, Repository]:
4145 callbacks = pygit2 .callbacks .RemoteCallbacks (
4246 credentials = pygit2 .UserPass (token , "x-oauth-basic" )
4347 )
44- sleep (3 )
45- pygit2 .clone_repository (forked_repo_url , repo_path , callbacks = callbacks )
48+
49+ max_retries = 5
50+ for attempt in range (max_retries ):
51+ try :
52+ pygit2 .clone_repository (forked_repo_url , repo_path , callbacks = callbacks )
53+ break
54+ except Exception as e :
55+ if attempt == max_retries - 1 :
56+ logger .error (
57+ "Failed to clone forked repository after %d attempts" , max_retries
58+ )
59+ raise
60+ sleep_time = 2 ** attempt + random .uniform (0 , 1 ) # noqa: S311
61+ logger .warning (
62+ "Attempt %d to clone repository failed: %s. Retrying in %.2fs..." ,
63+ attempt + 1 ,
64+ e ,
65+ sleep_time ,
66+ )
67+ sleep (sleep_time )
68+
4669 return repo_path , forked_repo
4770
4871
@@ -57,7 +80,7 @@ def create_pr(
5780 name : str ,
5881 email : str ,
5982) -> tuple [str , str | None ]:
60- name_file , file_path = _create_member_file (
83+ name_file , _unused_file_path = _create_member_file (
6184 file_content ,
6285 current_file ,
6386 repo_path ,
0 commit comments