From 1e1a9cf774018d68565e6a78717165666b17cd84 Mon Sep 17 00:00:00 2001 From: pawel Date: Fri, 3 Jan 2020 10:03:47 +0100 Subject: [PATCH] tree: introduce is_working_tree --- dvc/remote/local.py | 11 +++-------- dvc/scm/tree.py | 6 ++++++ dvc/utils/fs.py | 6 ++---- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/dvc/remote/local.py b/dvc/remote/local.py index beb5e3a18..f7a1ff4c8 100644 --- a/dvc/remote/local.py +++ b/dvc/remote/local.py @@ -11,7 +11,6 @@ from dvc.config import Config from dvc.exceptions import DownloadError from dvc.exceptions import DvcException from dvc.exceptions import UploadError -from dvc.ignore import CleanTree from dvc.path_info import PathInfo from dvc.progress import Tqdm from dvc.remote.base import RemoteBASE @@ -20,7 +19,7 @@ from dvc.remote.base import STATUS_MAP from dvc.remote.base import STATUS_MISSING from dvc.remote.base import STATUS_NEW from dvc.scheme import Schemes -from dvc.scm.tree import WorkingTree +from dvc.scm.tree import is_working_tree from dvc.system import System from dvc.utils import copyfile from dvc.utils import file_md5 @@ -136,9 +135,7 @@ class RemoteLOCAL(RemoteBASE): return os.path.getsize(fspath_py35(path_info)) def walk_files(self, path_info): - assert isinstance(self.repo.tree, CleanTree) and isinstance( - self.repo.tree.tree, WorkingTree - ) + assert is_working_tree(self.repo.tree) for fname in self.repo.tree.walk_files(path_info): yield PathInfo(fname) @@ -429,9 +426,7 @@ class RemoteLOCAL(RemoteBASE): os.chmod(path, os.stat(path).st_mode | stat.S_IWRITE) def _unprotect_dir(self, path): - assert isinstance(self.repo.tree, CleanTree) and isinstance( - self.repo.tree.tree, WorkingTree - ) + assert is_working_tree(self.repo.tree) for fname in self.repo.tree.walk_files(path): RemoteLOCAL._unprotect_file(fname) diff --git a/dvc/scm/tree.py b/dvc/scm/tree.py index 3187e300a..1409b626c 100644 --- a/dvc/scm/tree.py +++ b/dvc/scm/tree.py @@ -74,3 +74,9 @@ class WorkingTree(BaseTree): top, topdown=topdown, onerror=onerror ): yield os.path.normpath(root), dirs, files + + +def is_working_tree(tree): + return isinstance(tree, WorkingTree) or isinstance( + getattr(tree, "tree", None), WorkingTree + ) diff --git a/dvc/utils/fs.py b/dvc/utils/fs.py index 7cea7e314..6829c3c78 100644 --- a/dvc/utils/fs.py +++ b/dvc/utils/fs.py @@ -8,6 +8,7 @@ import nanotime from shortuuid import uuid from dvc.exceptions import DvcException +from dvc.scm.tree import is_working_tree from dvc.system import System from dvc.utils import dict_md5 from dvc.utils import fspath @@ -32,10 +33,7 @@ def get_inode(path): def get_mtime_and_size(path, tree): - from dvc.ignore import CleanTree - from dvc.scm.tree import WorkingTree - - assert isinstance(tree, CleanTree) and isinstance(tree.tree, WorkingTree) + assert is_working_tree(tree) if os.path.isdir(fspath_py35(path)): size = 0