From 8906db1d1949f578929226c642ec7d5487353076 Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Fri, 24 Jul 2020 02:13:54 +0300 Subject: [PATCH] ignore: use `use_dvcignore` flag --- dvc/ignore.py | 6 ++++-- dvc/tree/git.py | 17 +++++++---------- dvc/tree/local.py | 17 +++++++---------- 3 files changed, 18 insertions(+), 22 deletions(-) diff --git a/dvc/ignore.py b/dvc/ignore.py index 05463403cf..831486209f 100644 --- a/dvc/ignore.py +++ b/dvc/ignore.py @@ -131,14 +131,16 @@ def __init__(self, tree, root_dir): self.ignores_trie_tree[root_dir] = DvcIgnorePatterns( default_ignore_patterns, root_dir ) - for root, dirs, _ in self.tree.walk(self.root_dir): + for root, dirs, _ in self.tree.walk( + self.root_dir, use_dvcignore=False + ): self._update(root) self._update_sub_repo(root, dirs) dirs[:], _ = self(root, dirs, []) def _update(self, dirname): ignore_file_path = os.path.join(dirname, DvcIgnore.DVCIGNORE_FILE) - if self.tree.exists(ignore_file_path): + if self.tree.exists(ignore_file_path, use_dvcignore=False): new_pattern = DvcIgnorePatterns.from_files( ignore_file_path, self.tree ) diff --git a/dvc/tree/git.py b/dvc/tree/git.py index ff5be8209f..edf49964a7 100644 --- a/dvc/tree/git.py +++ b/dvc/tree/git.py @@ -46,12 +46,8 @@ def dvcignore(self): from dvc.ignore import DvcIgnoreFilter, DvcIgnoreFilterNoop root = self.dvcignore_root or self.tree_root - if not self.use_dvcignore: - return DvcIgnoreFilterNoop(self, root) - self.use_dvcignore = False - ret = DvcIgnoreFilter(self, root) - self.use_dvcignore = True - return ret + cls = DvcIgnoreFilter if self.use_dvcignore else DvcIgnoreFilterNoop + return cls(self, root) def open( self, path, mode="r", encoding="utf-8" @@ -160,7 +156,7 @@ def _walk(self, tree, topdown=True): if not topdown: yield os.path.normpath(tree.abspath), dirs, nondirs - def walk(self, top, topdown=True, onerror=None): + def walk(self, top, topdown=True, onerror=None, use_dvcignore=True): """Directory tree generator. See `os.walk` for the docs. Differences: @@ -178,9 +174,10 @@ def walk(self, top, topdown=True, onerror=None): return for root, dirs, files in self._walk(tree, topdown=topdown): - dirs[:], files[:] = self.dvcignore( - os.path.abspath(root), dirs, files - ) + if use_dvcignore: + dirs[:], files[:] = self.dvcignore( + os.path.abspath(root), dirs, files + ) yield root, dirs, files def isexec(self, path): diff --git a/dvc/tree/local.py b/dvc/tree/local.py index 24361f4c8d..bfce3345f8 100644 --- a/dvc/tree/local.py +++ b/dvc/tree/local.py @@ -58,12 +58,8 @@ def dvcignore(self): from dvc.ignore import DvcIgnoreFilter, DvcIgnoreFilterNoop root = self.dvcignore_root or self.tree_root - if not self.use_dvcignore: - return DvcIgnoreFilterNoop(self, root) - self.use_dvcignore = False - ret = DvcIgnoreFilter(self, root) - self.use_dvcignore = True - return ret + cls = DvcIgnoreFilter if self.use_dvcignore else DvcIgnoreFilterNoop + return cls(self, root) @staticmethod def open(path_info, mode="r", encoding=None): @@ -101,7 +97,7 @@ def iscopy(self, path_info): System.is_symlink(path_info) or System.is_hardlink(path_info) ) - def walk(self, top, topdown=True, onerror=None): + def walk(self, top, topdown=True, onerror=None, use_dvcignore=True): """Directory tree generator. See `os.walk` for the docs. Differences: @@ -110,9 +106,10 @@ def walk(self, top, topdown=True, onerror=None): for root, dirs, files in os.walk( top, topdown=topdown, onerror=onerror ): - dirs[:], files[:] = self.dvcignore( - os.path.abspath(root), dirs, files - ) + if use_dvcignore: + dirs[:], files[:] = self.dvcignore( + os.path.abspath(root), dirs, files + ) yield os.path.normpath(root), dirs, files