Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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]