Skip to content

Commit ee861fa

Browse files
committed
!squas wip more initial repo copy thing
1 parent 0f730d0 commit ee861fa

File tree

1 file changed

+65
-8
lines changed

1 file changed

+65
-8
lines changed

src/libvcs/pytest_plugin.py

+65-8
Original file line numberDiff line numberDiff line change
@@ -255,10 +255,56 @@ def _create_git_remote_repo(
255255
return remote_repo_path
256256

257257

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+
258303
@pytest.fixture
259304
@skip_if_git_missing
260305
def create_git_remote_repo(
261306
remote_repos_path: pathlib.Path,
307+
empty_git_repo: pathlib.Path,
262308
) -> CreateRepoPytestFixtureFn:
263309
"""Return factory to create git remote repo to for clone / push purposes."""
264310

@@ -268,14 +314,25 @@ def fn(
268314
remote_repo_post_init: Optional[CreateRepoPostInitFn] = None,
269315
init_cmd_args: InitCmdArgs = DEFAULT_GIT_REMOTE_REPO_CMD_ARGS,
270316
) -> 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+
# )
279336

280337
return fn
281338

0 commit comments

Comments
 (0)