From 19f2fe52e6d7615aa28388cf1acdea76a8a0345a Mon Sep 17 00:00:00 2001 From: Saugat Pachhai Date: Thu, 6 May 2021 18:51:07 +0545 Subject: [PATCH] tests: skip copying sqlite files in test directories (#5977) --- dvc/utils/fs.py | 4 ++-- tests/dir_helpers.py | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/dvc/utils/fs.py b/dvc/utils/fs.py index d99b5c066..d46c73677 100644 --- a/dvc/utils/fs.py +++ b/dvc/utils/fs.py @@ -17,9 +17,9 @@ umask = os.umask(0) os.umask(umask) -def fs_copy(src, dst): +def fs_copy(src, dst, ignore=None): if os.path.isdir(src): - shutil.copytree(src, dst) + shutil.copytree(src, dst, ignore=ignore) else: shutil.copy2(src, dst) diff --git a/tests/dir_helpers.py b/tests/dir_helpers.py index 45f9e82d5..a45a62c5d 100644 --- a/tests/dir_helpers.py +++ b/tests/dir_helpers.py @@ -264,12 +264,30 @@ CACHE = {} @pytest.fixture(scope="session") def make_tmp_dir(tmp_path_factory, request, worker_id): def make(name, *, scm=False, dvc=False, subdir=False): + from shutil import ignore_patterns + from dvc.repo import Repo from dvc.scm.git import Git + from dvc.utils.fs import fs_copy + cache = CACHE.get((scm, dvc, subdir)) + if not cache: + cache = tmp_path_factory.mktemp("dvc-test-cache" + worker_id) + TmpDir(cache).init(scm=scm, dvc=dvc, subdir=subdir) + CACHE[(scm, dvc, subdir)] = os.fspath(cache) path = tmp_path_factory.mktemp(name) if isinstance(name, str) else name + + # ignore sqlite files from .dvc/tmp. We might not be closing the cache + # connection resulting in PermissionErrors in Windows. + ignore = ignore_patterns("cache.db*") + for entry in os.listdir(cache): + # shutil.copytree's dirs_exist_ok is only available in >=3.8 + fs_copy( + os.path.join(cache, entry), + os.path.join(path, entry), + ignore=ignore, + ) new_dir = TmpDir(path) - new_dir.init(scm=scm, dvc=dvc, subdir=subdir) str_path = os.fspath(new_dir) if dvc: new_dir.dvc = Repo(str_path)