From 6340c78aceabfba5237b728319cad62daeeb1505 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Saugat=20Pachhai=20=28=E0=A4=B8=E0=A5=8C=E0=A4=97=E0=A4=BE?= =?UTF-8?q?=E0=A4=A4=29?= Date: Fri, 12 May 2023 15:22:24 +0545 Subject: [PATCH 1/2] fix checkout callback Fix https://github.com/iterative/dvc/issues/6226. --- dvc/output.py | 65 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/dvc/output.py b/dvc/output.py index 6a70b23a94..e6295e233e 100644 --- a/dvc/output.py +++ b/dvc/output.py @@ -36,7 +36,7 @@ from .annotations import ANNOTATION_FIELDS, ANNOTATION_SCHEMA, Annotation from .fs import LocalFileSystem, RemoteMissingDepsError, Schemes, get_cloud_fs -from .fs.callbacks import DEFAULT_CALLBACK +from .fs.callbacks import DEFAULT_CALLBACK, Callback from .utils import relpath from .utils.fs import path_isin @@ -45,7 +45,6 @@ from dvc_data.index import DataIndexKey from dvc_objects.db import ObjectDB - from .fs.callbacks import Callback from .ignore import DvcIgnoreFilter logger = logging.getLogger(__name__) @@ -740,15 +739,20 @@ def commit(self, filter_info=None, relink=True) -> None: hardlink=hardlink, ) if relink: - self._checkout( - filter_info or self.fs_path, - self.fs, - obj, - self.cache, - relink=True, - state=self.repo.state, - prompt=prompt.confirm, - ) + rel = self.fs.path.relpath(filter_info or self.fs_path) + with Callback.as_tqdm_callback( + desc=f"Checking out {rel}", unit="files" + ) as callback: + self._checkout( + filter_info or self.fs_path, + self.fs, + obj, + self.cache, + relink=True, + state=self.repo.state, + prompt=prompt.confirm, + progress_callback=callback, + ) self.set_exec() def _commit_granular_dir(self, filter_info, hardlink) -> Optional["HashFile"]: @@ -890,9 +894,19 @@ def checkout( checkpoint_reset: bool = False, **kwargs, ) -> Optional[Tuple[bool, Optional[bool]]]: + # callback passed act as a aggregate callback. + # do not let checkout to call set_size and change progressbar. + class CallbackProxy(Callback): + def relative_update(self, inc: int = 1) -> None: + progress_callback.relative_update(inc) + return super().relative_update(inc) + + def branch(self, *args, **kwargs): + return progress_callback.branch(*args, **kwargs) + + callback = CallbackProxy() if not self.use_cache: - if progress_callback != DEFAULT_CALLBACK: - progress_callback.relative_update(self.get_files_number(filter_info)) + callback.relative_update(self.get_files_number(filter_info)) return None obj = self.get_obj(filter_info=filter_info) @@ -914,7 +928,7 @@ def checkout( obj, self.cache, force=force, - progress_callback=progress_callback, + progress_callback=callback, relink=relink, state=self.repo.state, prompt=prompt.confirm, @@ -1342,15 +1356,20 @@ def add( # noqa: C901 otransfer(staging, self.cache, {obj.hash_info}, hardlink=relink, shallow=False) if relink: - self._checkout( - path, - self.fs, - obj, - self.cache, - relink=True, - state=self.repo.state, - prompt=prompt.confirm, - ) + rel = self.fs.path.relpath(path) + with Callback.as_tqdm_callback( + desc=f"Checking out {rel}", unit="files" + ) as callback: + self._checkout( + path, + self.fs, + obj, + self.cache, + relink=True, + state=self.repo.state, + prompt=prompt.confirm, + progress_callback=callback, + ) self.set_exec() return obj From a8716e2570b75a1b10e8f7a429b452fb9afd0497 Mon Sep 17 00:00:00 2001 From: skshetry <18718008+skshetry@users.noreply.github.com> Date: Fri, 12 May 2023 16:35:15 +0545 Subject: [PATCH 2/2] bump minversion of dvc-data to 0.49.1 --- dvc/repo/worktree.py | 3 ++- pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/dvc/repo/worktree.py b/dvc/repo/worktree.py index 6caf14cb11..45fc6dff30 100644 --- a/dvc/repo/worktree.py +++ b/dvc/repo/worktree.py @@ -173,7 +173,7 @@ def push_worktree( ) as cb: cb.set_size(total) try: - pushed += checkout( + stats = checkout( new_index, remote_obj.path, remote_obj.fs, @@ -184,6 +184,7 @@ def push_worktree( jobs=jobs, **diff_kwargs, ) + pushed += sum(len(changes) for changes in stats.values()) except VersioningNotSupported: logger.exception("") raise DvcException( diff --git a/pyproject.toml b/pyproject.toml index 231a9b19b4..ec8ca2be51 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ dependencies = [ "configobj>=5.0.6", "distro>=1.3", "dpath<3,>=2.1.0", - "dvc-data>=0.47.5,<0.48", + "dvc-data>=0.49.1,<0.50", "dvc-http>=2.29.0", "dvc-render>=0.3.1,<1", "dvc-studio-client>=0.9.0,<1",