mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-06 15:28:28 +01:00
no need for dvcignore in walk args
This commit is contained in:
+7
-3
@@ -72,11 +72,15 @@ class DvcIgnoreDirs(DvcIgnore):
|
||||
|
||||
|
||||
class DvcIgnoreFilter(object):
|
||||
def __init__(self, root_dir, tree):
|
||||
def __init__(self, tree):
|
||||
self.tree = tree
|
||||
self.ignores = {DvcIgnoreDirs([".git", ".hg", ".dvc"])}
|
||||
self._update(root_dir)
|
||||
for root, dirs, _ in self.tree.walk(root_dir, dvcignore=self):
|
||||
|
||||
def reload(self):
|
||||
self._update(self.tree.tree_root)
|
||||
for root, dirs, _ in self.tree.walk(
|
||||
self.tree.tree_root, dvcignore=self
|
||||
):
|
||||
for d in dirs:
|
||||
self._update(os.path.join(root, d))
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ from dvc.utils.compat import FileNotFoundError, fspath_py35, open as _open
|
||||
|
||||
from funcy import cached_property
|
||||
|
||||
from dvc.scm.tree import IgnoreTree
|
||||
from dvc.scm.tree import CleanTree
|
||||
from dvc.config import Config
|
||||
from dvc.exceptions import (
|
||||
FileMissingError,
|
||||
@@ -84,7 +84,7 @@ class Repo(object):
|
||||
|
||||
self.scm = SCM(self.root_dir)
|
||||
|
||||
self.tree = IgnoreTree(WorkingTree(self.root_dir))
|
||||
self.tree = CleanTree(WorkingTree(self.root_dir))
|
||||
|
||||
self.tmp_dir = os.path.join(self.dvc_dir, "tmp")
|
||||
makedirs(self.tmp_dir, exist_ok=True)
|
||||
@@ -391,9 +391,7 @@ class Repo(object):
|
||||
stages = []
|
||||
outs = []
|
||||
|
||||
for root, dirs, files in self.tree.walk(
|
||||
self.root_dir, dvcignore=self.tree.dvcignore
|
||||
):
|
||||
for root, dirs, files in self.tree.walk(self.root_dir):
|
||||
for fname in files:
|
||||
path = os.path.join(root, fname)
|
||||
if not Stage.is_valid_filename(path):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from funcy import group_by
|
||||
|
||||
from dvc.scm.tree import WorkingTree, IgnoreTree
|
||||
from dvc.scm.tree import WorkingTree, CleanTree
|
||||
|
||||
|
||||
def brancher( # noqa: E302
|
||||
@@ -34,7 +34,7 @@ def brancher( # noqa: E302
|
||||
|
||||
scm = self.scm
|
||||
|
||||
self.tree = IgnoreTree(WorkingTree(self.root_dir))
|
||||
self.tree = CleanTree(WorkingTree(self.root_dir))
|
||||
yield "working tree"
|
||||
|
||||
if all_commits:
|
||||
|
||||
@@ -14,7 +14,7 @@ from dvc.scm.base import FileNotInRepoError
|
||||
from dvc.scm.base import RevError
|
||||
from dvc.scm.base import SCMError
|
||||
from dvc.scm.git.tree import GitTree
|
||||
from dvc.scm.tree import IgnoreTree
|
||||
from dvc.scm.tree import CleanTree
|
||||
from dvc.utils import fix_env
|
||||
from dvc.utils import is_binary
|
||||
from dvc.utils import relpath
|
||||
@@ -308,9 +308,7 @@ class Git(Base):
|
||||
return basename == self.ignore_file or Git.GIT_DIR in path_parts
|
||||
|
||||
def get_tree(self, rev):
|
||||
tree = GitTree(self.repo, rev)
|
||||
|
||||
return IgnoreTree(tree)
|
||||
return CleanTree(GitTree(self.repo, rev))
|
||||
|
||||
def _get_diff_trees(self, a_ref, b_ref):
|
||||
"""Private method for getting the trees and commit hashes of 2 git
|
||||
|
||||
+7
-15
@@ -118,7 +118,7 @@ class GitTree(BaseTree):
|
||||
tree = tree[i]
|
||||
return tree
|
||||
|
||||
def _walk(self, tree, topdown=True, dvcignore=None):
|
||||
def _walk(self, tree, topdown=True):
|
||||
dirs, nondirs = [], []
|
||||
for i in _iter_tree(tree):
|
||||
if i.mode == GIT_MODE_DIR:
|
||||
@@ -127,24 +127,16 @@ class GitTree(BaseTree):
|
||||
nondirs.append(i.name)
|
||||
|
||||
if topdown:
|
||||
root = os.path.normpath(tree.abspath)
|
||||
if dvcignore:
|
||||
dirs[:], nondirs[:] = dvcignore(root, dirs, nondirs)
|
||||
yield root, dirs, nondirs
|
||||
yield os.path.normpath(tree.abspath), dirs, nondirs
|
||||
|
||||
for i in dirs:
|
||||
for root, dirs, nondirs in self._walk(tree[i], topdown=True):
|
||||
if dvcignore:
|
||||
dirs[:], nondirs[:] = dvcignore(root, dirs, nondirs)
|
||||
yield root, dirs, nondirs
|
||||
for x in self._walk(tree[i], topdown=True):
|
||||
yield x
|
||||
|
||||
if not topdown:
|
||||
root = os.path.normpath(tree.abspath)
|
||||
if dvcignore:
|
||||
dirs[:], nondirs[:] = dvcignore(root, dirs, nondirs)
|
||||
yield root, dirs, nondirs
|
||||
yield os.path.normpath(tree.abspath), dirs, nondirs
|
||||
|
||||
def walk(self, top, topdown=True, dvcignore=None):
|
||||
def walk(self, top, topdown=True, **kwargs):
|
||||
"""Directory tree generator.
|
||||
|
||||
See `os.walk` for the docs. Differences:
|
||||
@@ -156,5 +148,5 @@ class GitTree(BaseTree):
|
||||
if tree is None:
|
||||
raise IOError(errno.ENOENT, "No such file")
|
||||
|
||||
for x in self._walk(tree, topdown, dvcignore):
|
||||
for x in self._walk(tree, topdown):
|
||||
yield x
|
||||
|
||||
+18
-9
@@ -1,5 +1,7 @@
|
||||
import os
|
||||
|
||||
from funcy import cached_property
|
||||
|
||||
from dvc.ignore import DvcIgnoreFilter
|
||||
from dvc.utils import dvc_walk
|
||||
from dvc.utils.compat import open
|
||||
@@ -12,6 +14,9 @@ class BaseTree(object):
|
||||
def tree_root(self):
|
||||
pass
|
||||
|
||||
def set_dvcignore(self, dvcignore):
|
||||
self.dvcignore = dvcignore
|
||||
|
||||
def open(self, path, mode="r", encoding="utf-8"):
|
||||
"""Open file and return a stream."""
|
||||
|
||||
@@ -24,7 +29,7 @@ class BaseTree(object):
|
||||
def isfile(self, path):
|
||||
"""Test whether a path is a regular file"""
|
||||
|
||||
def walk(self, top, topdown=True, dvcignore=None):
|
||||
def walk(self, top, topdown=True, **kwargs):
|
||||
"""Directory tree generator.
|
||||
|
||||
See `os.walk` for the docs. Differences:
|
||||
@@ -59,7 +64,7 @@ class WorkingTree(BaseTree):
|
||||
"""Test whether a path is a regular file"""
|
||||
return os.path.isfile(path)
|
||||
|
||||
def walk(self, top, topdown=True, dvcignore=None):
|
||||
def walk(self, top, topdown=True, dvcignore=None, **kwargs):
|
||||
"""Directory tree generator.
|
||||
|
||||
See `os.walk` for the docs. Differences:
|
||||
@@ -67,8 +72,6 @@ class WorkingTree(BaseTree):
|
||||
- it could raise exceptions, there is no onerror argument
|
||||
"""
|
||||
|
||||
assert dvcignore
|
||||
|
||||
def onerror(e):
|
||||
raise e
|
||||
|
||||
@@ -78,13 +81,17 @@ class WorkingTree(BaseTree):
|
||||
yield os.path.normpath(root), dirs, files
|
||||
|
||||
|
||||
class IgnoreTree(BaseTree):
|
||||
class CleanTree(BaseTree):
|
||||
def __init__(self, tree):
|
||||
super(CleanTree, self).__init__()
|
||||
self.tree = tree
|
||||
self._dvcignore = DvcIgnoreFilter(self.tree)
|
||||
self.tree.set_dvcignore(self._dvcignore)
|
||||
|
||||
@property
|
||||
@cached_property
|
||||
def dvcignore(self):
|
||||
return DvcIgnoreFilter(self.tree.tree_root, self.tree)
|
||||
self._dvcignore.reload()
|
||||
return self._dvcignore
|
||||
|
||||
@property
|
||||
def tree_root(self):
|
||||
@@ -102,6 +109,8 @@ class IgnoreTree(BaseTree):
|
||||
def isfile(self, path):
|
||||
return self.tree.isfile(path)
|
||||
|
||||
def walk(self, top, topdown=True, dvcignore=None):
|
||||
for r, d, fs in self.tree.walk(top, topdown, self.dvcignore):
|
||||
def walk(self, top, topdown=True, **kwargs):
|
||||
for r, d, fs in self.tree.walk(top, topdown, dvcignore=self.dvcignore):
|
||||
d[:], fs[:] = self.dvcignore(r, d, fs)
|
||||
|
||||
yield r, d, fs
|
||||
|
||||
@@ -3,7 +3,7 @@ import os
|
||||
from dvc.scm.git.tree import GitTree
|
||||
from dvc.cache import Cache
|
||||
from dvc.repo import Repo
|
||||
from dvc.scm.tree import IgnoreTree
|
||||
from dvc.scm.tree import CleanTree
|
||||
from dvc.system import System
|
||||
from dvc.utils.compat import fspath
|
||||
|
||||
@@ -51,7 +51,7 @@ def test_collect(tmp_dir, scm, dvc, run_copy):
|
||||
|
||||
assert collect_outs("bar.dvc", with_deps=True) == {"foo", "bar"}
|
||||
|
||||
dvc.tree = IgnoreTree(GitTree(scm.repo, "new-branch"))
|
||||
dvc.tree = CleanTree(GitTree(scm.repo, "new-branch"))
|
||||
|
||||
assert collect_outs("buzz.dvc", with_deps=True) == {"foo", "bar", "buzz"}
|
||||
assert collect_outs("buzz.dvc", with_deps=False) == {"buzz"}
|
||||
|
||||
+11
-15
@@ -3,10 +3,9 @@ from __future__ import unicode_literals
|
||||
|
||||
from os.path import join
|
||||
|
||||
from dvc.ignore import DvcIgnoreFilter
|
||||
from dvc.scm import SCM
|
||||
from dvc.scm.git import GitTree
|
||||
from dvc.scm.tree import WorkingTree, IgnoreTree
|
||||
from dvc.scm.tree import WorkingTree, CleanTree
|
||||
from tests.basic_env import TestDir
|
||||
from tests.basic_env import TestGit
|
||||
from tests.basic_env import TestGitSubmodule
|
||||
@@ -82,14 +81,14 @@ class TestGitTree(TestGit, GitTreeTests):
|
||||
def setUp(self):
|
||||
super(TestGitTree, self).setUp()
|
||||
self.scm = SCM(self._root_dir)
|
||||
self.tree = IgnoreTree(GitTree(self.git, "master"))
|
||||
self.tree = CleanTree(GitTree(self.git, "master"))
|
||||
|
||||
|
||||
class TestGitSubmoduleTree(TestGitSubmodule, GitTreeTests):
|
||||
def setUp(self):
|
||||
super(TestGitSubmoduleTree, self).setUp()
|
||||
self.scm = SCM(self._root_dir)
|
||||
self.tree = IgnoreTree(GitTree(self.git, "master"))
|
||||
self.tree = CleanTree(GitTree(self.git, "master"))
|
||||
self._pushd(self._root_dir)
|
||||
|
||||
|
||||
@@ -108,10 +107,9 @@ class AssertWalkEqualMixin(object):
|
||||
|
||||
class TestWalkInNoSCM(AssertWalkEqualMixin, TestDir):
|
||||
def test(self):
|
||||
tree = WorkingTree(self._root_dir)
|
||||
dvcignore = DvcIgnoreFilter(self.root_dir, tree)
|
||||
tree = CleanTree(WorkingTree(self._root_dir))
|
||||
self.assertWalkEqual(
|
||||
tree.walk(self._root_dir, dvcignore=dvcignore),
|
||||
tree.walk(self._root_dir),
|
||||
[
|
||||
(
|
||||
self._root_dir,
|
||||
@@ -128,10 +126,9 @@ class TestWalkInNoSCM(AssertWalkEqualMixin, TestDir):
|
||||
)
|
||||
|
||||
def test_subdir(self):
|
||||
tree = WorkingTree(self._root_dir)
|
||||
dvcignore = DvcIgnoreFilter(self.root_dir, tree)
|
||||
tree = CleanTree(WorkingTree(self._root_dir))
|
||||
self.assertWalkEqual(
|
||||
tree.walk(join("data_dir", "data_sub_dir"), dvcignore=dvcignore),
|
||||
tree.walk(join("data_dir", "data_sub_dir")),
|
||||
[
|
||||
(
|
||||
join(self._root_dir, "data_dir", "data_sub_dir"),
|
||||
@@ -144,10 +141,9 @@ class TestWalkInNoSCM(AssertWalkEqualMixin, TestDir):
|
||||
|
||||
class TestWalkInGit(AssertWalkEqualMixin, TestGit):
|
||||
def test_nobranch(self):
|
||||
tree = WorkingTree(self._root_dir)
|
||||
dvcignore = DvcIgnoreFilter(self._root_dir, tree)
|
||||
tree = CleanTree(WorkingTree(self._root_dir))
|
||||
self.assertWalkEqual(
|
||||
tree.walk(".", dvcignore=dvcignore),
|
||||
tree.walk("."),
|
||||
[
|
||||
(
|
||||
self._root_dir,
|
||||
@@ -163,7 +159,7 @@ class TestWalkInGit(AssertWalkEqualMixin, TestGit):
|
||||
],
|
||||
)
|
||||
self.assertWalkEqual(
|
||||
tree.walk(join("data_dir", "data_sub_dir"), dvcignore=dvcignore),
|
||||
tree.walk(join("data_dir", "data_sub_dir")),
|
||||
[
|
||||
(
|
||||
join(self._root_dir, "data_dir", "data_sub_dir"),
|
||||
@@ -177,7 +173,7 @@ class TestWalkInGit(AssertWalkEqualMixin, TestGit):
|
||||
scm = SCM(self._root_dir)
|
||||
scm.add([self.DATA_SUB_DIR])
|
||||
scm.commit("add data_dir/data_sub_dir/data_sub")
|
||||
tree = IgnoreTree(GitTree(self.git, "master"))
|
||||
tree = CleanTree(GitTree(self.git, "master"))
|
||||
self.assertWalkEqual(
|
||||
tree.walk("."),
|
||||
[
|
||||
|
||||
@@ -23,7 +23,7 @@ from tests.utils import spy
|
||||
|
||||
class TestMtimeAndSize(TestDir):
|
||||
def test(self):
|
||||
dvcignore = DvcIgnoreFilter(self.root_dir, WorkingTree(self.root_dir))
|
||||
dvcignore = DvcIgnoreFilter(WorkingTree(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)
|
||||
|
||||
@@ -127,9 +127,7 @@ def test_get_inode(repo_dir):
|
||||
def test_path_object_and_str_are_valid_types_get_mtime_and_size(
|
||||
path, repo_dir
|
||||
):
|
||||
dvcignore = DvcIgnoreFilter(
|
||||
repo_dir.root_dir, WorkingTree(repo_dir.root_dir)
|
||||
)
|
||||
dvcignore = DvcIgnoreFilter(WorkingTree(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
|
||||
|
||||
Reference in New Issue
Block a user