From fed9c10cc164dfc674158b4c4d5cd6fe3a7e1b4d Mon Sep 17 00:00:00 2001 From: Peter Rowlands Date: Tue, 30 Jun 2020 14:19:43 +0900 Subject: [PATCH] RepoTree: preserve relative paths in copytree() --- dvc/repo/tree.py | 5 +++-- tests/func/test_get.py | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/dvc/repo/tree.py b/dvc/repo/tree.py index a23f96bbc3..df6af99756 100644 --- a/dvc/repo/tree.py +++ b/dvc/repo/tree.py @@ -428,11 +428,12 @@ def copytree(self, top, dest): for root, _, files in self.walk(top): root = PathInfo(root) - makedirs(dest, exist_ok=True) + dest_dir = dest / root.relative_to(top) + makedirs(dest_dir, exist_ok=True) for fname in files: src = root / fname with self.open(src, mode="rb") as fobj: - copy_fobj_to_file(fobj, dest / fname) + copy_fobj_to_file(fobj, dest_dir / fname) @property def hash_jobs(self): diff --git a/tests/func/test_get.py b/tests/func/test_get.py index b87d9bdc8f..ccb8160bfc 100644 --- a/tests/func/test_get.py +++ b/tests/func/test_get.py @@ -55,7 +55,9 @@ def test_get_git_dir(tmp_dir, erepo): src = "some_directory" dst = "some_directory_imported" - erepo.scm_gen({src: {"file.txt": "hello"}}, commit="add a regular dir") + erepo.scm_gen( + {src: {"dir": {"file.txt": "hello"}}}, commit="add a regular dir" + ) Repo.get(os.fspath(erepo), src, dst)