Skip to content

Commit a6151ea

Browse files
authored
erepo: get rid of get_checksum (#5145)
1 parent 76cc70a commit a6151ea

File tree

4 files changed

+25
-15
lines changed

4 files changed

+25
-15
lines changed

dvc/dependency/repo.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from voluptuous import Required
22

3+
from dvc.path_info import PathInfo
4+
35
from .local import LocalDependency
46

57

@@ -48,7 +50,8 @@ def _get_hash(self, locked=True):
4850
# we want stream but not fetch, so DVC out directories are
4951
# walked, but dir contents is not fetched
5052
with self._make_repo(locked=locked, fetch=False, stream=True) as repo:
51-
return repo.get_checksum(self.def_path)
53+
path_info = PathInfo(repo.root_dir) / self.def_path
54+
return repo.repo_tree.get_hash(path_info, follow_subrepos=False)
5255

5356
def workspace_status(self):
5457
current = self._get_hash(locked=True)

dvc/external_repo.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -218,15 +218,6 @@ def _get_tree_for(self, repo, **kwargs):
218218
kw["fetch"] = True
219219
return RepoTree(repo, **kw)
220220

221-
def get_checksum(self, path):
222-
path_info = PathInfo(self.root_dir) / path
223-
with reraise(FileNotFoundError, PathMissingError(path, self.url)):
224-
metadata = self.repo_tree.metadata(path_info)
225-
226-
# skip subrepos to check for
227-
tree = self._get_tree_for(metadata.repo)
228-
return tree.get_hash(path_info)
229-
230221
@staticmethod
231222
def _fix_local_remote(orig_repo, src_repo, remote_name):
232223
# If a remote URL is relative to the source repo,

dvc/tree/repo.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,13 @@ def is_dvc_repo(d):
309309
yield from self._walk(repo_walk, None, dvcfiles=dvcfiles)
310310

311311
def walk(
312-
self, top, topdown=True, onerror=None, dvcfiles=False, **kwargs
312+
self,
313+
top,
314+
topdown=True,
315+
onerror=None,
316+
dvcfiles=False,
317+
follow_subrepos=None,
318+
**kwargs
313319
): # pylint: disable=arguments-differ
314320
"""Walk and merge both DVC and repo trees.
315321
@@ -336,13 +342,17 @@ def walk(
336342
onerror(NotADirectoryError(top))
337343
return
338344

345+
ignore_subrepos = not self._traverse_subrepos
346+
if follow_subrepos is not None:
347+
ignore_subrepos = not follow_subrepos
348+
339349
tree, dvc_tree = self._get_tree_pair(top)
340350
repo_exists = tree.exists(top)
341351
repo_walk = tree.walk(
342352
top,
343353
topdown=topdown,
344354
onerror=onerror,
345-
ignore_subrepos=not self._traverse_subrepos,
355+
ignore_subrepos=ignore_subrepos,
346356
)
347357

348358
if not dvc_tree or (repo_exists and dvc_tree.isdvc(top)):
@@ -363,10 +373,14 @@ def walk_files(self, top, **kwargs): # pylint: disable=arguments-differ
363373
for fname in files:
364374
yield PathInfo(root) / fname
365375

366-
def get_dir_hash(self, path_info, **kwargs):
376+
def get_dir_hash(
377+
self, path_info, follow_subrepos=None, **kwargs
378+
): # pylint: disable=arguments-differ
367379
tree, dvc_tree = self._get_tree_pair(path_info)
368380
if tree.exists(path_info):
369-
return super().get_dir_hash(path_info, **kwargs)
381+
return super().get_dir_hash(
382+
path_info, follow_subrepos=follow_subrepos, **kwargs
383+
)
370384
if not dvc_tree:
371385
raise FileNotFoundError
372386
return dvc_tree.get_dir_hash(path_info, **kwargs)

tests/func/test_external_repo.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,9 @@ def test_subrepos_are_ignored(tmp_dir, erepo_dir):
194194

195195
expected_hash = HashInfo("md5", "e1d9e8eae5374860ae025ec84cfd85c7.dir")
196196
assert (
197-
repo.get_checksum(os.path.join(repo.root_dir, "dir"))
197+
repo.repo_tree.get_hash(
198+
os.path.join(repo.root_dir, "dir"), follow_subrepos=False
199+
)
198200
== expected_hash
199201
)
200202

0 commit comments

Comments
 (0)