Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions dvc/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ class Config(dict):
def __init__(
self, dvc_dir=None, validate=True, tree=None,
): # pylint: disable=super-init-not-called
from dvc.tree.local import LocalRemoteTree
from dvc.tree.local import LocalTree

self.dvc_dir = dvc_dir

Expand All @@ -251,7 +251,7 @@ def __init__(
else:
self.dvc_dir = os.path.abspath(os.path.realpath(dvc_dir))

self.wtree = LocalRemoteTree(None, {"url": self.dvc_dir})
self.wtree = LocalTree(None, {"url": self.dvc_dir})
self.tree = tree or self.wtree

self.load(validate=validate)
Expand Down
4 changes: 2 additions & 2 deletions dvc/dependency/azure.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from dvc.dependency.base import BaseDependency
from dvc.output.base import BaseOutput

from ..tree.azure import AzureRemoteTree
from ..tree.azure import AzureTree


class AzureDependency(BaseDependency, BaseOutput):
TREE_CLS = AzureRemoteTree
TREE_CLS = AzureTree
4 changes: 2 additions & 2 deletions dvc/dependency/http.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from dvc.dependency.base import BaseDependency
from dvc.output.base import BaseOutput

from ..tree.http import HTTPRemoteTree
from ..tree.http import HTTPTree


class HTTPDependency(BaseDependency, BaseOutput):
TREE_CLS = HTTPRemoteTree
TREE_CLS = HTTPTree
4 changes: 2 additions & 2 deletions dvc/dependency/https.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from ..tree.https import HTTPSRemoteTree
from ..tree.https import HTTPSTree
from .http import HTTPDependency


class HTTPSDependency(HTTPDependency):
TREE_CLS = HTTPSRemoteTree
TREE_CLS = HTTPSTree
6 changes: 2 additions & 4 deletions dvc/external_repo.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from dvc.repo import Repo
from dvc.repo.tree import RepoTree
from dvc.scm.git import Git
from dvc.scm.tree import is_working_tree
from dvc.tree.local import LocalTree
from dvc.utils.fs import remove

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -102,10 +102,8 @@ def repo_tree(self):
return RepoTree(self, fetch=True)

def get_rev(self):
if is_working_tree(self.tree):
if isinstance(self.tree, LocalTree):
return self.scm.get_rev()
if hasattr(self.tree, "tree"):
return self.tree.tree.rev
return self.tree.rev

def fetch_external(self, paths: Iterable, **kwargs):
Expand Down
12 changes: 6 additions & 6 deletions dvc/output/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
from dvc.scheme import Schemes

from ..tree import get_cloud_tree
from ..tree.hdfs import HDFSRemoteTree
from ..tree.local import LocalRemoteTree
from ..tree.s3 import S3RemoteTree
from ..tree.hdfs import HDFSTree
from ..tree.local import LocalTree
from ..tree.s3 import S3Tree

OUTS = [
HDFSOutput,
Expand Down Expand Up @@ -48,9 +48,9 @@
# so when a few types of outputs share the same name, we only need
# specify it once.
CHECKSUMS_SCHEMA = {
LocalRemoteTree.PARAM_CHECKSUM: CHECKSUM_SCHEMA,
S3RemoteTree.PARAM_CHECKSUM: CHECKSUM_SCHEMA,
HDFSRemoteTree.PARAM_CHECKSUM: CHECKSUM_SCHEMA,
LocalTree.PARAM_CHECKSUM: CHECKSUM_SCHEMA,
S3Tree.PARAM_CHECKSUM: CHECKSUM_SCHEMA,
HDFSTree.PARAM_CHECKSUM: CHECKSUM_SCHEMA,
}

SCHEMA = CHECKSUMS_SCHEMA.copy()
Expand Down
4 changes: 2 additions & 2 deletions dvc/output/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
RemoteCacheRequiredError,
)

from ..tree.base import BaseRemoteTree
from ..tree.base import BaseTree

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -48,7 +48,7 @@ def __init__(self, path):
class BaseOutput:
IS_DEPENDENCY = False

TREE_CLS = BaseRemoteTree
TREE_CLS = BaseTree

PARAM_PATH = "path"
PARAM_CACHE = "cache"
Expand Down
4 changes: 2 additions & 2 deletions dvc/output/gs.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from dvc.output.s3 import S3Output

from ..tree.gs import GSRemoteTree
from ..tree.gs import GSTree


class GSOutput(S3Output):
TREE_CLS = GSRemoteTree
TREE_CLS = GSTree
4 changes: 2 additions & 2 deletions dvc/output/hdfs.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from dvc.output.base import BaseOutput

from ..tree.hdfs import HDFSRemoteTree
from ..tree.hdfs import HDFSTree


class HDFSOutput(BaseOutput):
TREE_CLS = HDFSRemoteTree
TREE_CLS = HDFSTree
11 changes: 7 additions & 4 deletions dvc/output/local.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,28 @@
from dvc.exceptions import DvcException
from dvc.istextfile import istextfile
from dvc.output.base import BaseOutput
from dvc.scm.tree import is_working_tree
from dvc.utils import relpath
from dvc.utils.fs import path_isin

from ..tree.local import LocalRemoteTree
from ..tree.local import LocalTree

logger = logging.getLogger(__name__)


class LocalOutput(BaseOutput):
TREE_CLS = LocalRemoteTree
TREE_CLS = LocalTree
sep = os.sep

def __init__(self, stage, path, *args, **kwargs):
if stage and path_isin(path, stage.repo.root_dir):
path = relpath(path, stage.wdir)

super().__init__(stage, path, *args, **kwargs)
if self.is_in_repo and self.repo and is_working_tree(self.repo.tree):
if (
self.is_in_repo
and self.repo
and isinstance(self.repo.tree, LocalTree)
):
self.tree = self.repo.tree

def _parse_path(self, tree, path):
Expand Down
4 changes: 2 additions & 2 deletions dvc/output/s3.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from dvc.output.base import BaseOutput

from ..tree.s3 import S3RemoteTree
from ..tree.s3 import S3Tree


class S3Output(BaseOutput):
TREE_CLS = S3RemoteTree
TREE_CLS = S3Tree
4 changes: 2 additions & 2 deletions dvc/output/ssh.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from dvc.output.base import BaseOutput

from ..tree.ssh import SSHRemoteTree
from ..tree.ssh import SSHTree


class SSHOutput(BaseOutput):
TREE_CLS = SSHRemoteTree
TREE_CLS = SSHTree
4 changes: 2 additions & 2 deletions dvc/remote/local.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
)
from dvc.remote.index import RemoteIndexNoop

