status: pass tree as a kwarg (#4156)

* [RFC] tests: make read_text() work with directories

This PR is just a showcase to see how we like it. I've converted a few
tests to it, but there will be much more to come.

```
assert (tmp_dir / "file") == "contents"
assert (tmp_dir / "dir").read_text() == {"subdir": {"file": "hello"}}
```

This approach is nicer because it allows us to use a declaratory
asserts instead of relying on fs files. The problem becomes much more
apparent once you get into remote workspaces, where we `trees_equal`
doesn't work.

* status: pass tree as a kwarg

Fixes #4150

Depends on https://github.com/iterative/dvc/pull/4155
This commit is contained in:
Ruslan Kuprieiev
2020-07-03 16:17:01 +03:00
committed by GitHub
parent ec88fa8dec
commit 8dd264c025
2 changed files with 48 additions and 5 deletions
+1 -1
View File
@@ -64,7 +64,7 @@ class RepoDependency(LocalDependency):
# We are polluting our repo cache with some dir listing here
if tree.isdir(path):
return self.repo.cache.local.get_hash(path, tree)
return self.repo.cache.local.get_hash(path, tree=tree)
return tree.get_file_hash(path)
def status(self):
+47 -4
View File
@@ -10,26 +10,69 @@ def test_update_import(tmp_dir, dvc, erepo_dir, cached):
gen = erepo_dir.dvc_gen if cached else erepo_dir.scm_gen
with erepo_dir.branch("branch", new=True), erepo_dir.chdir():
gen("version", "branch", "add version file")
gen(
{
"version": "branch",
"dir": {"version": "branch", "subdir": {"file": "file"}},
},
commit="add version file",
)
old_rev = erepo_dir.scm.get_rev()
stage = dvc.imp(os.fspath(erepo_dir), "version", "version", rev="branch")
dir_stage = dvc.imp(os.fspath(erepo_dir), "dir", "dir", rev="branch")
assert dvc.status() == {}
assert (tmp_dir / "version").read_text() == "branch"
assert (tmp_dir / "dir").read_text() == {
"version": "branch",
"subdir": {"file": "file"},
}
assert stage.deps[0].def_repo["rev_lock"] == old_rev
assert dir_stage.deps[0].def_repo["rev_lock"] == old_rev
# Update version file
with erepo_dir.branch("branch", new=False), erepo_dir.chdir():
gen("version", "updated", "update version content")
gen(
{
"version": "updated",
"dir": {"version": "updated", "subdir": {"file": "file"}},
},
commit="update version content",
)
new_rev = erepo_dir.scm.get_rev()
assert old_rev != new_rev
dvc.update([stage.path])
assert dvc.status() == {
"dir.dvc": [
{
"changed deps": {
f"dir ({os.fspath(erepo_dir)})": "update available"
}
}
],
"version.dvc": [
{
"changed deps": {
f"version ({os.fspath(erepo_dir)})": "update available"
}
}
],
}
(stage,) = dvc.update(stage.path)
(dir_stage,) = dvc.update(dir_stage.path)
assert dvc.status() == {}
assert (tmp_dir / "version").read_text() == "updated"
assert (tmp_dir / "dir").read_text() == {
"version": "updated",
"subdir": {"file": "file"},
}
stage = Dvcfile(dvc, stage.path).stage
assert stage.deps[0].def_repo["rev_lock"] == new_rev
assert dir_stage.deps[0].def_repo["rev_lock"] == new_rev
def test_update_import_after_remote_updates_to_dvc(tmp_dir, dvc, erepo_dir):