mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
list: support tracked file path as a target (#4204)
* list: support tracked file path as a target Fixes #4202 * erepo: add __str__ to improve error readablity Related to #4202
This commit is contained in:
@@ -72,6 +72,9 @@ class BaseExternalRepo:
|
||||
|
||||
_local_cache = None
|
||||
|
||||
def __str__(self):
|
||||
return self.url
|
||||
|
||||
@property
|
||||
def local_cache(self):
|
||||
if hasattr(self, "cache"):
|
||||
|
||||
+2
-1
@@ -44,6 +44,7 @@ class DvcTree(BaseTree): # pylint:disable=abstract-method
|
||||
return outs
|
||||
|
||||
def _get_granular_checksum(self, path, out, remote=None):
|
||||
assert isinstance(path, PathInfo)
|
||||
if not self.fetch and not self.stream:
|
||||
raise FileNotFoundError
|
||||
dir_cache = out.get_dir_cache(remote=remote)
|
||||
@@ -128,7 +129,7 @@ class DvcTree(BaseTree): # pylint:disable=abstract-method
|
||||
# for dir checksum, we need to check if this is a file inside the
|
||||
# directory
|
||||
try:
|
||||
self._get_granular_checksum(path, out)
|
||||
self._get_granular_checksum(path_info, out)
|
||||
return False
|
||||
except FileNotFoundError:
|
||||
return True
|
||||
|
||||
@@ -472,3 +472,33 @@ def test_ls_granular(erepo_dir):
|
||||
{"isout": False, "isdir": False, "isexec": False, "path": "2"},
|
||||
{"isout": False, "isdir": True, "isexec": False, "path": "subdir"},
|
||||
]
|
||||
|
||||
|
||||
@pytest.mark.parametrize("use_scm", [True, False])
|
||||
def test_ls_target(erepo_dir, use_scm):
|
||||
with erepo_dir.chdir():
|
||||
gen = erepo_dir.scm_gen if use_scm else erepo_dir.dvc_gen
|
||||
gen(
|
||||
{
|
||||
"dir": {
|
||||
"1": "1",
|
||||
"2": "2",
|
||||
"subdir": {"foo": "foo", "bar": "bar"},
|
||||
}
|
||||
},
|
||||
commit="create dir",
|
||||
)
|
||||
|
||||
def _ls(path):
|
||||
return Repo.ls(os.fspath(erepo_dir), path)
|
||||
|
||||
assert _ls(os.path.join("dir", "1")) == [
|
||||
{"isout": False, "isdir": False, "isexec": False, "path": "1"}
|
||||
]
|
||||
assert _ls(os.path.join("dir", "subdir", "foo")) == [
|
||||
{"isout": False, "isdir": False, "isexec": False, "path": "foo"}
|
||||
]
|
||||
assert _ls(os.path.join("dir", "subdir")) == [
|
||||
{"isdir": False, "isexec": 0, "isout": False, "path": "bar"},
|
||||
{"isdir": False, "isexec": 0, "isout": False, "path": "foo"},
|
||||
]
|
||||
|
||||
@@ -211,7 +211,7 @@ def test_repotree_cache_save(tmp_dir, dvc, scm, erepo_dir, local_cloud):
|
||||
# into dvc.cache, not fetched or streamed from a remote
|
||||
tree = RepoTree(erepo_dir.dvc, stream=True)
|
||||
expected = [
|
||||
tree.get_file_hash(erepo_dir / path)
|
||||
tree.get_file_hash(PathInfo(erepo_dir / path))
|
||||
for path in ("dir/bar", "dir/subdir/foo")
|
||||
]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user