@@ -120,6 +120,23 @@ def clean():
120120 return dir
121121
122122
123+ def unique_repo_name (
124+ faker : Faker , remote_repos_path : pathlib .Path , max_retries : int = 15
125+ ) -> str :
126+ attempts = 1
127+ while True :
128+ if attempts > max_retries :
129+ raise Exception (
130+ f"Could not find unused repo destination (attempts: { attempts } )"
131+ )
132+ remote_repo_name = faker .slug ()
133+ suggestion = remote_repos_path / remote_repo_name
134+ if suggestion .exists ():
135+ attempts += 1
136+ continue
137+ return remote_repo_name
138+
139+
123140class CreateProjectCallbackProtocol (Protocol ):
124141 def __call__ (self , remote_repo_path : pathlib .Path ):
125142 ...
@@ -163,7 +180,7 @@ def fn(
163180 remote_repos_path = remote_repos_path ,
164181 remote_repo_name = remote_repo_name
165182 if remote_repo_name is not None
166- else faker . slug ( ),
183+ else unique_repo_name ( faker = faker , remote_repos_path = remote_repos_path ),
167184 remote_repo_post_init = remote_repo_post_init ,
168185 )
169186
@@ -219,7 +236,7 @@ def fn(
219236 remote_repos_path = remote_repos_path ,
220237 remote_repo_name = remote_repo_name
221238 if remote_repo_name is not None
222- else faker . word ( ),
239+ else unique_repo_name ( faker = faker , remote_repos_path = remote_repos_path ),
223240 remote_repo_post_init = remote_repo_post_init ,
224241 )
225242
@@ -277,7 +294,7 @@ def fn(
277294 remote_repos_path = remote_repos_path ,
278295 remote_repo_name = remote_repo_name
279296 if remote_repo_name is not None
280- else faker . word ( ),
297+ else unique_repo_name ( faker = faker , remote_repos_path = remote_repos_path ),
281298 remote_repo_post_init = remote_repo_post_init ,
282299 )
283300
0 commit comments