Skip to content

Commit

Permalink
fs: repo: handle directories with multiple artifacts (#6278)
Browse files Browse the repository at this point in the history
Related to #5677
  • Loading branch information
efiop committed Jul 11, 2021
1 parent 71bae7e commit 5204721
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 10 deletions.
16 changes: 8 additions & 8 deletions dvc/fs/repo.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,10 +167,10 @@ def exists(self, path_info) -> bool:
except FileNotFoundError:
return False

(out,) = meta.outs
assert len(meta.outs) == 1
if fs.exists(out.path_info):
return False
for out in meta.outs:
if fs.exists(out.path_info):
return False

return True

def isdir(self, path): # pylint: disable=arguments-differ
Expand All @@ -194,10 +194,10 @@ def isdir(self, path): # pylint: disable=arguments-differ
except FileNotFoundError:
return False

(out,) = meta.outs
assert len(meta.outs) == 1
if fs.exists(out.path_info):
return False
for out in meta.outs:
if fs.exists(out.path_info):
return False

return meta.isdir

def isdvc(self, path, **kwargs):
Expand Down
34 changes: 32 additions & 2 deletions tests/unit/fs/test_repo.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,22 @@ def test_open_in_history(tmp_dir, scm, dvc):


def test_isdir_isfile(tmp_dir, dvc):
tmp_dir.gen({"datafile": "data", "datadir": {"foo": "foo", "bar": "bar"}})
tmp_dir.gen(
{
"datafile": "data",
"datadir": {
"foo": "foo",
"bar": "bar",
},
"subdir": {
"baz": "baz",
"data": {
"abc": "abc",
"xyz": "xyz",
},
},
},
)

fs = RepoFileSystem(repo=dvc)
assert fs.isdir("datadir")
Expand All @@ -78,9 +93,18 @@ def test_isdir_isfile(tmp_dir, dvc):
assert fs.isfile("datafile")
assert not fs.isdvc("datafile")

dvc.add(["datadir", "datafile"])
dvc.add(
[
"datadir",
"datafile",
os.path.join("subdir", "baz"),
os.path.join("subdir", "data"),
]
)
shutil.rmtree(tmp_dir / "datadir")
shutil.rmtree(tmp_dir / "subdir" / "data")
(tmp_dir / "datafile").unlink()
(tmp_dir / "subdir" / "baz").unlink()

assert fs.isdir("datadir")
assert not fs.isfile("datadir")
Expand All @@ -89,6 +113,12 @@ def test_isdir_isfile(tmp_dir, dvc):
assert fs.isfile("datafile")
assert fs.isdvc("datafile")

assert fs.isdir("subdir")
assert not fs.isfile("subdir")
assert not fs.isdvc("subdir")
assert fs.isfile(os.path.join("subdir", "baz"))
assert fs.isdir(os.path.join("subdir", "data"))


def test_exists_isdir_isfile_dirty(tmp_dir, dvc):
tmp_dir.dvc_gen(
Expand Down

0 comments on commit 5204721

Please sign in to comment.