diff --git a/dvc/repo/plots/__init__.py b/dvc/repo/plots/__init__.py index 5973f1198..b1a9b64d5 100644 --- a/dvc/repo/plots/__init__.py +++ b/dvc/repo/plots/__init__.py @@ -121,51 +121,58 @@ class Plots: } """ + from dvc.repo.experiments.brancher import switch_repo from dvc.utils.collections import ensure_list targets = ensure_list(targets) targets = [self.repo.dvcfs.from_os_path(target) for target in targets] - for rev in self.repo.brancher(revs=revs): - # .brancher() adds unwanted workspace - if revs is not None and rev not in revs: - continue - rev = rev or "workspace" - - res: Dict = {} - definitions = _collect_definitions( - self.repo, - targets=targets, - revision=rev, - onerror=onerror, - props=props, - ) - if definitions: - res[rev] = {"definitions": definitions} - - data_targets = _get_data_targets(definitions) - - res[rev]["sources"] = self._collect_data_sources( - targets=data_targets, - recursive=recursive, - props=props, + if revs is None: + revs = ["workspace"] + else: + revs = list(revs) + if "workspace" in revs: + # reorder revs to match repo.brancher ordering + revs.remove("workspace") + revs = ["workspace"] + revs + for rev in revs: + with switch_repo(self.repo, rev) as (repo, _): + res: Dict = {} + definitions = _collect_definitions( + repo, + targets=targets, + revision=rev, onerror=onerror, + props=props, ) - yield res + if definitions: + res[rev] = {"definitions": definitions} + + data_targets = _get_data_targets(definitions) + + res[rev]["sources"] = self._collect_data_sources( + repo, + targets=data_targets, + recursive=recursive, + props=props, + onerror=onerror, + ) + yield res @error_handler def _collect_data_sources( self, + repo: "Repo", targets: Optional[List[str]] = None, recursive: bool = False, props: Optional[Dict] = None, onerror: Optional[Callable] = None, ): - fs = self.repo.dvcfs + fs = repo.dvcfs props = props or {} - plots = _collect_plots(self.repo, targets, recursive) + plots = _collect_plots(repo, targets, recursive) res: Dict[str, Any] = {} for fs_path, rev_props in plots.items(): joined_props = {**rev_props, **props}