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. product_iter = (t for targets in self._scheduler.product_request( HydratedTargets, [DescendantAddresses('')]) for t in targets.dependencies) graph = _HydratedTargetDependentGraph.from_iterable( target_types_from_symbol_table(self._symbol_table), product_iter) if changed_request.include_dependees == 'direct': for address in graph.dependents_of_addresses(changed_addresses): yield address elif changed_request.include_dependees == 'transitive': for address in graph.transitive_dependents_of_addresses( changed_addresses): yield 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 # TODO: For dependee finding, we technically only need to parse all build files to collect target # dependencies. But in order to fully validate the graph and account for the fact that deleted # targets do not show up as changed roots, we use the `TransitiveHydratedTargets` product. # see https://github.com/pantsbuild/pants/issues/382 specs = (DescendantAddresses(''),) adaptor_iter = (t.adaptor for targets in self._scheduler.product_request(TransitiveHydratedTargets, [Specs(specs)]) for t in targets.roots) graph = _DependentGraph.from_iterable(target_types_from_symbol_table(self._symbol_table), adaptor_iter) if changed_request.include_dependees == 'direct': for address in graph.dependents_of_addresses(changed_addresses): yield address elif changed_request.include_dependees == 'transitive': for address in graph.transitive_dependents_of_addresses(changed_addresses): yield 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. product_iter = (t for targets in self._scheduler.product_request(HydratedTargets, [DescendantAddresses('')]) for t in targets.dependencies) graph = _HydratedTargetDependentGraph.from_iterable(target_types_from_symbol_table(self._symbol_table), product_iter) if changed_request.include_dependees == 'direct': for address in graph.dependents_of_addresses(changed_addresses): yield address elif changed_request.include_dependees == 'transitive': for address in graph.transitive_dependents_of_addresses(changed_addresses): yield 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 to collect all structs. But we # don't need to fully hydrate targets (ie, expand their source globs), and so we use # the `HydratedStructs` product. See #4535 for more info. adaptor_iter = (t for targets in self._scheduler.product_request( HydratedStructs, [DescendantAddresses('')]) for t in targets.dependencies) graph = _DependentGraph.from_iterable( target_types_from_symbol_table(self._symbol_table), adaptor_iter) if changed_request.include_dependees == 'direct': for address in graph.dependents_of_addresses(changed_addresses): yield address elif changed_request.include_dependees == 'transitive': for address in graph.transitive_dependents_of_addresses( changed_addresses): yield 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 # TODO: For dependee finding, we technically only need to parse all build files to collect target # dependencies. But in order to fully validate the graph and account for the fact that deleted # targets do not show up as changed roots, we use the `TransitiveHydratedTargets` product. # see https://github.com/pantsbuild/pants/issues/382 specs = (DescendantAddresses(''), ) adaptor_iter = (t.adaptor for targets in self._scheduler.product_request( TransitiveHydratedTargets, [Specs(specs)]) for t in targets.roots) graph = _DependentGraph.from_iterable( target_types_from_symbol_table(self._symbol_table), adaptor_iter) if changed_request.include_dependees == 'direct': for address in graph.dependents_of_addresses(changed_addresses): yield address elif changed_request.include_dependees == 'transitive': for address in graph.transitive_dependents_of_addresses( changed_addresses): yield address