cache: make reflink, copy default links

This commit is contained in:
pared
2019-04-15 11:27:44 +02:00
parent 8f27c14a8c
commit e505c38f20
3 changed files with 23 additions and 9 deletions
+4 -2
View File
@@ -1,5 +1,7 @@
from __future__ import unicode_literals
from copy import copy
from dvc.utils.compat import str, makedirs
import os
@@ -49,7 +51,7 @@ class RemoteLOCAL(RemoteBase):
PARAM_RELPATH = "relpath"
MD5_DIR_SUFFIX = ".dir"
CACHE_TYPES = ["reflink", "hardlink", "symlink", "copy"]
DEFAULT_CACHE_TYPES = ["reflink", "copy"]
CACHE_TYPE_MAP = {
"copy": shutil.copyfile,
"symlink": System.symlink,
@@ -74,7 +76,7 @@ class RemoteLOCAL(RemoteBase):
types = [t.strip() for t in types.split(",")]
self.cache_types = types
else:
self.cache_types = self.CACHE_TYPES
self.cache_types = copy(self.DEFAULT_CACHE_TYPES)
if self.cache_dir is not None and not os.path.exists(self.cache_dir):
os.mkdir(self.cache_dir)
+5
View File
@@ -168,3 +168,8 @@ class TestCmdCacheDir(TestDvc):
self.assertEqual(len(subdirs), 1)
files = os.listdir(os.path.join(tmpdir, subdirs[0]))
self.assertEqual(len(files), 1)
class TestShouldCacheBeReflinkOrCopyByDefault(TestDvc):
def test(self):
self.assertEqual(self.dvc.cache.local.cache_types, ["reflink", "copy"])
+14 -7
View File
@@ -12,7 +12,7 @@ from dvc.main import main
from dvc import progress
from dvc.repo import Repo as DvcRepo
from dvc.system import System
from dvc.utils import walk_files
from dvc.utils import walk_files, load_stage_file
from tests.basic_env import TestDvc
from tests.test_repro import TestRepro
from dvc.stage import Stage, StageFileBadNameError, StageFileDoesNotExistError
@@ -134,7 +134,9 @@ class CheckoutBase(TestDvc):
FileInfo = collections.namedtuple("FileInfo", "path inode")
paths = [
path for output in stage.outs for path in walk_files(output.path)
path
for output in stage["outs"]
for path in walk_files(output["path"])
]
return [
@@ -210,14 +212,19 @@ class TestCheckoutSelectiveRemove(CheckoutBase):
ret = main(["config", "cache.type", "copy"])
self.assertEqual(ret, 0)
stages = self.dvc.add(self.DATA_DIR)
self.assertEqual(len(stages), 1)
stage = stages[0]
ret = main(["add", self.DATA_DIR])
self.assertEqual(0, ret)
stage_path = self.DATA_DIR + Stage.STAGE_FILE_SUFFIX
stage = load_stage_file(stage_path)
staged_files = self.outs_info(stage)
os.remove(staged_files[0].path)
# move instead of remove, to lock inode assigned to stage_files[0].path
# if we were to use remove, we might end up with same inode assigned to
# newly checked out file
shutil.move(staged_files[0].path, "random_name")
ret = main(["checkout", "--force", stage.relpath])
ret = main(["checkout", "--force", stage_path])
self.assertEqual(ret, 0)
checkedout_files = self.outs_info(stage)