def create_build_graph(self, target_roots, build_root=None, include_trace_on_error=True): """Construct and return a `BuildGraph` given a set of input specs. :param TargetRoots target_roots: The targets root of the request. :param string build_root: The build root. :returns: A tuple of (BuildGraph, AddressMapper). """ logger.debug('target_roots are: %r', target_roots) graph = LegacyBuildGraph.create( self.scheduler, self.engine, self.symbol_table_cls, include_trace_on_error=include_trace_on_error) logger.debug('build_graph is: %s', graph) with self.scheduler.locked(): # Ensure the entire generator is unrolled. for _ in graph.inject_specs_closure(target_roots.as_specs()): pass logger.debug('engine cache stats: %s', self.engine.cache_stats()) address_mapper = LegacyAddressMapper(self.scheduler, self.engine, build_root or get_buildroot()) logger.debug('address_mapper is: %s', address_mapper) return graph, address_mapper
def iter_changed_target_addresses(self, changed_request): """Given a `ChangedRequest`, compute and yield all affected target addresses.""" changed_files = self.changed_files(changed_request.changes_since, changed_request.diffspec) logger.debug('changed files: %s', changed_files) if not changed_files: return changed_addresses = set( address for address in self._mapper.iter_target_addresses_for_sources( changed_files)) for address in changed_addresses: yield address if changed_request.include_dependees not in ('direct', 'transitive'): return # For dependee finding, we need to parse all build files. graph = LegacyBuildGraph.create(self._scheduler, self._engine, self._symbol_table_cls) for _ in graph.inject_specs_closure([DescendantAddresses('')]): pass if changed_request.include_dependees == 'direct': emitted = set() for address in changed_addresses: for dependee in graph.dependents_of(address): if dependee not in emitted: emitted.add(dependee) yield dependee elif changed_request.include_dependees == 'transitive': for target in graph.transitive_dependees_of_addresses( changed_addresses): yield target.address
def iter_changed_target_addresses(self, changed_request): """Given a `ChangedRequest`, compute and yield all affected target addresses.""" changed_files = self.changed_files(changed_request.changes_since, changed_request.diffspec) logger.debug('changed files: %s', changed_files) if not changed_files: return changed_addresses = set(address for address in self._mapper.iter_target_addresses_for_sources(changed_files)) for address in changed_addresses: yield address if changed_request.include_dependees not in ('direct', 'transitive'): return # For dependee finding, we need to parse all build files. graph = LegacyBuildGraph.create(self._scheduler, self._symbol_table_cls) for _ in graph.inject_specs_closure([DescendantAddresses('')]): pass if changed_request.include_dependees == 'direct': emitted = set() for address in changed_addresses: for dependee in graph.dependents_of(address): if dependee not in emitted: emitted.add(dependee) yield dependee elif changed_request.include_dependees == 'transitive': for target in graph.transitive_dependees_of_addresses(changed_addresses): yield target.address
def create_build_graph( self, specs: Specs, build_root: Optional[str] = None, ) -> Tuple[LegacyBuildGraph, LegacyAddressMapper]: """Construct and return a `BuildGraph` given a set of input specs.""" logger.debug("specs are: %r", specs) graph = LegacyBuildGraph.create(self.scheduler_session, self.build_file_aliases) logger.debug("build_graph is: %s", graph) # Ensure the entire generator is unrolled. for _ in graph.inject_roots_closure(specs.address_specs): pass address_mapper = LegacyAddressMapper(self.scheduler_session, build_root or get_buildroot()) logger.debug("address_mapper is: %s", address_mapper) return graph, address_mapper
def create_build_graph(self, target_roots, build_root=None): """Construct and return a `BuildGraph` given a set of input specs. :param TargetRoots target_roots: The targets root of the request. :param string build_root: The build root. :returns: A tuple of (BuildGraph, AddressMapper). """ logger.debug('target_roots are: %r', target_roots) graph = LegacyBuildGraph.create(self.scheduler_session, self.build_file_aliases) logger.debug('build_graph is: %s', graph) # Ensure the entire generator is unrolled. for _ in graph.inject_roots_closure(target_roots): pass address_mapper = LegacyAddressMapper(self.scheduler_session, build_root or get_buildroot()) logger.debug('address_mapper is: %s', address_mapper) return graph, address_mapper
def create_build_graph(self, target_roots, build_root=None): """Construct and return a `BuildGraph` given a set of input specs. :param TargetRoots target_roots: The targets root of the request. :param string build_root: The build root. :returns: A tuple of (BuildGraph, AddressMapper). """ logger.debug('target_roots are: %r', target_roots) graph = LegacyBuildGraph.create(self.scheduler, self.symbol_table) logger.debug('build_graph is: %s', graph) # Ensure the entire generator is unrolled. for _ in graph.inject_roots_closure(target_roots): pass address_mapper = LegacyAddressMapper(self.scheduler, build_root or get_buildroot()) logger.debug('address_mapper is: %s', address_mapper) return graph, address_mapper