mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
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:
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user