@@ -120,6 +120,23 @@ def clean():
120
120
return dir
121
121
122
122
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
+
123
140
class CreateProjectCallbackProtocol (Protocol ):
124
141
def __call__ (self , remote_repo_path : pathlib .Path ):
125
142
...
@@ -163,7 +180,7 @@ def fn(
163
180
remote_repos_path = remote_repos_path ,
164
181
remote_repo_name = remote_repo_name
165
182
if remote_repo_name is not None
166
- else faker . slug ( ),
183
+ else unique_repo_name ( faker = faker , remote_repos_path = remote_repos_path ),
167
184
remote_repo_post_init = remote_repo_post_init ,
168
185
)
169
186
@@ -219,7 +236,7 @@ def fn(
219
236
remote_repos_path = remote_repos_path ,
220
237
remote_repo_name = remote_repo_name
221
238
if remote_repo_name is not None
222
- else faker . word ( ),
239
+ else unique_repo_name ( faker = faker , remote_repos_path = remote_repos_path ),
223
240
remote_repo_post_init = remote_repo_post_init ,
224
241
)
225
242
@@ -277,7 +294,7 @@ def fn(
277
294
remote_repos_path = remote_repos_path ,
278
295
remote_repo_name = remote_repo_name
279
296
if remote_repo_name is not None
280
- else faker . word ( ),
297
+ else unique_repo_name ( faker = faker , remote_repos_path = remote_repos_path ),
281
298
remote_repo_post_init = remote_repo_post_init ,
282
299
)
283
300
0 commit comments