Пример #1
0
    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
Пример #2
0
  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
Пример #3
0
  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
Пример #4
0
    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
Пример #5
0
    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