def checkout(self, target=None, with_deps=False, force=False, recursive=False): from dvc.stage import StageFileDoesNotExistError, StageFileBadNameError all_stages = self.stages() try: stages = self.collect(target, with_deps=with_deps, recursive=recursive) except (StageFileDoesNotExistError, StageFileBadNameError) as exc: if not target: raise raise CheckoutErrorSuggestGit(target, exc) with self.state: _cleanup_unused_links(self, all_stages) progress_callback = get_progress_callback(stages) for stage in stages: if stage.locked: logger.warning( "DVC-file '{path}' is locked. Its dependencies are" " not going to be checked out.".format(path=stage.relpath)) stage.checkout(force=force, progress_callback=progress_callback) if progress_callback: progress_callback.finish("Checkout finished!")
def _checkout(self, targets=None, with_deps=False, force=False, recursive=False): from dvc.stage import StageFileDoesNotExistError, StageFileBadNameError stages = set() targets = targets or [None] for target in targets: try: new = self.collect(target, with_deps=with_deps, recursive=recursive) stages.update(new) except (StageFileDoesNotExistError, StageFileBadNameError) as exc: if not target: raise raise CheckoutErrorSuggestGit(target, exc) _cleanup_unused_links(self, self.stages) total = get_all_files_numbers(stages) if total == 0: logger.info("Nothing to do") failed = [] with Tqdm(total=total, unit="file", desc="Checkout", disable=total == 0) as pbar: for stage in stages: failed.extend( stage.checkout(force=force, progress_callback=pbar.update_desc)) if failed: raise CheckoutError(failed)
def checkout(self, target=None, with_deps=False, force=False, recursive=False): from dvc.stage import StageFileDoesNotExistError, StageFileBadNameError all_stages = self.stages() try: stages = self.collect(target, with_deps=with_deps, recursive=recursive) except (StageFileDoesNotExistError, StageFileBadNameError) as exc: if not target: raise raise CheckoutErrorSuggestGit(target, exc) with self.state: _cleanup_unused_links(self, all_stages) total = get_all_files_numbers(stages) with Tqdm(total=total, unit="file", desc="Checkout", disable=total == 0) as pbar: for stage in stages: if stage.locked: logger.warning( "DVC-file '{path}' is locked. Its dependencies are" " not going to be checked out.".format( path=stage.relpath)) stage.checkout(force=force, progress_callback=pbar.update_desc) pbar.update_desc("Checkout", 0) # clear path name description
def _collect_pairs( self: "Repo", targets, with_deps: bool, recursive: bool ) -> Set["StageInfo"]: from dvc.stage.exceptions import ( StageFileBadNameError, StageFileDoesNotExistError, ) pairs: Set["StageInfo"] = set() for target in targets: try: pairs.update( self.stage.collect_granular( target, with_deps=with_deps, recursive=recursive ) ) except ( StageFileDoesNotExistError, StageFileBadNameError, NoOutputOrStageError, ) as exc: if not target: raise raise CheckoutErrorSuggestGit(target) from exc return pairs
def _checkout( self, targets=None, with_deps=False, force=False, relink=False, recursive=False, ): from dvc.stage import StageFileDoesNotExistError, StageFileBadNameError unused = [] stats = { "added": [], "deleted": [], "modified": [], "failed": [], } if not targets: targets = [None] unused = _get_unused_links(self) stats["deleted"] = [_fspath_dir(u, self.root_dir) for u in unused] self.state.remove_links(unused) pairs = set() for target in targets: try: pairs.update( self.collect_granular( target, with_deps=with_deps, recursive=recursive ) ) except (StageFileDoesNotExistError, StageFileBadNameError) as exc: if not target: raise raise CheckoutErrorSuggestGit(target) from exc total = get_all_files_numbers(pairs) with Tqdm( total=total, unit="file", desc="Checkout", disable=total == 0 ) as pbar: for stage, filter_info in pairs: result = stage.checkout( force=force, progress_callback=pbar.update_desc, relink=relink, filter_info=filter_info, ) for data in ["failed", "added", "modified"]: stats[data].extend( _fspath_dir(path, self.root_dir) for path in result[data] ) if stats.get("failed"): raise CheckoutError(stats["failed"], stats) del stats["failed"] return stats
def _checkout( self, targets=None, with_deps=False, force=False, relink=False, recursive=False, ): from dvc.stage import StageFileDoesNotExistError, StageFileBadNameError if not targets: targets = [None] _cleanup_unused_links(self) pairs = set() for target in targets: try: pairs.update( self.collect_granular( target, with_deps=with_deps, recursive=recursive ) ) except (StageFileDoesNotExistError, StageFileBadNameError) as exc: if not target: raise raise CheckoutErrorSuggestGit(target) from exc total = get_all_files_numbers(pairs) if total == 0: logger.info("Nothing to do") failed = [] with Tqdm( total=total, unit="file", desc="Checkout", disable=total == 0 ) as pbar: for stage, filter_info in pairs: failed.extend( stage.checkout( force=force, progress_callback=pbar.update_desc, relink=relink, filter_info=filter_info, ) ) if failed: raise CheckoutError(failed)
def checkout( self, targets=None, with_deps=False, force=False, relink=False, recursive=False, allow_persist_missing=False, ): from dvc.stage.exceptions import ( StageFileBadNameError, StageFileDoesNotExistError, ) unused = [] stats = { "added": [], "deleted": [], "modified": [], "failed": [], } if not targets: targets = [None] unused = _get_unused_links(self) stats["deleted"] = [_fspath_dir(u) for u in unused] self.state.remove_links(unused) if isinstance(targets, str): targets = [targets] pairs = set() for target in targets: try: pairs.update( self.collect_granular( target, with_deps=with_deps, recursive=recursive ) ) except ( StageFileDoesNotExistError, StageFileBadNameError, NoOutputOrStageError, ) as exc: if not target: raise raise CheckoutErrorSuggestGit(target) from exc total = get_all_files_numbers(pairs) with Tqdm( total=total, unit="file", desc="Checkout", disable=total == 0 ) as pbar: for stage, filter_info in pairs: result = stage.checkout( force=force, progress_callback=pbar.update_msg, relink=relink, filter_info=filter_info, allow_persist_missing=allow_persist_missing, ) for key, items in result.items(): stats[key].extend(_fspath_dir(path) for path in items) if stats.get("failed"): raise CheckoutError(stats["failed"], stats) del stats["failed"] return stats