from ..tree.local import LocalRemoteTree
from ..tree.local import LocalTree

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -52,7 +52,7 @@ class LocalRemote(Remote):

class LocalCache(CloudCache):
DEFAULT_CACHE_TYPES = ["reflink", "copy"]
CACHE_MODE = LocalRemoteTree.CACHE_MODE
CACHE_MODE = LocalTree.CACHE_MODE

def __init__(self, tree):
super().__init__(tree)
Expand Down
4 changes: 2 additions & 2 deletions dvc/repo/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ def __init__(self, root_dir=None, scm=None, rev=None):
from dvc.repo.metrics import Metrics
from dvc.repo.plots import Plots
from dvc.repo.params import Params
from dvc.tree.local import LocalRemoteTree
from dvc.tree.local import LocalTree
from dvc.utils.fs import makedirs
from dvc.stage.cache import StageCache

Expand All @@ -91,7 +91,7 @@ def __init__(self, root_dir=None, scm=None, rev=None):
else:
root_dir = self.find_root(root_dir)
self.root_dir = os.path.abspath(os.path.realpath(root_dir))
self.tree = LocalRemoteTree(
self.tree = LocalTree(
self,
{"url": self.root_dir},
use_dvcignore=True,
Expand Down
6 changes: 2 additions & 4 deletions dvc/repo/brancher.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from funcy import group_by

from dvc.tree.local import LocalRemoteTree
from dvc.tree.local import LocalTree


def brancher( # noqa: E302
Expand Down Expand Up @@ -29,9 +29,7 @@ def brancher( # noqa: E302

scm = self.scm

self.tree = LocalRemoteTree(
self, {"url": self.root_dir}, use_dvcignore=True
)
self.tree = LocalTree(self, {"url": self.root_dir}, use_dvcignore=True)
yield "workspace"

if revs and "workspace" in revs:
Expand Down
4 changes: 2 additions & 2 deletions dvc/repo/diff.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import os

from dvc.repo import locked
from dvc.scm.tree import is_working_tree
from dvc.tree.local import LocalTree


@locked
Expand Down Expand Up @@ -33,7 +33,7 @@ def _to_path(output):
else os.path.join(str(output), "")
)

on_working_tree = is_working_tree(self.tree)
on_working_tree = isinstance(self.tree, LocalTree)

def _to_checksum(output):
if on_working_tree:
Expand Down
6 changes: 3 additions & 3 deletions dvc/repo/tree.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
from dvc.exceptions import OutputNotFoundError
from dvc.path_info import PathInfo
from dvc.remote.base import RemoteActionNotImplemented
from dvc.tree.base import BaseRemoteTree
from dvc.tree.base import BaseTree
from dvc.utils import file_md5
from dvc.utils.fs import copy_fobj_to_file, makedirs

logger = logging.getLogger(__name__)


class DvcTree(BaseRemoteTree): # pylint:disable=abstract-method
class DvcTree(BaseTree): # pylint:disable=abstract-method
"""DVC repo tree.

Args:
Expand Down Expand Up @@ -237,7 +237,7 @@ def get_file_hash(self, path_info):
return out.checksum


class RepoTree(BaseRemoteTree): # pylint:disable=abstract-method
class RepoTree(BaseTree): # pylint:disable=abstract-method
"""DVC + git-tracked files tree.

Args:
Expand Down
3 changes: 2 additions & 1 deletion dvc/scm/git/__init__.py β†’ dvc/scm/git.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
RevError,
SCMError,
)
from dvc.scm.git.tree import GitTree
from dvc.utils import fix_env, is_binary, relpath
from dvc.utils.fs import path_isin

Expand Down Expand Up @@ -376,6 +375,8 @@ def belongs_to_scm(self, path):
return basename == self.ignore_file or Git.GIT_DIR in path_parts

def get_tree(self, rev, **kwargs):
from dvc.tree.git import GitTree

return GitTree(self.repo, self.resolve_rev(rev), **kwargs)

def get_rev(self):
Expand Down
6 changes: 0 additions & 6 deletions dvc/scm/tree.py

This file was deleted.

8 changes: 4 additions & 4 deletions dvc/stage/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
from dvc.utils.fs import path_isin

from ..dependency import ParamsDependency
from ..tree.local import LocalRemoteTree
from ..tree.s3 import S3RemoteTree
from ..tree.local import LocalTree
from ..tree.s3 import S3Tree
from ..utils import dict_md5, format_link, relpath
from .exceptions import (
MissingDataSource,
Expand Down Expand Up @@ -133,8 +133,8 @@ def stage_dump_eq(stage_cls, old_d, new_d):
new_d.pop(stage_cls.PARAM_MD5, None)
outs = old_d.get(stage_cls.PARAM_OUTS, [])
for out in outs:
out.pop(LocalRemoteTree.PARAM_CHECKSUM, None)
out.pop(S3RemoteTree.PARAM_CHECKSUM, None)
out.pop(LocalTree.PARAM_CHECKSUM, None)
out.pop(S3Tree.PARAM_CHECKSUM, None)

# outs and deps are lists of dicts. To check equality, we need to make
# them independent of the order, so, we convert them to dicts.
Expand Down
6 changes: 3 additions & 3 deletions dvc/state.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,12 @@ class State: # pylint: disable=too-many-instance-attributes
MAX_UINT = 2 ** 64 - 2

def __init__(self, local_cache):
from dvc.tree.local import LocalRemoteTree
from dvc.tree.local import LocalTree

repo = local_cache.repo
self.repo = repo
self.root_dir = repo.root_dir
self.tree = LocalRemoteTree(None, {"url": self.root_dir})
self.tree = LocalTree(None, {"url": self.root_dir})

state_config = repo.config.get("state", {})
self.row_limit = state_config.get("row_limit", self.STATE_ROW_LIMIT)
Expand Down Expand Up @@ -396,7 +396,7 @@ def get(self, path_info):
assert isinstance(path_info, str) or path_info.scheme == "local"
path = os.fspath(path_info)

# NOTE: use os.path.exists instead of LocalRemoteTree.exists
# NOTE: use os.path.exists instead of LocalTree.exists
# because it uses lexists() and will return True for broken
# symlinks that we cannot stat() in get_mtime_and_size
if not os.path.exists(path):
Expand Down
Loading