diff --git a/dvc/dependency/repo.py b/dvc/dependency/repo.py index 8566c080b..3ae2a77df 100644 --- a/dvc/dependency/repo.py +++ b/dvc/dependency/repo.py @@ -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): diff --git a/tests/func/test_update.py b/tests/func/test_update.py index b1898c458..12d0c9d61 100644 --- a/tests/func/test_update.py +++ b/tests/func/test_update.py @@ -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):