mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
repo: rename odb -> cache
We used to have it named `cache` before, but these days it is clear that you can have three odbs: just odb (e.g. in-memory), cache (typically local) or remote (typically cloud). Fixing naming here before proceeding with introducing `out.odb` and `out.cache`. In preparation for migration to https://github.com/iterative/dvc-data/pull/304
This commit is contained in:
@@ -14,7 +14,7 @@ def _get_odb(repo, settings, fs=None):
|
|||||||
return get_odb(fs, fs_path, state=repo.state, **config)
|
return get_odb(fs, fs_path, state=repo.state, **config)
|
||||||
|
|
||||||
|
|
||||||
class ODBManager:
|
class CacheManager:
|
||||||
CACHE_DIR = "cache"
|
CACHE_DIR = "cache"
|
||||||
CLOUD_SCHEMES = [
|
CLOUD_SCHEMES = [
|
||||||
Schemes.S3,
|
Schemes.S3,
|
||||||
+6
-6
@@ -147,12 +147,12 @@ class DataCloud:
|
|||||||
"""
|
"""
|
||||||
odb = odb or self.get_remote_odb(remote, "push")
|
odb = odb or self.get_remote_odb(remote, "push")
|
||||||
return self.transfer(
|
return self.transfer(
|
||||||
self.repo.odb.local,
|
self.repo.cache.local,
|
||||||
odb,
|
odb,
|
||||||
objs,
|
objs,
|
||||||
jobs=jobs,
|
jobs=jobs,
|
||||||
dest_index=get_index(odb),
|
dest_index=get_index(odb),
|
||||||
cache_odb=self.repo.odb.local,
|
cache_odb=self.repo.cache.local,
|
||||||
validate_status=self._log_missing,
|
validate_status=self._log_missing,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -175,11 +175,11 @@ class DataCloud:
|
|||||||
odb = odb or self.get_remote_odb(remote, "pull")
|
odb = odb or self.get_remote_odb(remote, "pull")
|
||||||
return self.transfer(
|
return self.transfer(
|
||||||
odb,
|
odb,
|
||||||
self.repo.odb.local,
|
self.repo.cache.local,
|
||||||
objs,
|
objs,
|
||||||
jobs=jobs,
|
jobs=jobs,
|
||||||
src_index=get_index(odb),
|
src_index=get_index(odb),
|
||||||
cache_odb=self.repo.odb.local,
|
cache_odb=self.repo.cache.local,
|
||||||
verify=odb.verify,
|
verify=odb.verify,
|
||||||
validate_status=self._log_missing,
|
validate_status=self._log_missing,
|
||||||
)
|
)
|
||||||
@@ -206,12 +206,12 @@ class DataCloud:
|
|||||||
if not odb:
|
if not odb:
|
||||||
odb = self.get_remote_odb(remote, "status")
|
odb = self.get_remote_odb(remote, "status")
|
||||||
return compare_status(
|
return compare_status(
|
||||||
self.repo.odb.local,
|
self.repo.cache.local,
|
||||||
odb,
|
odb,
|
||||||
objs,
|
objs,
|
||||||
jobs=jobs,
|
jobs=jobs,
|
||||||
dest_index=get_index(odb),
|
dest_index=get_index(odb),
|
||||||
cache_odb=self.repo.odb.local,
|
cache_odb=self.repo.cache.local,
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_url_for(self, remote, checksum):
|
def get_url_for(self, remote, checksum):
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ class RepoDependency(Dependency):
|
|||||||
to.fs_path,
|
to.fs_path,
|
||||||
to.fs,
|
to.fs,
|
||||||
obj,
|
obj,
|
||||||
self.repo.odb.local,
|
self.repo.cache.local,
|
||||||
ignore=None,
|
ignore=None,
|
||||||
state=self.repo.state,
|
state=self.repo.state,
|
||||||
prompt=confirm,
|
prompt=confirm,
|
||||||
@@ -111,7 +111,7 @@ class RepoDependency(Dependency):
|
|||||||
from dvc_data.hashfile.build import build
|
from dvc_data.hashfile.build import build
|
||||||
from dvc_data.hashfile.tree import Tree, TreeError
|
from dvc_data.hashfile.tree import Tree, TreeError
|
||||||
|
|
||||||
local_odb = self.repo.odb.local
|
local_odb = self.repo.cache.local
|
||||||
locked = kwargs.pop("locked", True)
|
locked = kwargs.pop("locked", True)
|
||||||
with self._make_repo(locked=locked, cache_dir=local_odb.path) as repo:
|
with self._make_repo(locked=locked, cache_dir=local_odb.path) as repo:
|
||||||
used_obj_ids = defaultdict(set)
|
used_obj_ids = defaultdict(set)
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ def _get_remote_config(url):
|
|||||||
name = "auto-generated-upstream"
|
name = "auto-generated-upstream"
|
||||||
return {
|
return {
|
||||||
"core": {"remote": name},
|
"core": {"remote": name},
|
||||||
"remote": {name: {"url": repo.odb.local.path}},
|
"remote": {name: {"url": repo.cache.local.path}},
|
||||||
}
|
}
|
||||||
|
|
||||||
# Use original remote to make sure that we are using correct url,
|
# Use original remote to make sure that we are using correct url,
|
||||||
|
|||||||
+4
-4
@@ -41,14 +41,14 @@ def get_dvc_info():
|
|||||||
# can't auto-create it, as it might cause issues if the user
|
# can't auto-create it, as it might cause issues if the user
|
||||||
# later decides to enable shared cache mode with
|
# later decides to enable shared cache mode with
|
||||||
# `dvc config cache.shared group`.
|
# `dvc config cache.shared group`.
|
||||||
if os.path.exists(repo.odb.local.path):
|
if os.path.exists(repo.cache.local.path):
|
||||||
info.append(f"Cache types: {_get_linktype_support_info(repo)}")
|
info.append(f"Cache types: {_get_linktype_support_info(repo)}")
|
||||||
fs_type = get_fs_type(repo.odb.local.path)
|
fs_type = get_fs_type(repo.cache.local.path)
|
||||||
info.append(f"Cache directory: {fs_type}")
|
info.append(f"Cache directory: {fs_type}")
|
||||||
else:
|
else:
|
||||||
info.append("Cache types: " + error_link("no-dvc-cache"))
|
info.append("Cache types: " + error_link("no-dvc-cache"))
|
||||||
|
|
||||||
info.append(f"Caches: {_get_caches(repo.odb)}")
|
info.append(f"Caches: {_get_caches(repo.cache)}")
|
||||||
info.append(f"Remotes: {_get_remotes(repo.config)}")
|
info.append(f"Remotes: {_get_remotes(repo.config)}")
|
||||||
|
|
||||||
root_directory = repo.root_dir
|
root_directory = repo.root_dir
|
||||||
@@ -84,7 +84,7 @@ def _get_remotes(config):
|
|||||||
|
|
||||||
|
|
||||||
def _get_linktype_support_info(repo):
|
def _get_linktype_support_info(repo):
|
||||||
odb = repo.odb.local
|
odb = repo.cache.local
|
||||||
|
|
||||||
links = generic.test_links(
|
links = generic.test_links(
|
||||||
["reflink", "hardlink", "symlink"],
|
["reflink", "hardlink", "symlink"],
|
||||||
|
|||||||
+3
-3
@@ -502,7 +502,7 @@ class Output:
|
|||||||
@property
|
@property
|
||||||
def odb(self):
|
def odb(self):
|
||||||
odb_name = "repo" if self.is_in_repo else self.protocol
|
odb_name = "repo" if self.is_in_repo else self.protocol
|
||||||
odb = getattr(self.repo.odb, odb_name)
|
odb = getattr(self.repo.cache, odb_name)
|
||||||
if self.use_cache and odb is None:
|
if self.use_cache and odb is None:
|
||||||
raise RemoteCacheRequiredError(self.fs.protocol, self.fs_path)
|
raise RemoteCacheRequiredError(self.fs.protocol, self.fs_path)
|
||||||
return odb
|
return odb
|
||||||
@@ -519,7 +519,7 @@ class Output:
|
|||||||
if self.use_cache:
|
if self.use_cache:
|
||||||
odb = self.odb
|
odb = self.odb
|
||||||
else:
|
else:
|
||||||
odb = self.repo.odb.local
|
odb = self.repo.cache.local
|
||||||
_, meta, obj = build(
|
_, meta, obj = build(
|
||||||
odb,
|
odb,
|
||||||
self.fs_path,
|
self.fs_path,
|
||||||
@@ -690,7 +690,7 @@ class Output:
|
|||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
_, self.meta, self.obj = build(
|
_, self.meta, self.obj = build(
|
||||||
self.repo.odb.local,
|
self.repo.cache.local,
|
||||||
self.fs_path,
|
self.fs_path,
|
||||||
self.fs,
|
self.fs,
|
||||||
self.hash_name,
|
self.hash_name,
|
||||||
|
|||||||
@@ -162,11 +162,11 @@ class Repo:
|
|||||||
repo_factory: Optional[Callable] = None,
|
repo_factory: Optional[Callable] = None,
|
||||||
scm: Optional[Union["Git", "NoSCM"]] = None,
|
scm: Optional[Union["Git", "NoSCM"]] = None,
|
||||||
):
|
):
|
||||||
|
from dvc.cachemgr import CacheManager
|
||||||
from dvc.config import Config
|
from dvc.config import Config
|
||||||
from dvc.data_cloud import DataCloud
|
from dvc.data_cloud import DataCloud
|
||||||
from dvc.fs import GitFileSystem, LocalFileSystem, localfs
|
from dvc.fs import GitFileSystem, LocalFileSystem, localfs
|
||||||
from dvc.lock import LockNoop, make_lock
|
from dvc.lock import LockNoop, make_lock
|
||||||
from dvc.odbmgr import ODBManager
|
|
||||||
from dvc.repo.metrics import Metrics
|
from dvc.repo.metrics import Metrics
|
||||||
from dvc.repo.params import Params
|
from dvc.repo.params import Params
|
||||||
from dvc.repo.plots import Plots
|
from dvc.repo.plots import Plots
|
||||||
@@ -205,12 +205,12 @@ class Repo:
|
|||||||
self.stage: "StageLoad" = StageLoad(self)
|
self.stage: "StageLoad" = StageLoad(self)
|
||||||
|
|
||||||
self.lock: "LockBase"
|
self.lock: "LockBase"
|
||||||
self.odb: ODBManager
|
self.cache: CacheManager
|
||||||
self.state: "StateBase"
|
self.state: "StateBase"
|
||||||
if isinstance(self.fs, GitFileSystem) or not self.dvc_dir:
|
if isinstance(self.fs, GitFileSystem) or not self.dvc_dir:
|
||||||
self.lock = LockNoop()
|
self.lock = LockNoop()
|
||||||
self.state = StateNoop()
|
self.state = StateNoop()
|
||||||
self.odb = ODBManager(self)
|
self.cache = CacheManager(self)
|
||||||
self.tmp_dir = None
|
self.tmp_dir = None
|
||||||
else:
|
else:
|
||||||
self.fs.makedirs(cast(str, self.tmp_dir), exist_ok=True)
|
self.fs.makedirs(cast(str, self.tmp_dir), exist_ok=True)
|
||||||
@@ -228,7 +228,7 @@ class Repo:
|
|||||||
self.lock = LockNoop()
|
self.lock = LockNoop()
|
||||||
self.state = StateNoop()
|
self.state = StateNoop()
|
||||||
|
|
||||||
self.odb = ODBManager(self)
|
self.cache = CacheManager(self)
|
||||||
|
|
||||||
self.stage_cache = StageCache(self)
|
self.stage_cache = StageCache(self)
|
||||||
|
|
||||||
@@ -385,14 +385,14 @@ class Repo:
|
|||||||
return init(root_dir=root_dir, no_scm=no_scm, force=force, subdir=subdir)
|
return init(root_dir=root_dir, no_scm=no_scm, force=force, subdir=subdir)
|
||||||
|
|
||||||
def unprotect(self, target):
|
def unprotect(self, target):
|
||||||
return self.odb.repo.unprotect(target)
|
return self.cache.repo.unprotect(target)
|
||||||
|
|
||||||
def _ignore(self):
|
def _ignore(self):
|
||||||
flist = [self.config.files["local"]]
|
flist = [self.config.files["local"]]
|
||||||
if tmp_dir := self.tmp_dir:
|
if tmp_dir := self.tmp_dir:
|
||||||
flist.append(tmp_dir)
|
flist.append(tmp_dir)
|
||||||
if path_isin(self.odb.repo.path, self.root_dir):
|
if path_isin(self.cache.repo.path, self.root_dir):
|
||||||
flist.append(self.odb.repo.path)
|
flist.append(self.cache.repo.path)
|
||||||
|
|
||||||
for file in flist:
|
for file in flist:
|
||||||
self.scm_context.ignore(file)
|
self.scm_context.ignore(file)
|
||||||
|
|||||||
+3
-3
@@ -162,9 +162,9 @@ def _output_paths( # noqa: C901
|
|||||||
obj: Optional["HashFile"]
|
obj: Optional["HashFile"]
|
||||||
if on_working_fs:
|
if on_working_fs:
|
||||||
_, _, obj = build(
|
_, _, obj = build(
|
||||||
repo.odb.repo,
|
repo.cache.repo,
|
||||||
output.fs_path,
|
output.fs_path,
|
||||||
repo.odb.repo.fs,
|
repo.cache.repo.fs,
|
||||||
"md5",
|
"md5",
|
||||||
dry_run=True,
|
dry_run=True,
|
||||||
ignore=output.dvcignore,
|
ignore=output.dvcignore,
|
||||||
@@ -219,7 +219,7 @@ def _filter_missing(dvcfs: "DVCFileSystem", paths: Set[str]) -> Iterator[str]:
|
|||||||
if (
|
if (
|
||||||
entry
|
entry
|
||||||
and info["type"] == "directory"
|
and info["type"] == "directory"
|
||||||
and not dvcfs.repo.odb.local.exists(entry.hash_info.value)
|
and not dvcfs.repo.cache.local.exists(entry.hash_info.value)
|
||||||
):
|
):
|
||||||
yield path
|
yield path
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ class TempDirExecutor(BaseLocalExecutor):
|
|||||||
self, repo: "Repo", rev: str, run_cache: bool = True # noqa: ARG002
|
self, repo: "Repo", rev: str, run_cache: bool = True # noqa: ARG002
|
||||||
):
|
):
|
||||||
"""Initialize DVC cache."""
|
"""Initialize DVC cache."""
|
||||||
self._config(repo.odb.repo.path)
|
self._config(repo.cache.repo.path)
|
||||||
|
|
||||||
def cleanup(self, infofile: str):
|
def cleanup(self, infofile: str):
|
||||||
super().cleanup(infofile)
|
super().cleanup(infofile)
|
||||||
|
|||||||
@@ -217,12 +217,12 @@ class SSHExecutor(BaseExecutor):
|
|||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def get_odb(self):
|
def get_odb(self):
|
||||||
from dvc.odbmgr import ODBManager, get_odb
|
from dvc.cachemgr import CacheManager, get_odb
|
||||||
|
|
||||||
cache_path = posixpath.join(
|
cache_path = posixpath.join(
|
||||||
self._repo_abspath,
|
self._repo_abspath,
|
||||||
self.dvc_dir,
|
self.dvc_dir,
|
||||||
ODBManager.CACHE_DIR,
|
CacheManager.CACHE_DIR,
|
||||||
)
|
)
|
||||||
|
|
||||||
with self.sshfs() as fs:
|
with self.sshfs() as fs:
|
||||||
|
|||||||
+1
-1
@@ -85,7 +85,7 @@ def gc(
|
|||||||
).values():
|
).values():
|
||||||
used_obj_ids.update(obj_ids)
|
used_obj_ids.update(obj_ids)
|
||||||
|
|
||||||
for scheme, odb in self.odb.by_scheme():
|
for scheme, odb in self.cache.by_scheme():
|
||||||
if not odb:
|
if not odb:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -107,7 +107,7 @@ def save_imports(
|
|||||||
|
|
||||||
data_view = unfetched.data["repo"]
|
data_view = unfetched.data["repo"]
|
||||||
if len(data_view):
|
if len(data_view):
|
||||||
cache = repo.odb.local
|
cache = repo.cache.local
|
||||||
if not cache.fs.exists(cache.path):
|
if not cache.fs.exists(cache.path):
|
||||||
os.makedirs(cache.path)
|
os.makedirs(cache.path)
|
||||||
with TemporaryDirectory(dir=cache.path) as tmpdir:
|
with TemporaryDirectory(dir=cache.path) as tmpdir:
|
||||||
|
|||||||
+9
-9
@@ -61,7 +61,7 @@ def _get_stage_hash(stage):
|
|||||||
class StageCache:
|
class StageCache:
|
||||||
def __init__(self, repo):
|
def __init__(self, repo):
|
||||||
self.repo = repo
|
self.repo = repo
|
||||||
self.cache_dir = os.path.join(self.repo.odb.local.path, "runs")
|
self.cache_dir = os.path.join(self.repo.cache.local.path, "runs")
|
||||||
|
|
||||||
def _get_cache_dir(self, key):
|
def _get_cache_dir(self, key):
|
||||||
return os.path.join(self.cache_dir, key[:2], key)
|
return os.path.join(self.cache_dir, key[:2], key)
|
||||||
@@ -120,12 +120,12 @@ class StageCache:
|
|||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def _cache_type_copy(self):
|
def _cache_type_copy(self):
|
||||||
cache_types = self.repo.odb.local.cache_types
|
cache_types = self.repo.cache.local.cache_types
|
||||||
self.repo.odb.local.cache_types = ["copy"]
|
self.repo.cache.local.cache_types = ["copy"]
|
||||||
try:
|
try:
|
||||||
yield
|
yield
|
||||||
finally:
|
finally:
|
||||||
self.repo.odb.local.cache_types = cache_types
|
self.repo.cache.local.cache_types = cache_types
|
||||||
|
|
||||||
def _uncached_outs(self, stage, cache):
|
def _uncached_outs(self, stage, cache):
|
||||||
# NOTE: using temporary stage to avoid accidentally modifying original
|
# NOTE: using temporary stage to avoid accidentally modifying original
|
||||||
@@ -167,13 +167,13 @@ class StageCache:
|
|||||||
COMPILED_LOCK_FILE_STAGE_SCHEMA(cache)
|
COMPILED_LOCK_FILE_STAGE_SCHEMA(cache)
|
||||||
|
|
||||||
path = self._get_cache_path(cache_key, cache_value)
|
path = self._get_cache_path(cache_key, cache_value)
|
||||||
parent = self.repo.odb.local.fs.path.parent(path)
|
parent = self.repo.cache.local.fs.path.parent(path)
|
||||||
self.repo.odb.local.makedirs(parent)
|
self.repo.cache.local.makedirs(parent)
|
||||||
tmp = tempfile.NamedTemporaryFile(delete=False, dir=parent).name
|
tmp = tempfile.NamedTemporaryFile(delete=False, dir=parent).name
|
||||||
assert os.path.exists(parent)
|
assert os.path.exists(parent)
|
||||||
assert os.path.isdir(parent)
|
assert os.path.isdir(parent)
|
||||||
dump_yaml(tmp, cache)
|
dump_yaml(tmp, cache)
|
||||||
self.repo.odb.local.move(tmp, path)
|
self.repo.cache.local.move(tmp, path)
|
||||||
|
|
||||||
def restore(self, stage, run_cache=True, pull=False, dry=False):
|
def restore(self, stage, run_cache=True, pull=False, dry=False):
|
||||||
from .serialize import to_single_stage_lockfile
|
from .serialize import to_single_stage_lockfile
|
||||||
@@ -259,11 +259,11 @@ class StageCache:
|
|||||||
|
|
||||||
def push(self, remote: Optional[str], odb: Optional["ObjectDB"] = None):
|
def push(self, remote: Optional[str], odb: Optional["ObjectDB"] = None):
|
||||||
dest_odb = odb or self.repo.cloud.get_remote_odb(remote, "push --run-cache")
|
dest_odb = odb or self.repo.cloud.get_remote_odb(remote, "push --run-cache")
|
||||||
return self.transfer(self.repo.odb.local, dest_odb)
|
return self.transfer(self.repo.cache.local, dest_odb)
|
||||||
|
|
||||||
def pull(self, remote: Optional[str], odb: Optional["ObjectDB"] = None):
|
def pull(self, remote: Optional[str], odb: Optional["ObjectDB"] = None):
|
||||||
odb = odb or self.repo.cloud.get_remote_odb(remote, "fetch --run-cache")
|
odb = odb or self.repo.cloud.get_remote_odb(remote, "fetch --run-cache")
|
||||||
return self.transfer(odb, self.repo.odb.local)
|
return self.transfer(odb, self.repo.cache.local)
|
||||||
|
|
||||||
def get_used_objs(self, used_run_cache, *args, **kwargs):
|
def get_used_objs(self, used_run_cache, *args, **kwargs):
|
||||||
"""Return used cache for the specified run-cached stages."""
|
"""Return used cache for the specified run-cached stages."""
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class TestAPI:
|
|||||||
dvc.push()
|
dvc.push()
|
||||||
|
|
||||||
# Remove cache to force download
|
# Remove cache to force download
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
|
|
||||||
with api.open("foo") as fobj:
|
with api.open("foo") as fobj:
|
||||||
assert fobj.read() == "foo-text"
|
assert fobj.read() == "foo-text"
|
||||||
@@ -62,7 +62,7 @@ class TestAPI:
|
|||||||
dvc.push()
|
dvc.push()
|
||||||
|
|
||||||
if clear_cache:
|
if clear_cache:
|
||||||
remove(dvc.odb.repo.path)
|
remove(dvc.cache.repo.path)
|
||||||
|
|
||||||
if url := fs_kwargs.get("url"):
|
if url := fs_kwargs.get("url"):
|
||||||
fs_kwargs["url"] = url.format(path=tmp_dir, posixpath=tmp_dir.as_posix())
|
fs_kwargs["url"] = url.format(path=tmp_dir, posixpath=tmp_dir.as_posix())
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ def local_remote(make_remote):
|
|||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def make_workspace(tmp_dir, dvc, make_cloud):
|
def make_workspace(tmp_dir, dvc, make_cloud):
|
||||||
def _make_workspace(name, typ="local"):
|
def _make_workspace(name, typ="local"):
|
||||||
from dvc.odbmgr import ODBManager
|
from dvc.cachemgr import CacheManager
|
||||||
|
|
||||||
cloud = make_cloud(typ) # pylint: disable=W0621
|
cloud = make_cloud(typ) # pylint: disable=W0621
|
||||||
|
|
||||||
@@ -197,7 +197,7 @@ def make_workspace(tmp_dir, dvc, make_cloud):
|
|||||||
with dvc.config.edit() as conf:
|
with dvc.config.edit() as conf:
|
||||||
conf["cache"][scheme] = f"{name}-cache"
|
conf["cache"][scheme] = f"{name}-cache"
|
||||||
|
|
||||||
dvc.odb = ODBManager(dvc)
|
dvc.cache = CacheManager(dvc)
|
||||||
|
|
||||||
return cloud
|
return cloud
|
||||||
|
|
||||||
|
|||||||
+13
-13
@@ -48,8 +48,8 @@ class TestRemote:
|
|||||||
|
|
||||||
# Move cache and check status
|
# Move cache and check status
|
||||||
# See issue https://github.com/iterative/dvc/issues/4383 for details
|
# See issue https://github.com/iterative/dvc/issues/4383 for details
|
||||||
backup_dir = dvc.odb.local.path + ".backup"
|
backup_dir = dvc.cache.local.path + ".backup"
|
||||||
shutil.move(dvc.odb.local.path, backup_dir)
|
shutil.move(dvc.cache.local.path, backup_dir)
|
||||||
status = dvc.cloud.status(foo_hashes)
|
status = dvc.cloud.status(foo_hashes)
|
||||||
_check_status(status, missing={foo_hash})
|
_check_status(status, missing={foo_hash})
|
||||||
|
|
||||||
@@ -57,8 +57,8 @@ class TestRemote:
|
|||||||
_check_status(status_dir, missing=dir_hashes)
|
_check_status(status_dir, missing=dir_hashes)
|
||||||
|
|
||||||
# Restore original cache:
|
# Restore original cache:
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
shutil.move(backup_dir, dvc.odb.local.path)
|
shutil.move(backup_dir, dvc.cache.local.path)
|
||||||
|
|
||||||
# Push and check status
|
# Push and check status
|
||||||
dvc.cloud.push(foo_hashes)
|
dvc.cloud.push(foo_hashes)
|
||||||
@@ -75,7 +75,7 @@ class TestRemote:
|
|||||||
_check_status(status_dir, ok=dir_hashes)
|
_check_status(status_dir, ok=dir_hashes)
|
||||||
|
|
||||||
# Remove and check status
|
# Remove and check status
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
|
|
||||||
status = dvc.cloud.status(foo_hashes)
|
status = dvc.cloud.status(foo_hashes)
|
||||||
_check_status(status, deleted={foo_hash})
|
_check_status(status, deleted={foo_hash})
|
||||||
@@ -133,7 +133,7 @@ class TestRemote:
|
|||||||
status = dvc.cloud.status(expected_hashes)
|
status = dvc.cloud.status(expected_hashes)
|
||||||
_check_status(status, ok=expected_hashes)
|
_check_status(status, ok=expected_hashes)
|
||||||
|
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
remove(tmp_dir / "foo")
|
remove(tmp_dir / "foo")
|
||||||
remove(tmp_dir / "bar")
|
remove(tmp_dir / "bar")
|
||||||
|
|
||||||
@@ -159,7 +159,7 @@ class TestRemote:
|
|||||||
status = dvc.cloud.status(expected_hashes)
|
status = dvc.cloud.status(expected_hashes)
|
||||||
_check_status(status, ok=expected_hashes)
|
_check_status(status, ok=expected_hashes)
|
||||||
|
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
remove(tmp_dir / "foo")
|
remove(tmp_dir / "foo")
|
||||||
remove(tmp_dir / "bar")
|
remove(tmp_dir / "bar")
|
||||||
|
|
||||||
@@ -178,7 +178,7 @@ class TestRemoteVersionAware:
|
|||||||
out = stage.outs[0]
|
out = stage.outs[0]
|
||||||
assert out.meta.version_id
|
assert out.meta.version_id
|
||||||
|
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
remove(tmp_dir / "foo")
|
remove(tmp_dir / "foo")
|
||||||
|
|
||||||
dvc.pull()
|
dvc.pull()
|
||||||
@@ -205,7 +205,7 @@ class TestRemoteVersionAware:
|
|||||||
assert file["version_id"]
|
assert file["version_id"]
|
||||||
assert file["remote"] == "upstream"
|
assert file["remote"] == "upstream"
|
||||||
|
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
remove(tmp_dir / "data_dir")
|
remove(tmp_dir / "data_dir")
|
||||||
|
|
||||||
dvc.pull()
|
dvc.pull()
|
||||||
@@ -225,7 +225,7 @@ class TestRemoteWorktree:
|
|||||||
out = stage.outs[0]
|
out = stage.outs[0]
|
||||||
assert out.meta.version_id
|
assert out.meta.version_id
|
||||||
|
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
remove(tmp_dir / "foo")
|
remove(tmp_dir / "foo")
|
||||||
|
|
||||||
dvc.pull()
|
dvc.pull()
|
||||||
@@ -252,7 +252,7 @@ class TestRemoteWorktree:
|
|||||||
assert file["version_id"]
|
assert file["version_id"]
|
||||||
assert file["remote"] == "upstream"
|
assert file["remote"] == "upstream"
|
||||||
|
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
remove(tmp_dir / "data_dir")
|
remove(tmp_dir / "data_dir")
|
||||||
|
|
||||||
dvc.pull()
|
dvc.pull()
|
||||||
@@ -285,7 +285,7 @@ class TestRemoteWorktree:
|
|||||||
tmp_dir.scm_add([tmp_dir / "data_dir.dvc"], commit="v2")
|
tmp_dir.scm_add([tmp_dir / "data_dir.dvc"], commit="v2")
|
||||||
assert not (remote_worktree / "data_dir" / "data").exists()
|
assert not (remote_worktree / "data_dir" / "data").exists()
|
||||||
|
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
remove(tmp_dir / "data_dir")
|
remove(tmp_dir / "data_dir")
|
||||||
# pulling the original pushed version should still succeed
|
# pulling the original pushed version should still succeed
|
||||||
scm.checkout(v1)
|
scm.checkout(v1)
|
||||||
@@ -335,7 +335,7 @@ class TestRemoteWorktree:
|
|||||||
assert (tmp_dir / "data_dir" / "data").read_text() == "modified"
|
assert (tmp_dir / "data_dir" / "data").read_text() == "modified"
|
||||||
assert (tmp_dir / "data_dir" / "new_data").read_text() == "new data"
|
assert (tmp_dir / "data_dir" / "new_data").read_text() == "new data"
|
||||||
|
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
remove(tmp_dir / "foo")
|
remove(tmp_dir / "foo")
|
||||||
remove(tmp_dir / "data_dir")
|
remove(tmp_dir / "data_dir")
|
||||||
dvc.pull()
|
dvc.pull()
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ class TestImport:
|
|||||||
pytest.skip()
|
pytest.skip()
|
||||||
|
|
||||||
def test_import_dir(self, tmp_dir, dvc, workspace, stage_md5, dir_md5):
|
def test_import_dir(self, tmp_dir, dvc, workspace, stage_md5, dir_md5):
|
||||||
from dvc.odbmgr import ODBManager
|
from dvc.cachemgr import CacheManager
|
||||||
|
|
||||||
workspace.gen({"dir": {"file": "file", "subdir": {"subfile": "subfile"}}})
|
workspace.gen({"dir": {"file": "file", "subdir": {"subfile": "subfile"}}})
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ class TestImport:
|
|||||||
# to import dirs
|
# to import dirs
|
||||||
with dvc.config.edit() as conf:
|
with dvc.config.edit() as conf:
|
||||||
del conf["cache"]
|
del conf["cache"]
|
||||||
dvc.odb = ODBManager(dvc)
|
dvc.cache = CacheManager(dvc)
|
||||||
|
|
||||||
assert not (tmp_dir / "dir").exists() # sanity check
|
assert not (tmp_dir / "dir").exists() # sanity check
|
||||||
dvc.imp_url("remote://workspace/dir")
|
dvc.imp_url("remote://workspace/dir")
|
||||||
@@ -93,7 +93,7 @@ class TestImportURLVersionAware:
|
|||||||
assert (tmp_dir / "file").read_text() == "file"
|
assert (tmp_dir / "file").read_text() == "file"
|
||||||
assert dvc.status() == {}
|
assert dvc.status() == {}
|
||||||
|
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
remove(tmp_dir / "file")
|
remove(tmp_dir / "file")
|
||||||
dvc.pull()
|
dvc.pull()
|
||||||
assert (tmp_dir / "file").read_text() == "file"
|
assert (tmp_dir / "file").read_text() == "file"
|
||||||
@@ -106,7 +106,7 @@ class TestImportURLVersionAware:
|
|||||||
assert (tmp_dir / "file").read_text() == "modified"
|
assert (tmp_dir / "file").read_text() == "modified"
|
||||||
assert dvc.status() == {}
|
assert dvc.status() == {}
|
||||||
|
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
remove(tmp_dir / "file")
|
remove(tmp_dir / "file")
|
||||||
dvc.pull()
|
dvc.pull()
|
||||||
assert (tmp_dir / "file").read_text() == "modified"
|
assert (tmp_dir / "file").read_text() == "modified"
|
||||||
@@ -119,7 +119,7 @@ class TestImportURLVersionAware:
|
|||||||
assert (tmp_dir / "data_dir" / "subdir" / "file").read_text() == "file"
|
assert (tmp_dir / "data_dir" / "subdir" / "file").read_text() == "file"
|
||||||
assert dvc.status() == {}
|
assert dvc.status() == {}
|
||||||
|
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
remove(tmp_dir / "data_dir")
|
remove(tmp_dir / "data_dir")
|
||||||
dvc.pull()
|
dvc.pull()
|
||||||
assert (tmp_dir / "data_dir" / "subdir" / "file").read_text() == "file"
|
assert (tmp_dir / "data_dir" / "subdir" / "file").read_text() == "file"
|
||||||
@@ -134,7 +134,7 @@ class TestImportURLVersionAware:
|
|||||||
assert (tmp_dir / "data_dir" / "new_file").read_text() == "new"
|
assert (tmp_dir / "data_dir" / "new_file").read_text() == "new"
|
||||||
assert dvc.status() == {}
|
assert dvc.status() == {}
|
||||||
|
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
remove(tmp_dir / "data_dir")
|
remove(tmp_dir / "data_dir")
|
||||||
dvc.pull()
|
dvc.pull()
|
||||||
assert (tmp_dir / "data_dir" / "subdir" / "file").read_text() == "modified"
|
assert (tmp_dir / "data_dir" / "subdir" / "file").read_text() == "modified"
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ def test_open_external(tmp_dir, erepo_dir, cloud):
|
|||||||
erepo_dir.dvc.push(all_branches=True)
|
erepo_dir.dvc.push(all_branches=True)
|
||||||
|
|
||||||
# Remove cache to force download
|
# Remove cache to force download
|
||||||
remove(erepo_dir.dvc.odb.local.path)
|
remove(erepo_dir.dvc.cache.local.path)
|
||||||
|
|
||||||
# Using file url to force clone to tmp repo
|
# Using file url to force clone to tmp repo
|
||||||
repo_url = f"file://{erepo_dir.as_posix()}"
|
repo_url = f"file://{erepo_dir.as_posix()}"
|
||||||
@@ -59,7 +59,7 @@ def test_open_granular(tmp_dir, dvc, remote):
|
|||||||
dvc.push()
|
dvc.push()
|
||||||
|
|
||||||
# Remove cache to force download
|
# Remove cache to force download
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
|
|
||||||
with api.open("dir/foo") as fd:
|
with api.open("dir/foo") as fd:
|
||||||
assert fd.read() == "foo-text"
|
assert fd.read() == "foo-text"
|
||||||
@@ -69,7 +69,7 @@ def test_missing(tmp_dir, dvc, remote):
|
|||||||
tmp_dir.dvc_gen("foo", "foo")
|
tmp_dir.dvc_gen("foo", "foo")
|
||||||
|
|
||||||
# Remove cache to make foo missing
|
# Remove cache to make foo missing
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
|
|
||||||
api.read("foo")
|
api.read("foo")
|
||||||
|
|
||||||
@@ -129,7 +129,7 @@ def test_api_missing_local_cache_exists_on_remote(
|
|||||||
dvc.push()
|
dvc.push()
|
||||||
|
|
||||||
# Remove cache to make foo missing
|
# Remove cache to make foo missing
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
remove(first(files))
|
remove(first(files))
|
||||||
|
|
||||||
repo_url = f"file://{tmp_dir.as_posix()}" if as_external else None
|
repo_url = f"file://{tmp_dir.as_posix()}" if as_external else None
|
||||||
@@ -202,7 +202,7 @@ def test_open_from_remote(tmp_dir, erepo_dir, cloud, local_cloud):
|
|||||||
erepo_dir.add_remote(config=local_cloud.config, default=True)
|
erepo_dir.add_remote(config=local_cloud.config, default=True)
|
||||||
erepo_dir.dvc_gen({"dir": {"foo": "foo content"}}, commit="create file")
|
erepo_dir.dvc_gen({"dir": {"foo": "foo content"}}, commit="create file")
|
||||||
erepo_dir.dvc.push(remote="other")
|
erepo_dir.dvc.push(remote="other")
|
||||||
remove(erepo_dir.dvc.odb.local.path)
|
remove(erepo_dir.dvc.cache.local.path)
|
||||||
|
|
||||||
with api.open(
|
with api.open(
|
||||||
os.path.join("dir", "foo"),
|
os.path.join("dir", "foo"),
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ def test_clear_on_download_err(tmp_dir, dvc, index, mocker):
|
|||||||
dvc.push()
|
dvc.push()
|
||||||
|
|
||||||
for _, _, hi in out.obj:
|
for _, _, hi in out.obj:
|
||||||
remove(dvc.odb.local.get(hi.value).path)
|
remove(dvc.cache.local.get(hi.value).path)
|
||||||
remove(out.fs_path)
|
remove(out.fs_path)
|
||||||
|
|
||||||
assert list(index.hashes())
|
assert list(index.hashes())
|
||||||
|
|||||||
@@ -303,12 +303,12 @@ def test_push_pull_cache(
|
|||||||
with open(path, encoding="utf-8") as f:
|
with open(path, encoding="utf-8") as f:
|
||||||
assert f.read() == str(x)
|
assert f.read() == str(x)
|
||||||
|
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
|
|
||||||
dvc.experiments.pull(remote, [ref_info.name], pull_cache=True)
|
dvc.experiments.pull(remote, [ref_info.name], pull_cache=True)
|
||||||
for x in range(2, checkpoint_stage.iterations + 1):
|
for x in range(2, checkpoint_stage.iterations + 1):
|
||||||
hash_ = digest(str(x))
|
hash_ = digest(str(x))
|
||||||
path = os.path.join(dvc.odb.local.path, hash_[:2], hash_[2:])
|
path = os.path.join(dvc.cache.local.path, hash_[:2], hash_[2:])
|
||||||
assert os.path.exists(path)
|
assert os.path.exists(path)
|
||||||
with open(path, encoding="utf-8") as f:
|
with open(path, encoding="utf-8") as f:
|
||||||
assert f.read() == str(x)
|
assert f.read() == str(x)
|
||||||
|
|||||||
@@ -259,7 +259,7 @@ def test_metrics_show_overlap(tmp_dir, dvc, run_copy_metrics, clear_before_run):
|
|||||||
# so as it works even for optimized cases
|
# so as it works even for optimized cases
|
||||||
if clear_before_run:
|
if clear_before_run:
|
||||||
remove(data_dir)
|
remove(data_dir)
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
|
|
||||||
dvc._reset()
|
dvc._reset()
|
||||||
|
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ def test_plots_show_overlap(tmp_dir, dvc, run_copy_metrics, clear_before_run):
|
|||||||
# so as it works even for optimized cases
|
# so as it works even for optimized cases
|
||||||
if clear_before_run:
|
if clear_before_run:
|
||||||
remove(data_dir)
|
remove(data_dir)
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
|
|
||||||
dvc._reset()
|
dvc._reset()
|
||||||
|
|
||||||
|
|||||||
+14
-14
@@ -12,6 +12,7 @@ import pytest
|
|||||||
import dvc as dvc_module
|
import dvc as dvc_module
|
||||||
import dvc_data
|
import dvc_data
|
||||||
from dvc.annotations import Annotation
|
from dvc.annotations import Annotation
|
||||||
|
from dvc.cachemgr import CacheManager
|
||||||
from dvc.cli import main
|
from dvc.cli import main
|
||||||
from dvc.config import ConfigError
|
from dvc.config import ConfigError
|
||||||
from dvc.dvcfile import DVC_FILE_SUFFIX
|
from dvc.dvcfile import DVC_FILE_SUFFIX
|
||||||
@@ -23,7 +24,6 @@ from dvc.exceptions import (
|
|||||||
RecursiveAddingWhileUsingFilename,
|
RecursiveAddingWhileUsingFilename,
|
||||||
)
|
)
|
||||||
from dvc.fs import LocalFileSystem, system
|
from dvc.fs import LocalFileSystem, system
|
||||||
from dvc.odbmgr import ODBManager
|
|
||||||
from dvc.output import (
|
from dvc.output import (
|
||||||
OutputAlreadyTrackedError,
|
OutputAlreadyTrackedError,
|
||||||
OutputDoesNotExistError,
|
OutputDoesNotExistError,
|
||||||
@@ -110,7 +110,7 @@ def test_add_directory(tmp_dir, dvc):
|
|||||||
|
|
||||||
hash_info = stage.outs[0].hash_info
|
hash_info = stage.outs[0].hash_info
|
||||||
|
|
||||||
obj = load(dvc.odb.local, hash_info)
|
obj = load(dvc.cache.local, hash_info)
|
||||||
for key, _, _ in obj:
|
for key, _, _ in obj:
|
||||||
for part in key:
|
for part in key:
|
||||||
assert "\\" not in part
|
assert "\\" not in part
|
||||||
@@ -407,12 +407,12 @@ def test_add_commit(tmp_dir, dvc):
|
|||||||
ret = main(["add", "foo", "--no-commit"])
|
ret = main(["add", "foo", "--no-commit"])
|
||||||
assert ret == 0
|
assert ret == 0
|
||||||
assert os.path.isfile("foo")
|
assert os.path.isfile("foo")
|
||||||
assert not os.path.exists(dvc.odb.local.path)
|
assert not os.path.exists(dvc.cache.local.path)
|
||||||
|
|
||||||
ret = main(["commit", "foo.dvc"])
|
ret = main(["commit", "foo.dvc"])
|
||||||
assert ret == 0
|
assert ret == 0
|
||||||
assert os.path.isfile("foo")
|
assert os.path.isfile("foo")
|
||||||
assert dvc.odb.local.exists("acbd18db4cc2f85cedef654fccc4a4d8")
|
assert dvc.cache.local.exists("acbd18db4cc2f85cedef654fccc4a4d8")
|
||||||
|
|
||||||
|
|
||||||
def test_should_collect_dir_cache_only_once(mocker, tmp_dir, dvc):
|
def test_should_collect_dir_cache_only_once(mocker, tmp_dir, dvc):
|
||||||
@@ -583,7 +583,7 @@ def test_windows_should_add_when_cache_on_different_drive(
|
|||||||
tmp_dir, dvc, temporary_windows_drive
|
tmp_dir, dvc, temporary_windows_drive
|
||||||
):
|
):
|
||||||
dvc.config["cache"]["dir"] = temporary_windows_drive
|
dvc.config["cache"]["dir"] = temporary_windows_drive
|
||||||
dvc.odb = ODBManager(dvc)
|
dvc.cache = CacheManager(dvc)
|
||||||
|
|
||||||
(stage,) = tmp_dir.dvc_gen({"file": "file"})
|
(stage,) = tmp_dir.dvc_gen({"file": "file"})
|
||||||
cache_path = stage.outs[0].cache_path
|
cache_path = stage.outs[0].cache_path
|
||||||
@@ -596,12 +596,12 @@ def test_windows_should_add_when_cache_on_different_drive(
|
|||||||
def test_readding_dir_should_not_unprotect_all(tmp_dir, dvc, mocker):
|
def test_readding_dir_should_not_unprotect_all(tmp_dir, dvc, mocker):
|
||||||
tmp_dir.gen("dir/data", "data")
|
tmp_dir.gen("dir/data", "data")
|
||||||
|
|
||||||
dvc.odb.local.cache_types = ["symlink"]
|
dvc.cache.local.cache_types = ["symlink"]
|
||||||
|
|
||||||
dvc.add("dir")
|
dvc.add("dir")
|
||||||
tmp_dir.gen("dir/new_file", "new_file_content")
|
tmp_dir.gen("dir/new_file", "new_file_content")
|
||||||
|
|
||||||
unprotect_spy = mocker.spy(dvc.odb.local, "unprotect")
|
unprotect_spy = mocker.spy(dvc.cache.local, "unprotect")
|
||||||
dvc.add("dir")
|
dvc.add("dir")
|
||||||
|
|
||||||
assert not unprotect_spy.mock.called
|
assert not unprotect_spy.mock.called
|
||||||
@@ -609,13 +609,13 @@ def test_readding_dir_should_not_unprotect_all(tmp_dir, dvc, mocker):
|
|||||||
|
|
||||||
|
|
||||||
def test_should_not_checkout_when_adding_cached_copy(tmp_dir, dvc, mocker):
|
def test_should_not_checkout_when_adding_cached_copy(tmp_dir, dvc, mocker):
|
||||||
dvc.odb.local.cache_types = ["copy"]
|
dvc.cache.local.cache_types = ["copy"]
|
||||||
|
|
||||||
tmp_dir.dvc_gen({"foo": "foo", "bar": "bar"})
|
tmp_dir.dvc_gen({"foo": "foo", "bar": "bar"})
|
||||||
|
|
||||||
shutil.copy("bar", "foo")
|
shutil.copy("bar", "foo")
|
||||||
|
|
||||||
copy_spy = mocker.spy(dvc.odb.local.fs, "copy")
|
copy_spy = mocker.spy(dvc.cache.local.fs, "copy")
|
||||||
|
|
||||||
dvc.add("foo")
|
dvc.add("foo")
|
||||||
|
|
||||||
@@ -637,11 +637,11 @@ def test_should_relink_on_repeated_add(link, new_link, link_test_func, tmp_dir,
|
|||||||
tmp_dir.dvc_gen({"foo": "foo", "bar": "bar"})
|
tmp_dir.dvc_gen({"foo": "foo", "bar": "bar"})
|
||||||
|
|
||||||
os.remove("foo")
|
os.remove("foo")
|
||||||
getattr(dvc.odb.local.fs, link)(
|
getattr(dvc.cache.local.fs, link)(
|
||||||
(tmp_dir / "bar").fs_path, (tmp_dir / "foo").fs_path
|
(tmp_dir / "bar").fs_path, (tmp_dir / "foo").fs_path
|
||||||
)
|
)
|
||||||
|
|
||||||
dvc.odb.local.cache_types = [new_link]
|
dvc.cache.local.cache_types = [new_link]
|
||||||
|
|
||||||
dvc.add("foo")
|
dvc.add("foo")
|
||||||
|
|
||||||
@@ -650,7 +650,7 @@ def test_should_relink_on_repeated_add(link, new_link, link_test_func, tmp_dir,
|
|||||||
|
|
||||||
@pytest.mark.parametrize("link", ["hardlink", "symlink", "copy"])
|
@pytest.mark.parametrize("link", ["hardlink", "symlink", "copy"])
|
||||||
def test_should_protect_on_repeated_add(link, tmp_dir, dvc):
|
def test_should_protect_on_repeated_add(link, tmp_dir, dvc):
|
||||||
dvc.odb.local.cache_types = [link]
|
dvc.cache.local.cache_types = [link]
|
||||||
|
|
||||||
tmp_dir.dvc_gen({"foo": "foo"})
|
tmp_dir.dvc_gen({"foo": "foo"})
|
||||||
|
|
||||||
@@ -709,7 +709,7 @@ def test_not_raises_on_re_add(tmp_dir, dvc):
|
|||||||
@pytest.mark.parametrize("link", ["hardlink", "symlink", "copy"])
|
@pytest.mark.parametrize("link", ["hardlink", "symlink", "copy"])
|
||||||
def test_add_empty_files(tmp_dir, dvc, link):
|
def test_add_empty_files(tmp_dir, dvc, link):
|
||||||
file = "foo"
|
file = "foo"
|
||||||
dvc.odb.local.cache_types = [link]
|
dvc.cache.local.cache_types = [link]
|
||||||
stages = tmp_dir.dvc_gen(file, "")
|
stages = tmp_dir.dvc_gen(file, "")
|
||||||
|
|
||||||
assert (tmp_dir / file).exists()
|
assert (tmp_dir / file).exists()
|
||||||
@@ -718,7 +718,7 @@ def test_add_empty_files(tmp_dir, dvc, link):
|
|||||||
|
|
||||||
|
|
||||||
def test_add_optimization_for_hardlink_on_empty_files(tmp_dir, dvc, mocker):
|
def test_add_optimization_for_hardlink_on_empty_files(tmp_dir, dvc, mocker):
|
||||||
dvc.odb.local.cache_types = ["hardlink"]
|
dvc.cache.local.cache_types = ["hardlink"]
|
||||||
tmp_dir.gen({"foo": "", "bar": "", "lorem": "lorem", "ipsum": "ipsum"})
|
tmp_dir.gen({"foo": "", "bar": "", "lorem": "lorem", "ipsum": "ipsum"})
|
||||||
m = mocker.spy(LocalFileSystem, "is_hardlink")
|
m = mocker.spy(LocalFileSystem, "is_hardlink")
|
||||||
stages = dvc.add(["foo", "bar", "lorem", "ipsum"])
|
stages = dvc.add(["foo", "bar", "lorem", "ipsum"])
|
||||||
|
|||||||
@@ -105,9 +105,9 @@ def test_checkout_corrupted_cache_dir(tmp_dir, dvc):
|
|||||||
|
|
||||||
# NOTE: modifying cache file for one of the files inside the directory
|
# NOTE: modifying cache file for one of the files inside the directory
|
||||||
# to check if dvc will detect that the cache is corrupted.
|
# to check if dvc will detect that the cache is corrupted.
|
||||||
obj = load(dvc.odb.local, out.hash_info)
|
obj = load(dvc.cache.local, out.hash_info)
|
||||||
_, _, entry_oid = list(obj)[0]
|
_, _, entry_oid = list(obj)[0]
|
||||||
cache = dvc.odb.local.oid_to_path(entry_oid.value)
|
cache = dvc.cache.local.oid_to_path(entry_oid.value)
|
||||||
|
|
||||||
os.chmod(cache, 0o644)
|
os.chmod(cache, 0o644)
|
||||||
with open(cache, "w+", encoding="utf-8") as fobj:
|
with open(cache, "w+", encoding="utf-8") as fobj:
|
||||||
@@ -161,7 +161,7 @@ class TestCheckoutCleanWorkingDir:
|
|||||||
|
|
||||||
def test_checkout_selective_remove(tmp_dir, dvc):
|
def test_checkout_selective_remove(tmp_dir, dvc):
|
||||||
# Use copy to test for changes in the inodes
|
# Use copy to test for changes in the inodes
|
||||||
dvc.odb.local.cache_types = ["copy"]
|
dvc.cache.local.cache_types = ["copy"]
|
||||||
tmp_dir.dvc_gen({"data": {"foo": "foo", "bar": "bar"}})
|
tmp_dir.dvc_gen({"data": {"foo": "foo", "bar": "bar"}})
|
||||||
|
|
||||||
foo_inode = system.inode(os.path.join("data", "foo"))
|
foo_inode = system.inode(os.path.join("data", "foo"))
|
||||||
@@ -357,7 +357,7 @@ def test_checkout_moved_cache_dir_with_symlinks(tmp_dir, dvc):
|
|||||||
assert system.is_symlink(os.path.join("data", "file"))
|
assert system.is_symlink(os.path.join("data", "file"))
|
||||||
old_data_link = os.path.realpath(os.path.join("data", "file"))
|
old_data_link = os.path.realpath(os.path.join("data", "file"))
|
||||||
|
|
||||||
old_cache_dir = dvc.odb.local.path
|
old_cache_dir = dvc.cache.local.path
|
||||||
new_cache_dir = old_cache_dir + "_new"
|
new_cache_dir = old_cache_dir + "_new"
|
||||||
os.rename(old_cache_dir, new_cache_dir)
|
os.rename(old_cache_dir, new_cache_dir)
|
||||||
|
|
||||||
@@ -395,7 +395,7 @@ def test_checkout_no_checksum(tmp_dir, dvc):
|
|||||||
[("hardlink", system.is_hardlink), ("symlink", system.is_symlink)],
|
[("hardlink", system.is_hardlink), ("symlink", system.is_symlink)],
|
||||||
)
|
)
|
||||||
def test_checkout_relink(tmp_dir, dvc, link, link_test_func):
|
def test_checkout_relink(tmp_dir, dvc, link, link_test_func):
|
||||||
dvc.odb.local.cache_types = [link]
|
dvc.cache.local.cache_types = [link]
|
||||||
|
|
||||||
tmp_dir.dvc_gen({"dir": {"data": "text"}})
|
tmp_dir.dvc_gen({"dir": {"data": "text"}})
|
||||||
dvc.unprotect("dir/data")
|
dvc.unprotect("dir/data")
|
||||||
@@ -408,7 +408,7 @@ def test_checkout_relink(tmp_dir, dvc, link, link_test_func):
|
|||||||
|
|
||||||
@pytest.mark.parametrize("link", ["hardlink", "symlink", "copy"])
|
@pytest.mark.parametrize("link", ["hardlink", "symlink", "copy"])
|
||||||
def test_checkout_relink_protected(tmp_dir, dvc, link):
|
def test_checkout_relink_protected(tmp_dir, dvc, link):
|
||||||
dvc.odb.local.cache_types = [link]
|
dvc.cache.local.cache_types = [link]
|
||||||
|
|
||||||
tmp_dir.dvc_gen("foo", "foo")
|
tmp_dir.dvc_gen("foo", "foo")
|
||||||
dvc.unprotect("foo")
|
dvc.unprotect("foo")
|
||||||
@@ -595,7 +595,7 @@ def test_checkout_with_relink_existing(tmp_dir, dvc, link):
|
|||||||
(tmp_dir / "foo").unlink()
|
(tmp_dir / "foo").unlink()
|
||||||
|
|
||||||
tmp_dir.dvc_gen("bar", "bar")
|
tmp_dir.dvc_gen("bar", "bar")
|
||||||
dvc.odb.local.cache_types = [link]
|
dvc.cache.local.cache_types = [link]
|
||||||
|
|
||||||
stats = dvc.checkout(relink=True)
|
stats = dvc.checkout(relink=True)
|
||||||
assert stats == {**empty_checkout, "added": ["foo"]}
|
assert stats == {**empty_checkout, "added": ["foo"]}
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ def test_cloud_cli(tmp_dir, dvc, remote, mocker):
|
|||||||
_kwargs["jobs"] == jobs for (_args, _kwargs) in oids_exist.call_args_list
|
_kwargs["jobs"] == jobs for (_args, _kwargs) in oids_exist.call_args_list
|
||||||
)
|
)
|
||||||
|
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
oids_exist.reset_mock()
|
oids_exist.reset_mock()
|
||||||
|
|
||||||
assert main(["fetch", *args]) == 0
|
assert main(["fetch", *args]) == 0
|
||||||
@@ -86,7 +86,7 @@ def test_cloud_cli(tmp_dir, dvc, remote, mocker):
|
|||||||
assert main(["gc", "-cw", "-f", *args]) == 0
|
assert main(["gc", "-cw", "-f", *args]) == 0
|
||||||
assert _list_oids_traverse.called
|
assert _list_oids_traverse.called
|
||||||
assert all(_kwargs["jobs"] == 2 for (_args, _kwargs) in oids_exist.call_args_list)
|
assert all(_kwargs["jobs"] == 2 for (_args, _kwargs) in oids_exist.call_args_list)
|
||||||
shutil.move(dvc.odb.local.path, dvc.odb.local.path + ".back")
|
shutil.move(dvc.cache.local.path, dvc.cache.local.path + ".back")
|
||||||
|
|
||||||
assert main(["fetch", *args]) == 0
|
assert main(["fetch", *args]) == 0
|
||||||
|
|
||||||
@@ -155,7 +155,7 @@ def test_missing_cache(tmp_dir, dvc, local_remote, caplog):
|
|||||||
tmp_dir.dvc_gen({"foo": "foo", "bar": "bar"})
|
tmp_dir.dvc_gen({"foo": "foo", "bar": "bar"})
|
||||||
|
|
||||||
# purge cache
|
# purge cache
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
|
|
||||||
header = (
|
header = (
|
||||||
"Some of the cache files do not exist "
|
"Some of the cache files do not exist "
|
||||||
@@ -194,7 +194,7 @@ def test_verify_hashes(tmp_dir, scm, dvc, mocker, tmp_path_factory, local_remote
|
|||||||
# remove artifacts and cache to trigger fetching
|
# remove artifacts and cache to trigger fetching
|
||||||
remove("file")
|
remove("file")
|
||||||
remove("dir")
|
remove("dir")
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
|
|
||||||
hash_spy = mocker.spy(dvc_data.hashfile.hash, "file_md5")
|
hash_spy = mocker.spy(dvc_data.hashfile.hash, "file_md5")
|
||||||
|
|
||||||
@@ -202,7 +202,7 @@ def test_verify_hashes(tmp_dir, scm, dvc, mocker, tmp_path_factory, local_remote
|
|||||||
assert hash_spy.call_count == 0
|
assert hash_spy.call_count == 0
|
||||||
|
|
||||||
# Removing cache will invalidate existing state entries
|
# Removing cache will invalidate existing state entries
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
|
|
||||||
dvc.config["remote"]["upstream"]["verify"] = True
|
dvc.config["remote"]["upstream"]["verify"] = True
|
||||||
|
|
||||||
@@ -224,9 +224,9 @@ def test_pull_git_imports(tmp_dir, dvc, scm, erepo):
|
|||||||
|
|
||||||
assert dvc.pull()["fetched"] == 0
|
assert dvc.pull()["fetched"] == 0
|
||||||
|
|
||||||
for item in ["foo", "new_dir", dvc.odb.local.path]:
|
for item in ["foo", "new_dir", dvc.cache.local.path]:
|
||||||
remove(item)
|
remove(item)
|
||||||
os.makedirs(dvc.odb.local.path, exist_ok=True)
|
os.makedirs(dvc.cache.local.path, exist_ok=True)
|
||||||
clean_repos()
|
clean_repos()
|
||||||
|
|
||||||
assert dvc.pull(force=True)["fetched"] == 3
|
assert dvc.pull(force=True)["fetched"] == 3
|
||||||
@@ -295,7 +295,7 @@ def test_pull_external_dvc_imports_mixed(tmp_dir, dvc, scm, erepo_dir, local_rem
|
|||||||
|
|
||||||
def clean(outs, dvc=None):
|
def clean(outs, dvc=None):
|
||||||
if dvc:
|
if dvc:
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
for path in outs:
|
for path in outs:
|
||||||
remove(path)
|
remove(path)
|
||||||
if dvc:
|
if dvc:
|
||||||
@@ -471,11 +471,11 @@ def test_push_pull_fetch_pipeline_stages(tmp_dir, dvc, run_copy, local_remote):
|
|||||||
|
|
||||||
dvc.pull("copy-foo-bar")
|
dvc.pull("copy-foo-bar")
|
||||||
assert (tmp_dir / "bar").exists()
|
assert (tmp_dir / "bar").exists()
|
||||||
assert len(recurse_list_dir(dvc.odb.local.path)) == 2
|
assert len(recurse_list_dir(dvc.cache.local.path)) == 2
|
||||||
clean(["bar"], dvc)
|
clean(["bar"], dvc)
|
||||||
|
|
||||||
dvc.fetch("copy-foo-bar")
|
dvc.fetch("copy-foo-bar")
|
||||||
assert len(recurse_list_dir(dvc.odb.local.path)) == 2
|
assert len(recurse_list_dir(dvc.cache.local.path)) == 2
|
||||||
|
|
||||||
|
|
||||||
def test_pull_partial(tmp_dir, dvc, local_remote):
|
def test_pull_partial(tmp_dir, dvc, local_remote):
|
||||||
@@ -521,7 +521,7 @@ def test_output_remote(tmp_dir, dvc, make_remote):
|
|||||||
|
|
||||||
dvc.pull()
|
dvc.pull()
|
||||||
|
|
||||||
assert set(dvc.odb.local.all()) == {
|
assert set(dvc.cache.local.all()) == {
|
||||||
"37b51d194a7513e45b56f6524f2d51f2",
|
"37b51d194a7513e45b56f6524f2d51f2",
|
||||||
"acbd18db4cc2f85cedef654fccc4a4d8",
|
"acbd18db4cc2f85cedef654fccc4a4d8",
|
||||||
"f97c5d29941bfb1b2fdab0874906ab82",
|
"f97c5d29941bfb1b2fdab0874906ab82",
|
||||||
@@ -554,7 +554,7 @@ def test_target_remote(tmp_dir, dvc, make_remote):
|
|||||||
|
|
||||||
dvc.pull(remote="myremote")
|
dvc.pull(remote="myremote")
|
||||||
|
|
||||||
assert set(dvc.odb.local.all()) == {
|
assert set(dvc.cache.local.all()) == {
|
||||||
"acbd18db4cc2f85cedef654fccc4a4d8",
|
"acbd18db4cc2f85cedef654fccc4a4d8",
|
||||||
"f97c5d29941bfb1b2fdab0874906ab82",
|
"f97c5d29941bfb1b2fdab0874906ab82",
|
||||||
"6b18131dc289fd37006705affe961ef8.dir",
|
"6b18131dc289fd37006705affe961ef8.dir",
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ def test_untracked_newly_added_files(M, tmp_dir, dvc, scm):
|
|||||||
def test_missing_cache_workspace_exists(M, tmp_dir, dvc, scm):
|
def test_missing_cache_workspace_exists(M, tmp_dir, dvc, scm):
|
||||||
tmp_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}})
|
tmp_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}})
|
||||||
tmp_dir.dvc_gen("foobar", "foobar")
|
tmp_dir.dvc_gen("foobar", "foobar")
|
||||||
remove(dvc.odb.repo.path)
|
remove(dvc.cache.repo.path)
|
||||||
|
|
||||||
assert dvc.data_status(untracked_files="all") == {
|
assert dvc.data_status(untracked_files="all") == {
|
||||||
**EMPTY_STATUS,
|
**EMPTY_STATUS,
|
||||||
@@ -260,7 +260,7 @@ def test_missing_cache_workspace_exists(M, tmp_dir, dvc, scm):
|
|||||||
def test_missing_cache_missing_workspace(M, tmp_dir, dvc, scm):
|
def test_missing_cache_missing_workspace(M, tmp_dir, dvc, scm):
|
||||||
tmp_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}})
|
tmp_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}})
|
||||||
tmp_dir.dvc_gen("foobar", "foobar")
|
tmp_dir.dvc_gen("foobar", "foobar")
|
||||||
for path in [dvc.odb.repo.path, "dir", "foobar"]:
|
for path in [dvc.cache.repo.path, "dir", "foobar"]:
|
||||||
remove(path)
|
remove(path)
|
||||||
|
|
||||||
assert dvc.data_status(untracked_files="all") == {
|
assert dvc.data_status(untracked_files="all") == {
|
||||||
@@ -285,7 +285,7 @@ def test_missing_cache_missing_workspace(M, tmp_dir, dvc, scm):
|
|||||||
def test_git_committed_missing_cache_workspace_exists(M, tmp_dir, dvc, scm):
|
def test_git_committed_missing_cache_workspace_exists(M, tmp_dir, dvc, scm):
|
||||||
tmp_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}}, commit="add dir")
|
tmp_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}}, commit="add dir")
|
||||||
tmp_dir.dvc_gen("foobar", "foobar", commit="add foobar")
|
tmp_dir.dvc_gen("foobar", "foobar", commit="add foobar")
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
|
|
||||||
assert dvc.data_status(untracked_files="all") == {
|
assert dvc.data_status(untracked_files="all") == {
|
||||||
**EMPTY_STATUS,
|
**EMPTY_STATUS,
|
||||||
@@ -308,7 +308,7 @@ def test_git_committed_missing_cache_workspace_exists(M, tmp_dir, dvc, scm):
|
|||||||
def test_git_committed_missing_cache_missing_workspace(M, tmp_dir, dvc, scm):
|
def test_git_committed_missing_cache_missing_workspace(M, tmp_dir, dvc, scm):
|
||||||
tmp_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}}, commit="add dir")
|
tmp_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}}, commit="add dir")
|
||||||
tmp_dir.dvc_gen("foobar", "foobar", commit="add foobar")
|
tmp_dir.dvc_gen("foobar", "foobar", commit="add foobar")
|
||||||
for path in [dvc.odb.repo.path, "dir", "foobar"]:
|
for path in [dvc.cache.repo.path, "dir", "foobar"]:
|
||||||
remove(path)
|
remove(path)
|
||||||
|
|
||||||
assert dvc.data_status(untracked_files="all") == {
|
assert dvc.data_status(untracked_files="all") == {
|
||||||
@@ -330,7 +330,7 @@ def test_partial_missing_cache(M, tmp_dir, dvc, scm):
|
|||||||
tmp_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}})
|
tmp_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}})
|
||||||
|
|
||||||
# remove "foo" from cache
|
# remove "foo" from cache
|
||||||
odb = dvc.odb.repo
|
odb = dvc.cache.repo
|
||||||
odb.fs.rm(odb.oid_to_path("acbd18db4cc2f85cedef654fccc4a4d8"))
|
odb.fs.rm(odb.oid_to_path("acbd18db4cc2f85cedef654fccc4a4d8"))
|
||||||
|
|
||||||
assert dvc.data_status() == {
|
assert dvc.data_status() == {
|
||||||
@@ -354,7 +354,7 @@ def test_missing_dir_object_from_head(M, tmp_dir, dvc, scm):
|
|||||||
(stage,) = tmp_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}}, commit="add dir")
|
(stage,) = tmp_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}}, commit="add dir")
|
||||||
remove("dir")
|
remove("dir")
|
||||||
tmp_dir.dvc_gen({"dir": {"foobar": "foobar"}})
|
tmp_dir.dvc_gen({"dir": {"foobar": "foobar"}})
|
||||||
odb = dvc.odb.repo
|
odb = dvc.cache.repo
|
||||||
odb.fs.rm(odb.oid_to_path(stage.outs[0].hash_info.value))
|
odb.fs.rm(odb.oid_to_path(stage.outs[0].hash_info.value))
|
||||||
|
|
||||||
assert dvc.data_status() == {
|
assert dvc.data_status() == {
|
||||||
@@ -376,7 +376,7 @@ def test_missing_dir_object_from_index(M, tmp_dir, dvc, scm):
|
|||||||
tmp_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}}, commit="add dir")
|
tmp_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}}, commit="add dir")
|
||||||
remove("dir")
|
remove("dir")
|
||||||
(stage,) = tmp_dir.dvc_gen({"dir": {"foobar": "foobar"}})
|
(stage,) = tmp_dir.dvc_gen({"dir": {"foobar": "foobar"}})
|
||||||
odb = dvc.odb.repo
|
odb = dvc.cache.repo
|
||||||
odb.fs.rm(odb.oid_to_path(stage.outs[0].hash_info.value))
|
odb.fs.rm(odb.oid_to_path(stage.outs[0].hash_info.value))
|
||||||
|
|
||||||
assert dvc.data_status() == {
|
assert dvc.data_status() == {
|
||||||
|
|||||||
@@ -250,10 +250,10 @@ def test_diff_no_cache(tmp_dir, scm, dvc):
|
|||||||
tmp_dir.dvc_gen({"dir": {"file": "modified file content"}}, commit="second")
|
tmp_dir.dvc_gen({"dir": {"file": "modified file content"}}, commit="second")
|
||||||
scm.tag("v2")
|
scm.tag("v2")
|
||||||
|
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
|
|
||||||
# invalidate_dir_info to force cache loading
|
# invalidate_dir_info to force cache loading
|
||||||
dvc.odb.local._dir_info = {}
|
dvc.cache.local._dir_info = {}
|
||||||
|
|
||||||
diff = dvc.diff("v1", "v2")
|
diff = dvc.diff("v1", "v2")
|
||||||
assert diff["added"] == []
|
assert diff["added"] == []
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ def test_relative_remote(erepo_dir, tmp_dir):
|
|||||||
erepo_dir.dvc.push()
|
erepo_dir.dvc.push()
|
||||||
|
|
||||||
(erepo_dir / "file").unlink()
|
(erepo_dir / "file").unlink()
|
||||||
remove(erepo_dir.dvc.odb.local.path)
|
remove(erepo_dir.dvc.cache.local.path)
|
||||||
|
|
||||||
url = os.fspath(erepo_dir)
|
url = os.fspath(erepo_dir)
|
||||||
|
|
||||||
@@ -195,12 +195,12 @@ def test_subrepos_are_ignored(tmp_dir, erepo_dir):
|
|||||||
assert (tmp_dir / "out").read_text() == expected_files
|
assert (tmp_dir / "out").read_text() == expected_files
|
||||||
|
|
||||||
# clear cache to test saving to cache
|
# clear cache to test saving to cache
|
||||||
cache_dir = tmp_dir / repo.odb.local.path
|
cache_dir = tmp_dir / repo.cache.local.path
|
||||||
remove(cache_dir)
|
remove(cache_dir)
|
||||||
os.makedirs(cache_dir)
|
os.makedirs(cache_dir)
|
||||||
|
|
||||||
staging, _, obj = build(
|
staging, _, obj = build(
|
||||||
repo.odb.local,
|
repo.cache.local,
|
||||||
"dir",
|
"dir",
|
||||||
repo.dvcfs,
|
repo.dvcfs,
|
||||||
"md5",
|
"md5",
|
||||||
@@ -208,7 +208,7 @@ def test_subrepos_are_ignored(tmp_dir, erepo_dir):
|
|||||||
)
|
)
|
||||||
transfer(
|
transfer(
|
||||||
staging,
|
staging,
|
||||||
repo.odb.local,
|
repo.cache.local,
|
||||||
{obj.hash_info},
|
{obj.hash_info},
|
||||||
shallow=False,
|
shallow=False,
|
||||||
hardlink=True,
|
hardlink=True,
|
||||||
|
|||||||
+20
-18
@@ -20,7 +20,7 @@ def good_and_bad_cache(tmp_dir, dvc):
|
|||||||
{"sub": {"data_sub": "data_sub", "data": "data", "тест": "проверка"}},
|
{"sub": {"data_sub": "data_sub", "data": "data", "тест": "проверка"}},
|
||||||
)
|
)
|
||||||
raw_dir_hash = stage.outs[0].hash_info.as_raw().value
|
raw_dir_hash = stage.outs[0].hash_info.as_raw().value
|
||||||
odb = dvc.odb.local
|
odb = dvc.cache.local
|
||||||
|
|
||||||
bad_cache = {raw_dir_hash}
|
bad_cache = {raw_dir_hash}
|
||||||
for i in ["123", "234", "345"]:
|
for i in ["123", "234", "345"]:
|
||||||
@@ -33,14 +33,14 @@ def good_and_bad_cache(tmp_dir, dvc):
|
|||||||
|
|
||||||
def test_gc_api(dvc, good_and_bad_cache):
|
def test_gc_api(dvc, good_and_bad_cache):
|
||||||
dvc.gc(workspace=True)
|
dvc.gc(workspace=True)
|
||||||
odb = dvc.odb.local
|
odb = dvc.cache.local
|
||||||
good_cache, bad_cache = good_and_bad_cache
|
good_cache, bad_cache = good_and_bad_cache
|
||||||
assert set(odb.oids_exist([*good_cache, *bad_cache])) == good_cache
|
assert set(odb.oids_exist([*good_cache, *bad_cache])) == good_cache
|
||||||
|
|
||||||
|
|
||||||
def test_gc_cli(dvc, good_and_bad_cache):
|
def test_gc_cli(dvc, good_and_bad_cache):
|
||||||
assert main(["gc", "-wf"]) == 0
|
assert main(["gc", "-wf"]) == 0
|
||||||
odb = dvc.odb.local
|
odb = dvc.cache.local
|
||||||
good_cache, bad_cache = good_and_bad_cache
|
good_cache, bad_cache = good_and_bad_cache
|
||||||
assert set(odb.oids_exist([*good_cache, *bad_cache])) == good_cache
|
assert set(odb.oids_exist([*good_cache, *bad_cache])) == good_cache
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ def test_gc_branches_tags(tmp_dir, dvc, scm):
|
|||||||
dvc.remove("file.dvc")
|
dvc.remove("file.dvc")
|
||||||
tmp_dir.dvc_gen("file", "master", commit="trash")
|
tmp_dir.dvc_gen("file", "master", commit="trash")
|
||||||
|
|
||||||
odb = dvc.odb.local
|
odb = dvc.cache.local
|
||||||
assert len(list(odb.all())) == 4
|
assert len(list(odb.all())) == 4
|
||||||
|
|
||||||
dvc.gc(all_tags=True, all_branches=True)
|
dvc.gc(all_tags=True, all_branches=True)
|
||||||
@@ -76,12 +76,12 @@ def test_gc_multiple_dvc_repos(tmp_dir, scm, dvc, erepo_dir):
|
|||||||
tmp_dir.dvc_gen("only_in_first", "only in main repo")
|
tmp_dir.dvc_gen("only_in_first", "only in main repo")
|
||||||
tmp_dir.dvc_gen("in_both", "in both repos")
|
tmp_dir.dvc_gen("in_both", "in both repos")
|
||||||
|
|
||||||
erepo_dir.dvc.odb.local.path = dvc.odb.local.path
|
erepo_dir.dvc.cache.local.path = dvc.cache.local.path
|
||||||
with erepo_dir.chdir():
|
with erepo_dir.chdir():
|
||||||
erepo_dir.dvc_gen("in_both", "in both repos")
|
erepo_dir.dvc_gen("in_both", "in both repos")
|
||||||
erepo_dir.dvc_gen("only_in_second", "only in additional repo")
|
erepo_dir.dvc_gen("only_in_second", "only in additional repo")
|
||||||
|
|
||||||
odb = dvc.odb.local
|
odb = dvc.cache.local
|
||||||
assert len(list(odb.all())) == 3
|
assert len(list(odb.all())) == 3
|
||||||
|
|
||||||
dvc.gc(repos=[erepo_dir], workspace=True)
|
dvc.gc(repos=[erepo_dir], workspace=True)
|
||||||
@@ -97,11 +97,11 @@ def test_all_commits(tmp_dir, scm, dvc):
|
|||||||
tmp_dir.dvc_gen("testfile", "modified", commit="modified")
|
tmp_dir.dvc_gen("testfile", "modified", commit="modified")
|
||||||
tmp_dir.dvc_gen("testfile", "workspace")
|
tmp_dir.dvc_gen("testfile", "workspace")
|
||||||
|
|
||||||
n = _count_files(dvc.odb.local.path)
|
n = _count_files(dvc.cache.local.path)
|
||||||
dvc.gc(all_commits=True)
|
dvc.gc(all_commits=True)
|
||||||
|
|
||||||
# Only one uncommitted file should go away
|
# Only one uncommitted file should go away
|
||||||
assert _count_files(dvc.odb.local.path) == n - 1
|
assert _count_files(dvc.cache.local.path) == n - 1
|
||||||
|
|
||||||
|
|
||||||
def test_gc_no_dir_cache(tmp_dir, dvc):
|
def test_gc_no_dir_cache(tmp_dir, dvc):
|
||||||
@@ -113,9 +113,9 @@ def test_gc_no_dir_cache(tmp_dir, dvc):
|
|||||||
with pytest.raises(CollectCacheError):
|
with pytest.raises(CollectCacheError):
|
||||||
dvc.gc(workspace=True)
|
dvc.gc(workspace=True)
|
||||||
|
|
||||||
assert _count_files(dvc.odb.local.path) == 4
|
assert _count_files(dvc.cache.local.path) == 4
|
||||||
dvc.gc(force=True, workspace=True)
|
dvc.gc(force=True, workspace=True)
|
||||||
assert _count_files(dvc.odb.local.path) == 2
|
assert _count_files(dvc.cache.local.path) == 2
|
||||||
|
|
||||||
|
|
||||||
def _count_files(path):
|
def _count_files(path):
|
||||||
@@ -240,14 +240,14 @@ def test_gc_not_collect_pipeline_tracked_files(tmp_dir, dvc, run_copy):
|
|||||||
|
|
||||||
run_copy("foo", "foo2", name="copy")
|
run_copy("foo", "foo2", name="copy")
|
||||||
shutil.rmtree(dvc.stage_cache.cache_dir)
|
shutil.rmtree(dvc.stage_cache.cache_dir)
|
||||||
assert _count_files(dvc.odb.local.path) == 1
|
assert _count_files(dvc.cache.local.path) == 1
|
||||||
dvc.gc(workspace=True, force=True)
|
dvc.gc(workspace=True, force=True)
|
||||||
assert _count_files(dvc.odb.local.path) == 1
|
assert _count_files(dvc.cache.local.path) == 1
|
||||||
|
|
||||||
# remove pipeline file and lockfile and check
|
# remove pipeline file and lockfile and check
|
||||||
load_file(dvc, PROJECT_FILE).remove(force=True)
|
load_file(dvc, PROJECT_FILE).remove(force=True)
|
||||||
dvc.gc(workspace=True, force=True)
|
dvc.gc(workspace=True, force=True)
|
||||||
assert _count_files(dvc.odb.local.path) == 0
|
assert _count_files(dvc.cache.local.path) == 0
|
||||||
|
|
||||||
|
|
||||||
def test_gc_external_output(tmp_dir, dvc, workspace):
|
def test_gc_external_output(tmp_dir, dvc, workspace):
|
||||||
@@ -328,13 +328,15 @@ def test_date(tmp_dir, scm, dvc):
|
|||||||
|
|
||||||
dvc.gc(commit_date=datestamp)
|
dvc.gc(commit_date=datestamp)
|
||||||
|
|
||||||
assert _count_files(dvc.odb.local.path) == 1
|
assert _count_files(dvc.cache.local.path) == 1
|
||||||
assert dvc.odb.local.exists("9ae73c65f418e6f79ceb4f0e4a4b98d5") # "modified"
|
assert dvc.cache.local.exists("9ae73c65f418e6f79ceb4f0e4a4b98d5") # "modified"
|
||||||
|
|
||||||
tmp_dir.dvc_gen("testfile", "modified, again", commit="modify")
|
tmp_dir.dvc_gen("testfile", "modified, again", commit="modify")
|
||||||
|
|
||||||
datestamp = (now.date() - datetime.timedelta(days=1)).isoformat()
|
datestamp = (now.date() - datetime.timedelta(days=1)).isoformat()
|
||||||
dvc.gc(commit_date=datestamp)
|
dvc.gc(commit_date=datestamp)
|
||||||
assert _count_files(dvc.odb.local.path) == 2
|
assert _count_files(dvc.cache.local.path) == 2
|
||||||
assert dvc.odb.local.exists("9ae73c65f418e6f79ceb4f0e4a4b98d5")
|
assert dvc.cache.local.exists("9ae73c65f418e6f79ceb4f0e4a4b98d5")
|
||||||
assert dvc.odb.local.exists("3bcf3b1be3e794a97a5a6b93a005784c") # "modified, again"
|
assert dvc.cache.local.exists(
|
||||||
|
"3bcf3b1be3e794a97a5a6b93a005784c"
|
||||||
|
) # "modified, again"
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ import os
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from dvc.cachemgr import CacheManager
|
||||||
from dvc.cli import main
|
from dvc.cli import main
|
||||||
from dvc.fs import system
|
from dvc.fs import system
|
||||||
from dvc.odbmgr import ODBManager
|
|
||||||
from dvc.repo import Repo
|
from dvc.repo import Repo
|
||||||
from dvc.repo.get import GetDVCFileError
|
from dvc.repo.get import GetDVCFileError
|
||||||
from dvc.testing.tmp_dir import make_subrepo
|
from dvc.testing.tmp_dir import make_subrepo
|
||||||
@@ -76,7 +76,7 @@ def test_cache_type_is_properly_overridden(tmp_dir, erepo_dir):
|
|||||||
with erepo_dir.chdir():
|
with erepo_dir.chdir():
|
||||||
with erepo_dir.dvc.config.edit() as conf:
|
with erepo_dir.dvc.config.edit() as conf:
|
||||||
conf["cache"]["type"] = "symlink"
|
conf["cache"]["type"] = "symlink"
|
||||||
erepo_dir.dvc.odb = ODBManager(erepo_dir.dvc)
|
erepo_dir.dvc.cache = CacheManager(erepo_dir.dvc)
|
||||||
erepo_dir.scm_add(
|
erepo_dir.scm_add(
|
||||||
[erepo_dir.dvc.config.files["repo"]], "set cache type to symlinks"
|
[erepo_dir.dvc.config.files["repo"]], "set cache type to symlinks"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -477,7 +477,7 @@ def test_pull_ignore(tmp_dir, dvc, local_cloud):
|
|||||||
foo_path.unlink()
|
foo_path.unlink()
|
||||||
assert not foo_path.exists()
|
assert not foo_path.exists()
|
||||||
|
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
dvc.pull()
|
dvc.pull()
|
||||||
|
|
||||||
assert foo_path.exists()
|
assert foo_path.exists()
|
||||||
|
|||||||
+10
-10
@@ -5,11 +5,11 @@ import pytest
|
|||||||
from funcy import first
|
from funcy import first
|
||||||
|
|
||||||
from dvc.annotations import Annotation
|
from dvc.annotations import Annotation
|
||||||
|
from dvc.cachemgr import CacheManager
|
||||||
from dvc.config import NoRemoteError
|
from dvc.config import NoRemoteError
|
||||||
from dvc.dvcfile import load_file
|
from dvc.dvcfile import load_file
|
||||||
from dvc.exceptions import DownloadError, PathMissingError
|
from dvc.exceptions import DownloadError, PathMissingError
|
||||||
from dvc.fs import system
|
from dvc.fs import system
|
||||||
from dvc.odbmgr import ODBManager
|
|
||||||
from dvc.scm import Git
|
from dvc.scm import Git
|
||||||
from dvc.stage.exceptions import StagePathNotFoundError
|
from dvc.stage.exceptions import StagePathNotFoundError
|
||||||
from dvc.testing.tmp_dir import make_subrepo
|
from dvc.testing.tmp_dir import make_subrepo
|
||||||
@@ -272,7 +272,7 @@ def test_cache_type_is_properly_overridden(tmp_dir, scm, dvc, erepo_dir):
|
|||||||
with erepo_dir.chdir():
|
with erepo_dir.chdir():
|
||||||
with erepo_dir.dvc.config.edit() as conf:
|
with erepo_dir.dvc.config.edit() as conf:
|
||||||
conf["cache"]["type"] = "symlink"
|
conf["cache"]["type"] = "symlink"
|
||||||
erepo_dir.dvc.odb = ODBManager(erepo_dir.dvc)
|
erepo_dir.dvc.cache = CacheManager(erepo_dir.dvc)
|
||||||
erepo_dir.scm_add(
|
erepo_dir.scm_add(
|
||||||
[erepo_dir.dvc.config.files["repo"]],
|
[erepo_dir.dvc.config.files["repo"]],
|
||||||
"set source repo cache type to symlink",
|
"set source repo cache type to symlink",
|
||||||
@@ -294,7 +294,7 @@ def test_pull_imported_directory_stage(tmp_dir, dvc, erepo_dir):
|
|||||||
dvc.imp(os.fspath(erepo_dir), "dir", "dir_imported")
|
dvc.imp(os.fspath(erepo_dir), "dir", "dir_imported")
|
||||||
|
|
||||||
remove("dir_imported")
|
remove("dir_imported")
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
|
|
||||||
dvc.pull(["dir_imported.dvc"])
|
dvc.pull(["dir_imported.dvc"])
|
||||||
|
|
||||||
@@ -308,7 +308,7 @@ def test_pull_wildcard_imported_directory_stage(tmp_dir, dvc, erepo_dir):
|
|||||||
dvc.imp(os.fspath(erepo_dir), "dir123", "dir_imported123")
|
dvc.imp(os.fspath(erepo_dir), "dir123", "dir_imported123")
|
||||||
|
|
||||||
remove("dir_imported123")
|
remove("dir_imported123")
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
|
|
||||||
dvc.pull(["dir_imported*.dvc"], glob=True)
|
dvc.pull(["dir_imported*.dvc"], glob=True)
|
||||||
|
|
||||||
@@ -536,7 +536,7 @@ def test_pull_imported_stage_from_subrepos(tmp_dir, dvc, erepo_dir, is_dvc, file
|
|||||||
dvc.imp(os.fspath(erepo_dir), path, out="out")
|
dvc.imp(os.fspath(erepo_dir), path, out="out")
|
||||||
|
|
||||||
# clean everything
|
# clean everything
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
remove("out")
|
remove("out")
|
||||||
|
|
||||||
stats = dvc.pull(["out.dvc"])
|
stats = dvc.pull(["out.dvc"])
|
||||||
@@ -606,7 +606,7 @@ def test_chained_import(tmp_dir, dvc, make_tmp_dir, erepo_dir, local_cloud):
|
|||||||
with erepo_dir.chdir():
|
with erepo_dir.chdir():
|
||||||
erepo_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}}, commit="init")
|
erepo_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}}, commit="init")
|
||||||
erepo_dir.dvc.push()
|
erepo_dir.dvc.push()
|
||||||
remove(erepo_dir.dvc.odb.local.path)
|
remove(erepo_dir.dvc.cache.local.path)
|
||||||
remove(os.fspath(erepo_dir / "dir"))
|
remove(os.fspath(erepo_dir / "dir"))
|
||||||
|
|
||||||
erepo2 = make_tmp_dir("erepo2", scm=True, dvc=True)
|
erepo2 = make_tmp_dir("erepo2", scm=True, dvc=True)
|
||||||
@@ -614,7 +614,7 @@ def test_chained_import(tmp_dir, dvc, make_tmp_dir, erepo_dir, local_cloud):
|
|||||||
erepo2.dvc.imp(os.fspath(erepo_dir), "dir")
|
erepo2.dvc.imp(os.fspath(erepo_dir), "dir")
|
||||||
erepo2.scm.add("dir.dvc")
|
erepo2.scm.add("dir.dvc")
|
||||||
erepo2.scm.commit("import")
|
erepo2.scm.commit("import")
|
||||||
remove(erepo2.dvc.odb.local.path)
|
remove(erepo2.dvc.cache.local.path)
|
||||||
remove(os.fspath(erepo2 / "dir"))
|
remove(os.fspath(erepo2 / "dir"))
|
||||||
|
|
||||||
dvc.imp(os.fspath(erepo2), "dir", "dir_imported")
|
dvc.imp(os.fspath(erepo2), "dir", "dir_imported")
|
||||||
@@ -622,14 +622,14 @@ def test_chained_import(tmp_dir, dvc, make_tmp_dir, erepo_dir, local_cloud):
|
|||||||
assert (dst / "foo").read_text() == "foo"
|
assert (dst / "foo").read_text() == "foo"
|
||||||
assert (dst / "bar").read_text() == "bar"
|
assert (dst / "bar").read_text() == "bar"
|
||||||
|
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
remove("dir_imported")
|
remove("dir_imported")
|
||||||
|
|
||||||
# pulled objects should come from the original upstream repo's remote,
|
# pulled objects should come from the original upstream repo's remote,
|
||||||
# no cache or remote should be needed from the intermediate repo
|
# no cache or remote should be needed from the intermediate repo
|
||||||
dvc.pull(["dir_imported.dvc"])
|
dvc.pull(["dir_imported.dvc"])
|
||||||
assert not os.path.exists(erepo_dir.dvc.odb.local.path)
|
assert not os.path.exists(erepo_dir.dvc.cache.local.path)
|
||||||
assert not os.path.exists(erepo2.dvc.odb.local.path)
|
assert not os.path.exists(erepo2.dvc.cache.local.path)
|
||||||
assert (dst / "foo").read_text() == "foo"
|
assert (dst / "foo").read_text() == "foo"
|
||||||
assert (dst / "bar").read_text() == "bar"
|
assert (dst / "bar").read_text() == "bar"
|
||||||
|
|
||||||
|
|||||||
+17
-17
@@ -4,8 +4,8 @@ import stat
|
|||||||
import configobj
|
import configobj
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from dvc.cachemgr import CacheManager
|
||||||
from dvc.cli import main
|
from dvc.cli import main
|
||||||
from dvc.odbmgr import ODBManager
|
|
||||||
from dvc.utils import relpath
|
from dvc.utils import relpath
|
||||||
from dvc_data.hashfile.hash_info import HashInfo
|
from dvc_data.hashfile.hash_info import HashInfo
|
||||||
from dvc_objects.errors import ObjectFormatError
|
from dvc_objects.errors import ObjectFormatError
|
||||||
@@ -15,12 +15,12 @@ def test_cache(tmp_dir, dvc):
|
|||||||
cache1_md5 = "123"
|
cache1_md5 = "123"
|
||||||
cache2_md5 = "234"
|
cache2_md5 = "234"
|
||||||
cache1 = os.path.join(
|
cache1 = os.path.join(
|
||||||
dvc.odb.local.path,
|
dvc.cache.local.path,
|
||||||
cache1_md5[0:2],
|
cache1_md5[0:2],
|
||||||
cache1_md5[2:],
|
cache1_md5[2:],
|
||||||
)
|
)
|
||||||
cache2 = os.path.join(
|
cache2 = os.path.join(
|
||||||
dvc.odb.local.path,
|
dvc.cache.local.path,
|
||||||
cache2_md5[0:2],
|
cache2_md5[0:2],
|
||||||
cache2_md5[2:],
|
cache2_md5[2:],
|
||||||
)
|
)
|
||||||
@@ -29,7 +29,7 @@ def test_cache(tmp_dir, dvc):
|
|||||||
assert os.path.exists(cache1)
|
assert os.path.exists(cache1)
|
||||||
assert os.path.exists(cache2)
|
assert os.path.exists(cache2)
|
||||||
|
|
||||||
odb = ODBManager(dvc)
|
odb = CacheManager(dvc)
|
||||||
|
|
||||||
md5_list = list(odb.local.all())
|
md5_list = list(odb.local.all())
|
||||||
assert len(md5_list) == 2
|
assert len(md5_list) == 2
|
||||||
@@ -46,16 +46,16 @@ def test_cache_load_bad_dir_cache(tmp_dir, dvc):
|
|||||||
from dvc_data.hashfile import load
|
from dvc_data.hashfile import load
|
||||||
|
|
||||||
dir_hash = "123.dir"
|
dir_hash = "123.dir"
|
||||||
fname = os.fspath(dvc.odb.local.oid_to_path(dir_hash))
|
fname = os.fspath(dvc.cache.local.oid_to_path(dir_hash))
|
||||||
tmp_dir.gen({fname: "<clearly>not,json"})
|
tmp_dir.gen({fname: "<clearly>not,json"})
|
||||||
with pytest.raises(ObjectFormatError):
|
with pytest.raises(ObjectFormatError):
|
||||||
load(dvc.odb.local, HashInfo("md5", dir_hash))
|
load(dvc.cache.local, HashInfo("md5", dir_hash))
|
||||||
|
|
||||||
dir_hash = "234.dir"
|
dir_hash = "234.dir"
|
||||||
fname = os.fspath(dvc.odb.local.oid_to_path(dir_hash))
|
fname = os.fspath(dvc.cache.local.oid_to_path(dir_hash))
|
||||||
tmp_dir.gen({fname: '{"a": "b"}'})
|
tmp_dir.gen({fname: '{"a": "b"}'})
|
||||||
with pytest.raises(ObjectFormatError):
|
with pytest.raises(ObjectFormatError):
|
||||||
load(dvc.odb.local, HashInfo("md5", dir_hash))
|
load(dvc.cache.local, HashInfo("md5", dir_hash))
|
||||||
|
|
||||||
|
|
||||||
def test_external_cache_dir(tmp_dir, dvc, make_tmp_dir):
|
def test_external_cache_dir(tmp_dir, dvc, make_tmp_dir):
|
||||||
@@ -63,8 +63,8 @@ def test_external_cache_dir(tmp_dir, dvc, make_tmp_dir):
|
|||||||
|
|
||||||
with dvc.config.edit() as conf:
|
with dvc.config.edit() as conf:
|
||||||
conf["cache"]["dir"] = cache_dir.fs_path
|
conf["cache"]["dir"] = cache_dir.fs_path
|
||||||
assert not os.path.exists(dvc.odb.local.path)
|
assert not os.path.exists(dvc.cache.local.path)
|
||||||
dvc.odb = ODBManager(dvc)
|
dvc.cache = CacheManager(dvc)
|
||||||
|
|
||||||
tmp_dir.dvc_gen({"foo": "foo"})
|
tmp_dir.dvc_gen({"foo": "foo"})
|
||||||
|
|
||||||
@@ -87,9 +87,9 @@ def test_remote_cache_references(tmp_dir, dvc):
|
|||||||
conf["remote"]["cache"] = {"url": "remote://storage/tmp"}
|
conf["remote"]["cache"] = {"url": "remote://storage/tmp"}
|
||||||
conf["cache"]["ssh"] = "cache"
|
conf["cache"]["ssh"] = "cache"
|
||||||
|
|
||||||
dvc.odb = ODBManager(dvc)
|
dvc.cache = CacheManager(dvc)
|
||||||
|
|
||||||
assert dvc.odb.ssh.path == "/tmp"
|
assert dvc.cache.ssh.path == "/tmp"
|
||||||
|
|
||||||
|
|
||||||
def test_shared_cache_dir(tmp_dir):
|
def test_shared_cache_dir(tmp_dir):
|
||||||
@@ -126,7 +126,7 @@ def test_shared_cache_dir(tmp_dir):
|
|||||||
def test_cache_link_type(tmp_dir, scm, dvc):
|
def test_cache_link_type(tmp_dir, scm, dvc):
|
||||||
with dvc.config.edit() as conf:
|
with dvc.config.edit() as conf:
|
||||||
conf["cache"]["type"] = "reflink,copy"
|
conf["cache"]["type"] = "reflink,copy"
|
||||||
dvc.odb = ODBManager(dvc)
|
dvc.cache = CacheManager(dvc)
|
||||||
|
|
||||||
stages = tmp_dir.dvc_gen({"foo": "foo"})
|
stages = tmp_dir.dvc_gen({"foo": "foo"})
|
||||||
assert len(stages) == 1
|
assert len(stages) == 1
|
||||||
@@ -154,7 +154,7 @@ def test_cmd_cache_relative_path(tmp_dir, scm, dvc, make_tmp_dir):
|
|||||||
assert ret == 0
|
assert ret == 0
|
||||||
|
|
||||||
dvc.config.load()
|
dvc.config.load()
|
||||||
dvc.odb = ODBManager(dvc)
|
dvc.cache = CacheManager(dvc)
|
||||||
|
|
||||||
# NOTE: we are in the repo's root and config is in .dvc/, so
|
# NOTE: we are in the repo's root and config is in .dvc/, so
|
||||||
# dir path written to config should be just one level above.
|
# dir path written to config should be just one level above.
|
||||||
@@ -170,7 +170,7 @@ def test_cmd_cache_relative_path(tmp_dir, scm, dvc, make_tmp_dir):
|
|||||||
|
|
||||||
|
|
||||||
def test_default_cache_type(dvc):
|
def test_default_cache_type(dvc):
|
||||||
assert dvc.odb.local.cache_types == ["reflink", "copy"]
|
assert dvc.cache.local.cache_types == ["reflink", "copy"]
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.skipif(os.name == "nt", reason="Not supported for Windows.")
|
@pytest.mark.skipif(os.name == "nt", reason="Not supported for Windows.")
|
||||||
@@ -181,8 +181,8 @@ def test_shared_cache(tmp_dir, dvc, group):
|
|||||||
if group:
|
if group:
|
||||||
with dvc.config.edit() as conf:
|
with dvc.config.edit() as conf:
|
||||||
conf["cache"].update({"shared": "group"})
|
conf["cache"].update({"shared": "group"})
|
||||||
dvc.odb = ODBManager(dvc)
|
dvc.cache = CacheManager(dvc)
|
||||||
cache_dir = dvc.odb.local.path
|
cache_dir = dvc.cache.local.path
|
||||||
|
|
||||||
assert not os.path.exists(cache_dir)
|
assert not os.path.exists(cache_dir)
|
||||||
|
|
||||||
|
|||||||
@@ -139,16 +139,16 @@ def test_dir_hash_should_be_key_order_agnostic(tmp_dir, dvc):
|
|||||||
tree = Tree.from_list([{"relpath": "1", "md5": "1"}, {"relpath": "2", "md5": "2"}])
|
tree = Tree.from_list([{"relpath": "1", "md5": "1"}, {"relpath": "2", "md5": "2"}])
|
||||||
tree.digest()
|
tree.digest()
|
||||||
with patch("dvc_data.hashfile.build._build_tree", return_value=(None, tree)):
|
with patch("dvc_data.hashfile.build._build_tree", return_value=(None, tree)):
|
||||||
_, _, obj = build(dvc.odb.local, path, dvc.odb.local.fs, "md5")
|
_, _, obj = build(dvc.cache.local, path, dvc.cache.local.fs, "md5")
|
||||||
hash1 = obj.hash_info
|
hash1 = obj.hash_info
|
||||||
|
|
||||||
# remove the raw dir obj to force building the tree on the next build call
|
# remove the raw dir obj to force building the tree on the next build call
|
||||||
dvc.odb.local.fs.remove(dvc.odb.local.oid_to_path(hash1.as_raw().value))
|
dvc.cache.local.fs.remove(dvc.cache.local.oid_to_path(hash1.as_raw().value))
|
||||||
|
|
||||||
tree = Tree.from_list([{"md5": "1", "relpath": "1"}, {"md5": "2", "relpath": "2"}])
|
tree = Tree.from_list([{"md5": "1", "relpath": "1"}, {"md5": "2", "relpath": "2"}])
|
||||||
tree.digest()
|
tree.digest()
|
||||||
with patch("dvc_data.hashfile.build._build_tree", return_value=(None, tree)):
|
with patch("dvc_data.hashfile.build._build_tree", return_value=(None, tree)):
|
||||||
_, _, obj = build(dvc.odb.local, path, dvc.odb.local.fs, "md5")
|
_, _, obj = build(dvc.cache.local, path, dvc.cache.local.fs, "md5")
|
||||||
hash2 = obj.hash_info
|
hash2 = obj.hash_info
|
||||||
|
|
||||||
assert hash1 == hash2
|
assert hash1 == hash2
|
||||||
@@ -201,7 +201,7 @@ def test_partial_push_n_pull( # noqa: C901
|
|||||||
|
|
||||||
# Push everything and delete local cache
|
# Push everything and delete local cache
|
||||||
dvc.push()
|
dvc.push()
|
||||||
dvc.odb.local.clear()
|
dvc.cache.local.clear()
|
||||||
|
|
||||||
baz._collect_used_dir_cache()
|
baz._collect_used_dir_cache()
|
||||||
|
|
||||||
@@ -263,7 +263,7 @@ def test_external_dir_resource_on_no_cache(tmp_dir, dvc, tmp_path_factory):
|
|||||||
external_dir = tmp_path_factory.mktemp("external_dir")
|
external_dir = tmp_path_factory.mktemp("external_dir")
|
||||||
file = external_dir / "file"
|
file = external_dir / "file"
|
||||||
|
|
||||||
dvc.odb.local = None
|
dvc.cache.local = None
|
||||||
with pytest.raises(RemoteCacheRequiredError):
|
with pytest.raises(RemoteCacheRequiredError):
|
||||||
dvc.run(
|
dvc.run(
|
||||||
cmd=f"echo content > {file}",
|
cmd=f"echo content > {file}",
|
||||||
@@ -426,7 +426,7 @@ def test_push_incomplete_dir(tmp_dir, dvc, mocker, local_remote):
|
|||||||
(stage,) = tmp_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}})
|
(stage,) = tmp_dir.dvc_gen({"dir": {"foo": "foo", "bar": "bar"}})
|
||||||
remote_odb = dvc.cloud.get_remote_odb("upstream")
|
remote_odb = dvc.cloud.get_remote_odb("upstream")
|
||||||
|
|
||||||
odb = dvc.odb.local
|
odb = dvc.cache.local
|
||||||
out = stage.outs[0]
|
out = stage.outs[0]
|
||||||
file_objs = [entry_obj for _, _, entry_obj in out.obj]
|
file_objs = [entry_obj for _, _, entry_obj in out.obj]
|
||||||
|
|
||||||
|
|||||||
@@ -53,10 +53,10 @@ def test_remove_non_existent_file(tmp_dir, dvc):
|
|||||||
|
|
||||||
def test_remove_broken_symlink(tmp_dir, dvc):
|
def test_remove_broken_symlink(tmp_dir, dvc):
|
||||||
tmp_dir.gen("foo", "foo")
|
tmp_dir.gen("foo", "foo")
|
||||||
dvc.odb.local.cache_types = ["symlink"]
|
dvc.cache.local.cache_types = ["symlink"]
|
||||||
|
|
||||||
(stage,) = dvc.add("foo")
|
(stage,) = dvc.add("foo")
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
assert system.is_symlink("foo")
|
assert system.is_symlink("foo")
|
||||||
|
|
||||||
with pytest.raises(ObjectDBError):
|
with pytest.raises(ObjectDBError):
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
|
from dvc.cachemgr import CacheManager
|
||||||
from dvc.dvcfile import LOCK_FILE, PROJECT_FILE
|
from dvc.dvcfile import LOCK_FILE, PROJECT_FILE
|
||||||
from dvc.fs import system
|
from dvc.fs import system
|
||||||
from dvc.odbmgr import ODBManager
|
|
||||||
|
|
||||||
|
|
||||||
def test_destroy(tmp_dir, dvc, run_copy):
|
def test_destroy(tmp_dir, dvc, run_copy):
|
||||||
dvc.config["cache"]["type"] = ["symlink"]
|
dvc.config["cache"]["type"] = ["symlink"]
|
||||||
dvc.odb = ODBManager(dvc)
|
dvc.cache = CacheManager(dvc)
|
||||||
|
|
||||||
tmp_dir.dvc_gen("file", "text")
|
tmp_dir.dvc_gen("file", "text")
|
||||||
tmp_dir.dvc_gen({"dir": {"file": "lorem", "subdir/file": "ipsum"}})
|
tmp_dir.dvc_gen({"dir": {"file": "lorem", "subdir/file": "ipsum"}})
|
||||||
|
|||||||
@@ -837,11 +837,11 @@ def test_repro_no_commit(tmp_dir, dvc, copy_script, run_stage):
|
|||||||
cmd="python copy.py foo file1",
|
cmd="python copy.py foo file1",
|
||||||
name="run1",
|
name="run1",
|
||||||
)
|
)
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
ret = main(["repro", stage.addressing, "--no-commit"])
|
ret = main(["repro", stage.addressing, "--no-commit"])
|
||||||
assert ret == 0
|
assert ret == 0
|
||||||
# run-cache should be skipped if `-no-commit`.
|
# run-cache should be skipped if `-no-commit`.
|
||||||
assert not os.path.isdir(dvc.odb.local.path)
|
assert not os.path.isdir(dvc.cache.local.path)
|
||||||
|
|
||||||
|
|
||||||
class TestReproAlreadyCached:
|
class TestReproAlreadyCached:
|
||||||
|
|||||||
@@ -682,12 +682,12 @@ def test_run_commit(dvc):
|
|||||||
)
|
)
|
||||||
assert ret == 0
|
assert ret == 0
|
||||||
assert os.path.isfile(fname)
|
assert os.path.isfile(fname)
|
||||||
assert not os.path.exists(dvc.odb.local.path)
|
assert not os.path.exists(dvc.cache.local.path)
|
||||||
|
|
||||||
ret = main(["commit", fname + ".dvc"])
|
ret = main(["commit", fname + ".dvc"])
|
||||||
assert ret == 0
|
assert ret == 0
|
||||||
assert os.path.isfile(fname)
|
assert os.path.isfile(fname)
|
||||||
assert len(list(dvc.odb.local.all())) == 1
|
assert len(list(dvc.cache.local.all())) == 1
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
@@ -789,7 +789,7 @@ def test_should_not_checkout_upon_corrupted_local_hardlink_cache(
|
|||||||
mocker, tmp_dir, dvc, copy_script
|
mocker, tmp_dir, dvc, copy_script
|
||||||
):
|
):
|
||||||
tmp_dir.gen("foo", "foo")
|
tmp_dir.gen("foo", "foo")
|
||||||
dvc.odb.local.cache_types = ["hardlink"]
|
dvc.cache.local.cache_types = ["hardlink"]
|
||||||
|
|
||||||
stage = dvc.run(
|
stage = dvc.run(
|
||||||
deps=["foo"],
|
deps=["foo"],
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import os
|
|||||||
def test_unprotect(tmp_dir, dvc):
|
def test_unprotect(tmp_dir, dvc):
|
||||||
tmp_dir.gen("foo", "foo")
|
tmp_dir.gen("foo", "foo")
|
||||||
|
|
||||||
dvc.odb.local.cache_types = ["hardlink"]
|
dvc.cache.local.cache_types = ["hardlink"]
|
||||||
dvc.add("foo")
|
dvc.add("foo")
|
||||||
cache = os.path.join(".dvc", "cache", "ac", "bd18db4cc2f85cedef654fccc4a4d8")
|
cache = os.path.join(".dvc", "cache", "ac", "bd18db4cc2f85cedef654fccc4a4d8")
|
||||||
assert not os.access("foo", os.W_OK)
|
assert not os.access("foo", os.W_OK)
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ def test_status_download_optimization(mocker, dvc):
|
|||||||
|
|
||||||
@pytest.mark.parametrize("link_name", ["hardlink", "symlink"])
|
@pytest.mark.parametrize("link_name", ["hardlink", "symlink"])
|
||||||
def test_is_protected(tmp_dir, dvc, link_name):
|
def test_is_protected(tmp_dir, dvc, link_name):
|
||||||
odb = dvc.odb.local
|
odb = dvc.cache.local
|
||||||
fs = odb.fs
|
fs = odb.fs
|
||||||
link_method = getattr(fs, link_name)
|
link_method = getattr(fs, link_name)
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ def test_protect_ignore_errors(tmp_dir, dvc, mocker, err):
|
|||||||
tmp_dir.gen("foo", "foo")
|
tmp_dir.gen("foo", "foo")
|
||||||
|
|
||||||
mock_chmod = mocker.patch("os.chmod", side_effect=OSError(err, "something"))
|
mock_chmod = mocker.patch("os.chmod", side_effect=OSError(err, "something"))
|
||||||
dvc.odb.local.protect("foo")
|
dvc.cache.local.protect("foo")
|
||||||
assert mock_chmod.called
|
assert mock_chmod.called
|
||||||
|
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ def test_set_exec_ignore_errors(tmp_dir, dvc, mocker, err):
|
|||||||
tmp_dir.gen("foo", "foo")
|
tmp_dir.gen("foo", "foo")
|
||||||
|
|
||||||
mock_chmod = mocker.patch("os.chmod", side_effect=OSError(err, "something"))
|
mock_chmod = mocker.patch("os.chmod", side_effect=OSError(err, "something"))
|
||||||
dvc.odb.local.set_exec("foo")
|
dvc.cache.local.set_exec("foo")
|
||||||
assert mock_chmod.called
|
assert mock_chmod.called
|
||||||
|
|
||||||
|
|
||||||
@@ -88,7 +88,7 @@ def test_staging_file(tmp_dir, dvc):
|
|||||||
tmp_dir.gen("foo", "foo")
|
tmp_dir.gen("foo", "foo")
|
||||||
fs = LocalFileSystem()
|
fs = LocalFileSystem()
|
||||||
|
|
||||||
local_odb = dvc.odb.local
|
local_odb = dvc.cache.local
|
||||||
staging_odb, _, obj = build(local_odb, (tmp_dir / "foo").fs_path, fs, "md5")
|
staging_odb, _, obj = build(local_odb, (tmp_dir / "foo").fs_path, fs, "md5")
|
||||||
|
|
||||||
assert not local_odb.exists(obj.hash_info.value)
|
assert not local_odb.exists(obj.hash_info.value)
|
||||||
@@ -113,7 +113,7 @@ def test_staging_dir(tmp_dir, dvc):
|
|||||||
|
|
||||||
tmp_dir.gen({"dir": {"foo": "foo", "bar": "bar"}})
|
tmp_dir.gen({"dir": {"foo": "foo", "bar": "bar"}})
|
||||||
fs = LocalFileSystem()
|
fs = LocalFileSystem()
|
||||||
local_odb = dvc.odb.local
|
local_odb = dvc.cache.local
|
||||||
|
|
||||||
staging_odb, _, obj = build(local_odb, (tmp_dir / "dir").fs_path, fs, "md5")
|
staging_odb, _, obj = build(local_odb, (tmp_dir / "dir").fs_path, fs, "md5")
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ def test_open_dirty_hash(tmp_dir, dvc):
|
|||||||
def test_open_no_remote(tmp_dir, dvc):
|
def test_open_no_remote(tmp_dir, dvc):
|
||||||
tmp_dir.dvc_gen("file", "file")
|
tmp_dir.dvc_gen("file", "file")
|
||||||
(tmp_dir / "file").unlink()
|
(tmp_dir / "file").unlink()
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
|
|
||||||
fs = DataFileSystem(index=dvc.index.data["repo"])
|
fs = DataFileSystem(index=dvc.index.data["repo"])
|
||||||
with pytest.raises(FileNotFoundError):
|
with pytest.raises(FileNotFoundError):
|
||||||
@@ -238,11 +238,11 @@ def test_get_hash_granular(tmp_dir, dvc):
|
|||||||
fs = DataFileSystem(index=dvc.index.data["repo"])
|
fs = DataFileSystem(index=dvc.index.data["repo"])
|
||||||
subdir = "dir/subdir"
|
subdir = "dir/subdir"
|
||||||
assert fs.info(subdir).get("md5") is None
|
assert fs.info(subdir).get("md5") is None
|
||||||
_, _, obj = build(dvc.odb.local, subdir, fs, "md5", dry_run=True)
|
_, _, obj = build(dvc.cache.local, subdir, fs, "md5", dry_run=True)
|
||||||
assert obj.hash_info == HashInfo("md5", "af314506f1622d107e0ed3f14ec1a3b5.dir")
|
assert obj.hash_info == HashInfo("md5", "af314506f1622d107e0ed3f14ec1a3b5.dir")
|
||||||
data = posixpath.join(subdir, "data")
|
data = posixpath.join(subdir, "data")
|
||||||
assert fs.info(data)["md5"] == "8d777f385d3dfec8815d20f7496026dc"
|
assert fs.info(data)["md5"] == "8d777f385d3dfec8815d20f7496026dc"
|
||||||
_, _, obj = build(dvc.odb.local, data, fs, "md5", dry_run=True)
|
_, _, obj = build(dvc.cache.local, data, fs, "md5", dry_run=True)
|
||||||
assert obj.hash_info == HashInfo("md5", "8d777f385d3dfec8815d20f7496026dc")
|
assert obj.hash_info == HashInfo("md5", "8d777f385d3dfec8815d20f7496026dc")
|
||||||
|
|
||||||
|
|
||||||
@@ -253,7 +253,7 @@ def test_get_hash_dirty_file(tmp_dir, dvc):
|
|||||||
fs = DataFileSystem(index=dvc.index.data["repo"])
|
fs = DataFileSystem(index=dvc.index.data["repo"])
|
||||||
expected = "8c7dd922ad47494fc02c388e12c00eac"
|
expected = "8c7dd922ad47494fc02c388e12c00eac"
|
||||||
assert fs.info("file").get("md5") == expected
|
assert fs.info("file").get("md5") == expected
|
||||||
_, _, obj = build(dvc.odb.local, "file", fs, "md5", dry_run=True)
|
_, _, obj = build(dvc.cache.local, "file", fs, "md5", dry_run=True)
|
||||||
assert obj.hash_info == HashInfo("md5", expected)
|
assert obj.hash_info == HashInfo("md5", expected)
|
||||||
|
|
||||||
|
|
||||||
@@ -264,5 +264,5 @@ def test_get_hash_dirty_dir(tmp_dir, dvc):
|
|||||||
fs = DataFileSystem(index=dvc.index.data["repo"])
|
fs = DataFileSystem(index=dvc.index.data["repo"])
|
||||||
expected = "5ea40360f5b4ec688df672a4db9c17d1.dir"
|
expected = "5ea40360f5b4ec688df672a4db9c17d1.dir"
|
||||||
assert fs.info("dir").get("md5") == expected
|
assert fs.info("dir").get("md5") == expected
|
||||||
_, _, obj = build(dvc.odb.local, "dir", fs, "md5", dry_run=True)
|
_, _, obj = build(dvc.cache.local, "dir", fs, "md5", dry_run=True)
|
||||||
assert obj.hash_info == HashInfo("md5", expected)
|
assert obj.hash_info == HashInfo("md5", expected)
|
||||||
|
|||||||
@@ -493,7 +493,7 @@ def test_get_hash_cached_file(tmp_dir, dvc, mocker):
|
|||||||
fs = DVCFileSystem(repo=dvc)
|
fs = DVCFileSystem(repo=dvc)
|
||||||
expected = "acbd18db4cc2f85cedef654fccc4a4d8"
|
expected = "acbd18db4cc2f85cedef654fccc4a4d8"
|
||||||
assert fs.info("foo").get("md5") is None
|
assert fs.info("foo").get("md5") is None
|
||||||
_, _, obj = build(dvc.odb.local, "foo", fs, "md5")
|
_, _, obj = build(dvc.cache.local, "foo", fs, "md5")
|
||||||
assert obj.hash_info == HashInfo("md5", expected)
|
assert obj.hash_info == HashInfo("md5", expected)
|
||||||
(tmp_dir / "foo").unlink()
|
(tmp_dir / "foo").unlink()
|
||||||
assert fs.info("foo")["md5"] == expected
|
assert fs.info("foo")["md5"] == expected
|
||||||
@@ -504,12 +504,12 @@ def test_get_hash_cached_dir(tmp_dir, dvc, mocker):
|
|||||||
fs = DVCFileSystem(repo=dvc)
|
fs = DVCFileSystem(repo=dvc)
|
||||||
expected = "8761c4e9acad696bee718615e23e22db.dir"
|
expected = "8761c4e9acad696bee718615e23e22db.dir"
|
||||||
assert fs.info("dir").get("md5") is None
|
assert fs.info("dir").get("md5") is None
|
||||||
_, _, obj = build(dvc.odb.local, "dir", fs, "md5")
|
_, _, obj = build(dvc.cache.local, "dir", fs, "md5")
|
||||||
assert obj.hash_info == HashInfo("md5", "8761c4e9acad696bee718615e23e22db.dir")
|
assert obj.hash_info == HashInfo("md5", "8761c4e9acad696bee718615e23e22db.dir")
|
||||||
|
|
||||||
shutil.rmtree(tmp_dir / "dir")
|
shutil.rmtree(tmp_dir / "dir")
|
||||||
assert fs.info("dir")["md5"] == expected
|
assert fs.info("dir")["md5"] == expected
|
||||||
_, _, obj = build(dvc.odb.local, "dir", fs, "md5")
|
_, _, obj = build(dvc.cache.local, "dir", fs, "md5")
|
||||||
assert obj.hash_info == HashInfo("md5", "8761c4e9acad696bee718615e23e22db.dir")
|
assert obj.hash_info == HashInfo("md5", "8761c4e9acad696bee718615e23e22db.dir")
|
||||||
|
|
||||||
|
|
||||||
@@ -518,10 +518,10 @@ def test_get_hash_cached_granular(tmp_dir, dvc, mocker):
|
|||||||
fs = DVCFileSystem(repo=dvc)
|
fs = DVCFileSystem(repo=dvc)
|
||||||
subdir = "dir/subdir"
|
subdir = "dir/subdir"
|
||||||
assert fs.info(subdir).get("md5") is None
|
assert fs.info(subdir).get("md5") is None
|
||||||
_, _, obj = build(dvc.odb.local, subdir, fs, "md5")
|
_, _, obj = build(dvc.cache.local, subdir, fs, "md5")
|
||||||
assert obj.hash_info == HashInfo("md5", "af314506f1622d107e0ed3f14ec1a3b5.dir")
|
assert obj.hash_info == HashInfo("md5", "af314506f1622d107e0ed3f14ec1a3b5.dir")
|
||||||
assert fs.info(posixpath.join(subdir, "data")).get("md5") is None
|
assert fs.info(posixpath.join(subdir, "data")).get("md5") is None
|
||||||
_, _, obj = build(dvc.odb.local, posixpath.join(subdir, "data"), fs, "md5")
|
_, _, obj = build(dvc.cache.local, posixpath.join(subdir, "data"), fs, "md5")
|
||||||
assert obj.hash_info == HashInfo("md5", "8d777f385d3dfec8815d20f7496026dc")
|
assert obj.hash_info == HashInfo("md5", "8d777f385d3dfec8815d20f7496026dc")
|
||||||
(tmp_dir / "dir" / "subdir" / "data").unlink()
|
(tmp_dir / "dir" / "subdir" / "data").unlink()
|
||||||
assert (
|
assert (
|
||||||
@@ -543,7 +543,7 @@ def test_get_hash_mixed_dir(tmp_dir, scm, dvc):
|
|||||||
tmp_dir.scm.commit("add dir")
|
tmp_dir.scm.commit("add dir")
|
||||||
|
|
||||||
fs = DVCFileSystem(repo=dvc)
|
fs = DVCFileSystem(repo=dvc)
|
||||||
_, _, obj = build(dvc.odb.local, "dir", fs, "md5")
|
_, _, obj = build(dvc.cache.local, "dir", fs, "md5")
|
||||||
assert obj.hash_info == HashInfo("md5", "e1d9e8eae5374860ae025ec84cfd85c7.dir")
|
assert obj.hash_info == HashInfo("md5", "e1d9e8eae5374860ae025ec84cfd85c7.dir")
|
||||||
|
|
||||||
|
|
||||||
@@ -561,7 +561,7 @@ def test_get_hash_dirty_file(tmp_dir, dvc):
|
|||||||
# hash_file(file) should return workspace hash, not DVC cached hash
|
# hash_file(file) should return workspace hash, not DVC cached hash
|
||||||
fs = DVCFileSystem(repo=dvc)
|
fs = DVCFileSystem(repo=dvc)
|
||||||
assert fs.info("file").get("md5") is None
|
assert fs.info("file").get("md5") is None
|
||||||
staging, _, obj = build(dvc.odb.local, "file", fs, "md5")
|
staging, _, obj = build(dvc.cache.local, "file", fs, "md5")
|
||||||
assert obj.hash_info == something_hash_info
|
assert obj.hash_info == something_hash_info
|
||||||
check(staging, obj)
|
check(staging, obj)
|
||||||
|
|
||||||
@@ -573,7 +573,7 @@ def test_get_hash_dirty_file(tmp_dir, dvc):
|
|||||||
|
|
||||||
# tmp_dir/file can be built even though it is missing in workspace since
|
# tmp_dir/file can be built even though it is missing in workspace since
|
||||||
# repofs will use the DVC cached hash (and refer to the local cache object)
|
# repofs will use the DVC cached hash (and refer to the local cache object)
|
||||||
_, _, obj = build(dvc.odb.local, "file", fs, "md5")
|
_, _, obj = build(dvc.cache.local, "file", fs, "md5")
|
||||||
assert obj.hash_info == file_hash_info
|
assert obj.hash_info == file_hash_info
|
||||||
|
|
||||||
|
|
||||||
@@ -582,7 +582,7 @@ def test_get_hash_dirty_dir(tmp_dir, dvc):
|
|||||||
(tmp_dir / "dir" / "baz").write_text("baz")
|
(tmp_dir / "dir" / "baz").write_text("baz")
|
||||||
|
|
||||||
fs = DVCFileSystem(repo=dvc)
|
fs = DVCFileSystem(repo=dvc)
|
||||||
_, meta, obj = build(dvc.odb.local, "dir", fs, "md5")
|
_, meta, obj = build(dvc.cache.local, "dir", fs, "md5")
|
||||||
assert obj.hash_info == HashInfo("md5", "ba75a2162ca9c29acecb7957105a0bc2.dir")
|
assert obj.hash_info == HashInfo("md5", "ba75a2162ca9c29acecb7957105a0bc2.dir")
|
||||||
assert meta.nfiles == 3
|
assert meta.nfiles == 3
|
||||||
|
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ def test_remote_missing_dependency_on_dir_pull(tmp_dir, scm, dvc, mocker):
|
|||||||
conf["core"] = {"remote": "s3"}
|
conf["core"] = {"remote": "s3"}
|
||||||
|
|
||||||
remove("dir")
|
remove("dir")
|
||||||
remove(dvc.odb.local.path)
|
remove(dvc.cache.local.path)
|
||||||
|
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"dvc.data_cloud.DataCloud.get_remote_odb",
|
"dvc.data_cloud.DataCloud.get_remote_odb",
|
||||||
|
|||||||
@@ -146,16 +146,16 @@ def test_stage_cache_wdir(tmp_dir, dvc, mocker):
|
|||||||
def test_shared_stage_cache(tmp_dir, dvc, run_copy):
|
def test_shared_stage_cache(tmp_dir, dvc, run_copy):
|
||||||
import stat
|
import stat
|
||||||
|
|
||||||
from dvc.odbmgr import ODBManager
|
from dvc.cachemgr import CacheManager
|
||||||
|
|
||||||
tmp_dir.gen("foo", "foo")
|
tmp_dir.gen("foo", "foo")
|
||||||
|
|
||||||
with dvc.config.edit() as config:
|
with dvc.config.edit() as config:
|
||||||
config["cache"]["shared"] = "group"
|
config["cache"]["shared"] = "group"
|
||||||
|
|
||||||
dvc.odb = ODBManager(dvc)
|
dvc.cache = CacheManager(dvc)
|
||||||
|
|
||||||
assert not os.path.exists(dvc.odb.local.path)
|
assert not os.path.exists(dvc.cache.local.path)
|
||||||
|
|
||||||
run_copy("foo", "bar", name="copy-foo-bar")
|
run_copy("foo", "bar", name="copy-foo-bar")
|
||||||
|
|
||||||
@@ -184,7 +184,7 @@ def test_shared_stage_cache(tmp_dir, dvc, run_copy):
|
|||||||
dir_mode = 0o2775
|
dir_mode = 0o2775
|
||||||
file_mode = 0o664
|
file_mode = 0o664
|
||||||
|
|
||||||
assert _mode(dvc.odb.local.path) == dir_mode
|
assert _mode(dvc.cache.local.path) == dir_mode
|
||||||
assert _mode(dvc.stage_cache.cache_dir) == dir_mode
|
assert _mode(dvc.stage_cache.cache_dir) == dir_mode
|
||||||
assert _mode(parent_cache_dir) == dir_mode
|
assert _mode(parent_cache_dir) == dir_mode
|
||||||
assert _mode(cache_dir) == dir_mode
|
assert _mode(cache_dir) == dir_mode
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ def test_subrepo_is_constructed_properly(
|
|||||||
|
|
||||||
subrepo = tmp_dir / "subrepo"
|
subrepo = tmp_dir / "subrepo"
|
||||||
make_subrepo(subrepo, scm)
|
make_subrepo(subrepo, scm)
|
||||||
local_cache = subrepo.dvc.odb.local.path
|
local_cache = subrepo.dvc.cache.local.path
|
||||||
|
|
||||||
tmp_dir.scm_gen("bar", "bar", commit="add bar")
|
tmp_dir.scm_gen("bar", "bar", commit="add bar")
|
||||||
subrepo.dvc_gen("foo", "foo", commit="add foo")
|
subrepo.dvc_gen("foo", "foo", commit="add foo")
|
||||||
@@ -72,16 +72,16 @@ def test_subrepo_is_constructed_properly(
|
|||||||
|
|
||||||
assert repo.url == str(tmp_dir)
|
assert repo.url == str(tmp_dir)
|
||||||
assert repo.config["cache"]["dir"] == str(cache_dir)
|
assert repo.config["cache"]["dir"] == str(cache_dir)
|
||||||
assert repo.odb.local.path == str(cache_dir)
|
assert repo.cache.local.path == str(cache_dir)
|
||||||
assert subrepo.odb.local.path == str(cache_dir)
|
assert subrepo.cache.local.path == str(cache_dir)
|
||||||
|
|
||||||
assert repo.config["cache"]["type"] == ["symlink"]
|
assert repo.config["cache"]["type"] == ["symlink"]
|
||||||
assert repo.odb.local.cache_types == ["symlink"]
|
assert repo.cache.local.cache_types == ["symlink"]
|
||||||
assert subrepo.odb.local.cache_types == ["symlink"]
|
assert subrepo.cache.local.cache_types == ["symlink"]
|
||||||
|
|
||||||
assert subrepo.config["remote"]["auto-generated-upstream"]["url"] == local_cache
|
assert subrepo.config["remote"]["auto-generated-upstream"]["url"] == local_cache
|
||||||
if root_is_dvc:
|
if root_is_dvc:
|
||||||
main_cache = tmp_dir.dvc.odb.local.path
|
main_cache = tmp_dir.dvc.cache.local.path
|
||||||
assert repo.config["remote"]["auto-generated-upstream"]["url"] == str(
|
assert repo.config["remote"]["auto-generated-upstream"]["url"] == str(
|
||||||
main_cache
|
main_cache
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ def find_supported_remotes(string):
|
|||||||
def test_info_in_repo(scm_init, tmp_dir):
|
def test_info_in_repo(scm_init, tmp_dir):
|
||||||
tmp_dir.init(scm=scm_init, dvc=True)
|
tmp_dir.init(scm=scm_init, dvc=True)
|
||||||
# Create `.dvc/cache`, that is needed to check supported link types.
|
# Create `.dvc/cache`, that is needed to check supported link types.
|
||||||
os.mkdir(tmp_dir.dvc.odb.local.path)
|
os.mkdir(tmp_dir.dvc.cache.local.path)
|
||||||
|
|
||||||
dvc_info = get_dvc_info()
|
dvc_info = get_dvc_info()
|
||||||
|
|
||||||
@@ -113,7 +113,7 @@ def test_remotes(tmp_dir, dvc, caplog):
|
|||||||
|
|
||||||
|
|
||||||
def test_fs_info_in_repo(tmp_dir, dvc, caplog):
|
def test_fs_info_in_repo(tmp_dir, dvc, caplog):
|
||||||
os.mkdir(dvc.odb.local.path)
|
os.mkdir(dvc.cache.local.path)
|
||||||
dvc_info = get_dvc_info()
|
dvc_info = get_dvc_info()
|
||||||
|
|
||||||
assert re.search(r"Cache directory: .* on .*", dvc_info)
|
assert re.search(r"Cache directory: .* on .*", dvc_info)
|
||||||
|
|||||||
Reference in New Issue
Block a user