def test_status_download_optimization(mocker): """When comparing the status to pull a remote cache, And the desired files to fetch are already on the local cache, Don't check the existance of the desired files on the remote cache """ remote = RemoteLOCAL(None, {}) infos = [ { "name": "foo", "md5": "acbd18db4cc2f85cedef654fccc4a4d8" }, { "name": "bar", "md5": "37b51d194a7513e45b56f6524f2d51f2" }, ] local_exists = [ "acbd18db4cc2f85cedef654fccc4a4d8", "37b51d194a7513e45b56f6524f2d51f2", ] mocker.patch.object(remote, "cache_exists", return_value=local_exists) other_remote = mocker.Mock() other_remote.url = "other_remote" other_remote.cache_exists.return_value = [] remote.status(infos, other_remote, download=True) assert other_remote.cache_exists.call_count == 0
def test_is_protected(tmp_dir, link_name): remote = RemoteLOCAL(None, {}) link_method = getattr(remote, link_name) (tmp_dir / "foo").write_text("foo") foo = PathInfo(tmp_dir / "foo") link = PathInfo(tmp_dir / "link") link_method(foo, link) assert not remote.is_protected(foo) assert not remote.is_protected(link) remote.protect(foo) assert remote.is_protected(foo) assert remote.is_protected(link) remote.unprotect(link) assert not remote.is_protected(link) if link_name == "symlink" and os.name == "nt": # NOTE: Windows symlink perms don't propagate to the target assert remote.is_protected(foo) else: assert not remote.is_protected(foo)
def test_protect_ignore_erofs(tmp_dir, mocker): tmp_dir.gen("foo", "foo") foo = PathInfo("foo") remote = RemoteLOCAL(None, {}) mock_chmod = mocker.patch("os.chmod", side_effect=OSError(errno.EROFS, "read-only fs")) remote.protect(foo) assert mock_chmod.called
def test_protect_ignore_errors(tmp_dir, mocker, err): tmp_dir.gen("foo", "foo") foo = PathInfo("foo") remote = RemoteLOCAL(None, {}) remote.protect(foo) mock_chmod = mocker.patch("os.chmod", side_effect=OSError(err, "something")) remote.protect(foo) assert mock_chmod.called
def __init__(self, stage, path, info=None, remote=None): self.stage = stage self.project = stage.project if not os.path.isabs(path): path = self.unixpath(path) path = os.path.join(stage.cwd, path) self.path = os.path.normpath(path) self.info = info self.remote = remote if remote != None else RemoteLOCAL( stage.project, {}) self.path_info = {'scheme': 'local', 'path': self.path}
def __init__(self, stage, path, info=None): self.stage = stage self.project = stage.project if not os.path.isabs(path): path = self.unixpath(path) path = os.path.join(stage.cwd, path) self.path = os.path.normpath(path) self.info = info self.remote = RemoteLOCAL(stage.project, {Config.SECTION_REMOTE_URL: self.project.dvc_dir}) self.path_info = {'scheme': 'local', 'path': self.path}
def __init__(self, stage, path, info=None, remote=None): self.stage = stage self.project = stage.project self.info = info self.remote = remote if remote != None else RemoteLOCAL( stage.project, {}) if remote: path = os.path.join(remote.prefix, urlparse(path).path.lstrip('/')) if not os.path.isabs(path): path = self.ospath(path) path = os.path.join(stage.cwd, path) self.path = os.path.abspath(os.path.normpath(path)) self.path_info = {'scheme': 'local', 'path': self.path}
def __init__(self, stage, path, info=None, remote=None): super(DependencyLOCAL, self).__init__(stage, path, info) if remote is not None: self.remote = remote else: self.remote = RemoteLOCAL(stage.project, {}) if remote: p = os.path.join(remote.prefix, urlparse(self.url).path.lstrip('/')) else: p = path if not os.path.isabs(p): p = self.remote.to_ospath(p) p = os.path.join(stage.cwd, p) p = os.path.abspath(os.path.normpath(p)) self.path_info = {'scheme': 'local', 'path': p}
def test_status_download_optimization(mocker, dvc): """When comparing the status to pull a remote cache, And the desired files to fetch are already on the local cache, Don't check the existence of the desired files on the remote cache """ remote = RemoteLOCAL(dvc, {}) infos = NamedCache() infos.add("local", "acbd18db4cc2f85cedef654fccc4a4d8", "foo") infos.add("local", "37b51d194a7513e45b56f6524f2d51f2", "bar") local_exists = list(infos["local"]) mocker.patch.object(remote, "cache_exists", return_value=local_exists) other_remote = mocker.Mock() other_remote.url = "other_remote" other_remote.cache_exists.return_value = [] remote.status(infos, other_remote, download=True) assert other_remote.cache_exists.call_count == 0