def _collect_stages(self): from dvc.dvcfile import Dvcfile, is_valid_filename stages = [] outs = set() for root, dirs, files in self.tree.walk(self.root_dir): for file_name in filter(is_valid_filename, files): path = os.path.join(root, file_name) stage_loader = Dvcfile(self, path).stages stages.extend(stage_loader.values()) outs.update(out.fspath for stage in stages for out in (out for out in stage.outs if out.scheme == "local")) dirs[:] = [d for d in dirs if os.path.join(root, d) not in outs] return stages
def collect_granular(self, target, *args, **kwargs): from ..dvcfile import Dvcfile, is_valid_filename if not target: return [(stage, None) for stage in self.stages] file, name = parse_target(target) if is_valid_filename(file) and not kwargs.get("with_deps"): # Optimization: do not collect the graph for a specific .dvc target stages = Dvcfile(self, file).stages.filter(name) return [(stage, None) for stage in stages.values()] try: (out, ) = self.find_outs_by_path(file, strict=False) filter_info = PathInfo(os.path.abspath(file)) return [(out.stage, filter_info)] except OutputNotFoundError: stages = self.collect(target, *args, **kwargs) return [(stage, None) for stage in stages]