Exemplo n.º 1
0
    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
Exemplo n.º 2
0
 def test_is_declaring_file(self):
   scheduler = mock.Mock()
   mapper = LegacyAddressMapper(scheduler, None, '')
   self.assertTrue(mapper.is_declaring_file(Address('path', 'name'), 'path/BUILD'))
   self.assertTrue(mapper.is_declaring_file(Address('path', 'name'), 'path/BUILD.suffix'))
   self.assertFalse(mapper.is_declaring_file(Address('path', 'name'), 'path/not_a_build_file'))
   self.assertFalse(mapper.is_declaring_file(Address('path', 'name'), 'differing-path/BUILD'))
Exemplo n.º 3
0
 def create_address_mapper(self, build_root):
     work_dir = os.path.join(build_root, '.pants.d')
     scheduler = EngineInitializer.setup_legacy_graph(
         [],
         work_dir,
         build_file_imports_behavior='allow',
         build_root=build_root,
         native=self._native).scheduler
     return LegacyAddressMapper(scheduler.new_session(), build_root)
Exemplo n.º 4
0
    def test_resolve_without_a_matching_target(self):
        graph_mock = mock.Mock()
        graph_mock.get_target = mock.Mock(return_value=None)
        graph_mock.inject_specs_closure = mock.Mock(
            return_value=[Address('a', 'different')])

        mapper = LegacyAddressMapper(graph_mock, '')
        with self.assertRaises(AddressMapper.BuildFileScanError):
            mapper.resolve(Address('a', 'address'))
Exemplo n.º 5
0
    def test_resolve_with_a_target(self):
        target = LegacyTarget(None, None)
        address = Address('a', 'a')

        graph_mock = mock.Mock()
        graph_mock.get_target = mock.Mock(return_value=target)

        mapper = LegacyAddressMapper(graph_mock, '')
        self.assertEqual((address, target), mapper.resolve(address))
Exemplo n.º 6
0
    def test_scan_specs_returns_ordered_set(self):
        address = Address('a', 'b')

        graph_mock = mock.Mock()
        graph_mock.inject_specs_closure = mock.Mock(
            return_value=[address, address])

        mapper = LegacyAddressMapper(graph_mock, '')
        self.assertEqual(OrderedSet([address]),
                         mapper.scan_specs([SiblingAddresses('any')]))
Exemplo n.º 7
0
    def test_addresses_in_spec_path_wraps_error_in_buildfile_scan_error(self):
        graph_mock = mock.Mock()
        graph_mock.inject_specs_closure = mock.Mock(
            side_effect=LegacyBuildGraph.InvalidCommandLineSpecError(
                'some msg'))

        mapper = LegacyAddressMapper(graph_mock, '')
        with self.assertRaises(AddressMapper.BuildFileScanError) as cm:
            mapper.addresses_in_spec_path('some/path')
        self.assertEqual('some msg', str(cm.exception))
Exemplo n.º 8
0
    def test_scan_addresses_with_root_specified(self):
        address = Address('a', 'b')

        graph_mock = mock.Mock()
        graph_mock.inject_specs_closure = mock.Mock(return_value=[address])

        mapper = LegacyAddressMapper(graph_mock, '/some/build/root')
        absolute_root_path = '/some/build/root/a'
        mapper.scan_addresses(absolute_root_path)

        graph_mock.inject_specs_closure.assert_called_with(
            [DescendantAddresses('a')])
Exemplo n.º 9
0
 def test_is_declaring_file(self):
   scheduler = mock.Mock()
   mapper = LegacyAddressMapper(scheduler, '')
   self.assertTrue(mapper.is_declaring_file(Address('path', 'name'), 'path/BUILD'))
   self.assertTrue(mapper.is_declaring_file(Address('path', 'name'), 'path/BUILD.suffix'))
   self.assertFalse(mapper.is_declaring_file(Address('path', 'name'), 'path/not_a_build_file'))
   self.assertFalse(mapper.is_declaring_file(Address('path', 'name'), 'differing-path/BUILD'))
   self.assertFalse(mapper.is_declaring_file(
     BuildFileAddress(target_name='name', rel_path='path/BUILD.new'),
     'path/BUILD'))
   self.assertTrue(mapper.is_declaring_file(
     BuildFileAddress(target_name='name', rel_path='path/BUILD'),
     'path/BUILD'))
Exemplo n.º 10
0
    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
Exemplo n.º 11
0
  def test_other_throw_is_fail(self):
    # scan_addresses() should raise an error if the scheduler returns an error it can't ignore.
    class ThrowReturningScheduler(object):
      def execution_request(self, *args):
        pass

      def execute(self, *args):
        return ExecutionResult(None, [(('some-thing', None), Throw(Exception('just an exception')))])

    with temporary_dir() as build_root:
      mapper = LegacyAddressMapper(ThrowReturningScheduler(), build_root)

      with self.assertRaises(LegacyAddressMapper.BuildFileScanError) as cm:
        mapper.scan_addresses(os.path.join(build_root, 'foo'))
      self.assertIn('just an exception', str(cm.exception))
Exemplo n.º 12
0
    def test_other_throw_is_fail(self) -> None:
        # scan_addresses() should raise an error if the scheduler returns an error it can't ignore.
        class ThrowReturningScheduler:
            def execution_request(self, *args):
                pass

            def execute(self, *args):
                return [], [(("some-thing", None), Throw(Exception("just an exception")))]

        with temporary_dir() as build_root:
            mapper = LegacyAddressMapper(ThrowReturningScheduler(), build_root)

            with self.assertRaises(LegacyAddressMapper.BuildFileScanError) as cm:
                mapper.scan_addresses(os.path.join(build_root, "foo"))
            self.assertIn("just an exception", str(cm.exception))
Exemplo n.º 13
0
  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
Exemplo n.º 14
0
 def test_is_declaring_file(self) -> None:
     scheduler = unittest.mock.Mock()
     mapper = LegacyAddressMapper(scheduler, "")
     self.assertTrue(mapper.is_declaring_file(Address("path", "name"), "path/BUILD"))
     self.assertTrue(mapper.is_declaring_file(Address("path", "name"), "path/BUILD.suffix"))
     self.assertFalse(mapper.is_declaring_file(Address("path", "name"), "path/not_a_build_file"))
     self.assertFalse(mapper.is_declaring_file(Address("path", "name"), "differing-path/BUILD"))
     self.assertFalse(
         mapper.is_declaring_file(
             BuildFileAddress(target_name="name", rel_path="path/BUILD.new"), "path/BUILD"
         )
     )
     self.assertTrue(
         mapper.is_declaring_file(
             BuildFileAddress(target_name="name", rel_path="path/BUILD"), "path/BUILD"
         )
     )
Exemplo n.º 15
0
 def create_address_mapper(self, build_root):
   scheduler, engine, _, _ = EngineInitializer.setup_legacy_graph([], build_root=build_root, native=self._native)
   return LegacyAddressMapper(scheduler, engine, build_root)
Exemplo n.º 16
0
 def create_address_mapper(self, build_root):
     work_dir = os.path.join(build_root, '.pants.d')
     scheduler, engine, _, _ = EngineInitializer.setup_legacy_graph(
         [], work_dir, build_root=build_root, native=self._native)
     return LegacyAddressMapper(scheduler, engine, build_root)