def test_path_object_and_str_are_valid_types_get_mtime_and_size( path, repo_dir): dvcignore = DvcIgnoreFilter(repo_dir.root_dir) time, size = get_mtime_and_size(path, dvcignore) object_time, object_size = get_mtime_and_size(PathInfo(path), dvcignore) assert time == object_time assert size == object_size
def test_nobranch(self): tree = WorkingTree(self._root_dir) dvcignore = DvcIgnoreFilter(self._root_dir) self.assertWalkEqual( tree.walk(".", dvcignore=dvcignore), [ ( self._root_dir, ["data_dir"], ["bar", "тест", "code.py", "foo"], ), (join(self._root_dir, "data_dir"), ["data_sub_dir"], ["data"]), ( join(self._root_dir, "data_dir", "data_sub_dir"), [], ["data_sub"], ), ], ) self.assertWalkEqual( tree.walk(join("data_dir", "data_sub_dir"), dvcignore=dvcignore), [( join(self._root_dir, "data_dir", "data_sub_dir"), [], ["data_sub"], )], )
def dvc_walk( top, topdown=True, onerror=None, followlinks=False, ignore_file_handler=None, ): """ Proxy for `os.walk` directory tree generator. Utilizes DvcIgnoreFilter functionality. """ ignore_filter = None if topdown: from dvc.ignore import DvcIgnoreFilter ignore_filter = DvcIgnoreFilter( top, ignore_file_handler=ignore_file_handler) for root, dirs, files in os.walk(top, topdown=topdown, onerror=onerror, followlinks=followlinks): if ignore_filter: dirs[:], files[:] = ignore_filter(root, dirs, files) yield root, dirs, files
def _walk( self, tree, topdown=True, ignore_file_handler=None, dvc_ignore_filter=None, ): dirs, nondirs = [], [] for i in tree: if i.mode == GIT_MODE_DIR: dirs.append(i.name) else: nondirs.append(i.name) if topdown: if not dvc_ignore_filter: dvc_ignore_filter = DvcIgnoreFilter( tree.abspath, ignore_file_handler=ignore_file_handler) dirs, nondirs = dvc_ignore_filter(tree.path, dirs, nondirs) yield os.path.normpath(tree.abspath), dirs, nondirs for i in dirs: for x in self._walk( tree[i], topdown=True, ignore_file_handler=ignore_file_handler, dvc_ignore_filter=dvc_ignore_filter, ): yield x if not topdown: yield os.path.normpath(tree.abspath), dirs, nondirs
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
def test_subdir(self): dvcignore = DvcIgnoreFilter(self.root_dir) tree = WorkingTree(self._root_dir) self.assertWalkEqual( tree.walk(join("data_dir", "data_sub_dir"), dvcignore=dvcignore), [( join(self._root_dir, "data_dir", "data_sub_dir"), [], ["data_sub"], )], )
def test(self): dvcignore = DvcIgnoreFilter(self.root_dir) file_time, file_size = get_mtime_and_size(self.DATA, dvcignore) dir_time, dir_size = get_mtime_and_size(self.DATA_DIR, dvcignore) actual_file_size = os.path.getsize(self.DATA) actual_dir_size = os.path.getsize(self.DATA) + os.path.getsize( self.DATA_SUB) self.assertIs(type(file_time), str) self.assertIs(type(file_size), str) self.assertEqual(file_size, str(actual_file_size)) self.assertIs(type(dir_time), str) self.assertIs(type(dir_size), str) self.assertEqual(dir_size, str(actual_dir_size))
def test_ignore_collecting_dvcignores(repo_dir, dname): top_ignore_file = os.path.join( repo_dir.root_dir, os.path.dirname(dname), DvcIgnore.DVCIGNORE_FILE ) repo_dir.create(top_ignore_file, os.path.basename(dname)) ignore_file = os.path.join( repo_dir.root_dir, dname, DvcIgnore.DVCIGNORE_FILE ) repo_dir.create(ignore_file, repo_dir.FOO) assert DvcIgnoreFilter(repo_dir.root_dir).ignores == { DvcIgnoreDirs([".git", ".hg", ".dvc"]), DvcIgnorePatterns(top_ignore_file), }
def test(self): dvcignore = DvcIgnoreFilter(self.root_dir) tree = WorkingTree(self._root_dir) self.assertWalkEqual( tree.walk(self._root_dir, dvcignore=dvcignore), [ ( self._root_dir, ["data_dir"], ["code.py", "bar", "тест", "foo"], ), (join(self._root_dir, "data_dir"), ["data_sub_dir"], ["data"]), ( join(self._root_dir, "data_dir", "data_sub_dir"), [], ["data_sub"], ), ], )
def test_ignore_on_branch(git, dvc_repo, repo_dir): dvc_repo.add(repo_dir.DATA_DIR) dvc_repo.scm.commit("add data dir") branch_name = "branch_one" dvc_repo.scm.checkout(branch_name, create_new=True) repo_dir.create(DvcIgnore.DVCIGNORE_FILE, to_posixpath(repo_dir.DATA_SUB)) dvc_repo.scm.add([DvcIgnore.DVCIGNORE_FILE]) git.index.commit("add ignore") dvc_repo.scm.checkout("master") git_tree = dvc_repo.scm.get_tree(branch_name) branch_data_files = set( itertools.chain.from_iterable([ files for _, _, files in dvc_repo.tree.walk( repo_dir.DATA_DIR, dvcignore=DvcIgnoreFilter(repo_dir.root_dir, git_tree), ) ])) assert branch_data_files == {"data"}
def dvcignore(self): return DvcIgnoreFilter(self.root_dir)
def dvcignore(self) -> DvcIgnoreFilter: return DvcIgnoreFilter(self.fs, self.root_dir)