@@ -255,10 +255,56 @@ def _create_git_remote_repo(
255
255
return remote_repo_path
256
256
257
257
258
+ def _create_git_remote_repo_full_path (
259
+ remote_repo_path : pathlib .Path ,
260
+ remote_repo_post_init : Optional [CreateRepoPostInitFn ] = None ,
261
+ init_cmd_args : InitCmdArgs = DEFAULT_GIT_REMOTE_REPO_CMD_ARGS ,
262
+ ) -> pathlib .Path :
263
+ if init_cmd_args is None :
264
+ init_cmd_args = []
265
+ run (
266
+ ["git" , "init" , remote_repo_path .stem , * init_cmd_args ],
267
+ cwd = remote_repo_path .parent ,
268
+ )
269
+
270
+ if remote_repo_post_init is not None and callable (remote_repo_post_init ):
271
+ remote_repo_post_init (remote_repo_path = remote_repo_path )
272
+
273
+ return remote_repo_path
274
+
275
+
276
+ @pytest .fixture (scope = "session" )
277
+ def libvcs_test_cache_path (tmp_path_factory : pytest .TempPathFactory ) -> pathlib .Path :
278
+ """Return temporary directory to use as cache path for libvcs tests."""
279
+ return tmp_path_factory .mktemp ("libvcs-test-cache" )
280
+
281
+
282
+ @pytest .fixture (scope = "session" )
283
+ def empty_git_repo_path (libvcs_test_cache_path : pathlib .Path ) -> pathlib .Path :
284
+ """Return temporary directory to use as cache path for libvcs tests."""
285
+ return libvcs_test_cache_path / "empty_git_repo"
286
+
287
+
288
+ @pytest .fixture (scope = "session" )
289
+ @skip_if_git_missing
290
+ def empty_git_repo (
291
+ empty_git_repo_path : pathlib .Path ,
292
+ ) -> pathlib .Path :
293
+ """Return factory to create git remote repo to for clone / push purposes."""
294
+ if empty_git_repo_path .exists () and (empty_git_repo_path / ".git" ).exists ():
295
+ return empty_git_repo_path
296
+
297
+ return _create_git_remote_repo_full_path (
298
+ remote_repo_path = empty_git_repo_path ,
299
+ remote_repo_post_init = None ,
300
+ )
301
+
302
+
258
303
@pytest .fixture
259
304
@skip_if_git_missing
260
305
def create_git_remote_repo (
261
306
remote_repos_path : pathlib .Path ,
307
+ empty_git_repo : pathlib .Path ,
262
308
) -> CreateRepoPytestFixtureFn :
263
309
"""Return factory to create git remote repo to for clone / push purposes."""
264
310
@@ -268,14 +314,25 @@ def fn(
268
314
remote_repo_post_init : Optional [CreateRepoPostInitFn ] = None ,
269
315
init_cmd_args : InitCmdArgs = DEFAULT_GIT_REMOTE_REPO_CMD_ARGS ,
270
316
) -> pathlib .Path :
271
- return _create_git_remote_repo (
272
- remote_repos_path = remote_repos_path ,
273
- remote_repo_name = remote_repo_name
274
- if remote_repo_name is not None
275
- else unique_repo_name (remote_repos_path = remote_repos_path ),
276
- remote_repo_post_init = remote_repo_post_init ,
277
- init_cmd_args = init_cmd_args ,
278
- )
317
+ if remote_repo_name is None :
318
+ remote_repo_name = unique_repo_name (remote_repos_path = remote_repos_path )
319
+ remote_repo_path = remote_repos_path / remote_repo_name
320
+
321
+ shutil .copytree (empty_git_repo , remote_repo_path )
322
+
323
+ if remote_repo_post_init is not None and callable (remote_repo_post_init ):
324
+ remote_repo_post_init (remote_repo_path = remote_repo_path )
325
+
326
+ return remote_repo_path
327
+
328
+ # return _create_git_remote_repo(
329
+ # remote_repos_path=remote_repos_path,
330
+ # remote_repo_name=remote_repo_name
331
+ # if remote_repo_name is not None
332
+ # else unique_repo_name(remote_repos_path=remote_repos_path),
333
+ # remote_repo_post_init=remote_repo_post_init,
334
+ # init_cmd_args=init_cmd_args,
335
+ # )
279
336
280
337
return fn
281
338
0 commit comments