diff --git a/dvc/output.py b/dvc/output.py index e5833ca65..c1b8b36ae 100644 --- a/dvc/output.py +++ b/dvc/output.py @@ -26,6 +26,7 @@ from dvc_data.hashfile.hash_info import HashInfo from dvc_data.hashfile.istextfile import istextfile from dvc_data.hashfile.meta import Meta from dvc_data.hashfile.transfer import transfer as otransfer +from dvc_data.index import DataIndexEntry from dvc_objects.errors import ObjectFormatError from .annotations import ANNOTATION_FIELDS, ANNOTATION_SCHEMA, Annotation @@ -514,6 +515,23 @@ class Output: key = self.fs.path.parts(no_drive)[1:] return workspace, key + def get_entry(self) -> "DataIndexEntry": + from dvc.config import NoRemoteError + + try: + remote = self.repo.cloud.get_remote_odb(self.remote) + except NoRemoteError: + remote = None + + return DataIndexEntry( + meta=self.meta, + obj=self.obj, + hash_info=self.hash_info, + odb=self.odb, + cache=self.odb, + remote=remote, + ) + def changed_checksum(self): return self.hash_info != self.get_hash() diff --git a/dvc/repo/index.py b/dvc/repo/index.py index dfae2aee0..005065baf 100644 --- a/dvc/repo/index.py +++ b/dvc/repo/index.py @@ -228,8 +228,7 @@ class Index: def data(self) -> "Dict[str, DataIndex]": from collections import defaultdict - from dvc.config import NoRemoteError - from dvc_data.index import DataIndex, DataIndexEntry + from dvc_data.index import DataIndex by_workspace: dict = defaultdict(DataIndex) @@ -241,29 +240,16 @@ class Index: continue workspace, key = out.index_key - - try: - remote = self.repo.cloud.get_remote_odb(out.remote) - except NoRemoteError: - remote = None - data_index = by_workspace[workspace] if out.files: out.obj = out.get_obj() - entry = DataIndexEntry( - meta=out.meta, - obj=out.obj, - hash_info=out.hash_info, - odb=out.odb, - cache=out.odb, - remote=remote, - ) + entry = out.get_entry() if out.stage.is_import and not out.stage.is_repo_import: entry.fs = out.stage.deps[0].fs entry.path = out.stage.deps[0].fs_path - entry.cache = out.odb + entry.meta = out.stage.deps[0].meta data_index[key] = entry return dict(by_workspace)