示例#1
0
文件: ide_gen.py 项目: neven7/pants
 def _collect_ancestor_build_files(cls, project_tree, dir_relpath, build_ignore_patterns):
   for build_file in BuildFile.get_build_files_family(project_tree, dir_relpath, build_ignore_patterns):
     yield build_file
   while not cls._is_root_relpath(dir_relpath):
     dir_relpath = os.path.dirname(dir_relpath)
     for build_file in BuildFile.get_build_files_family(project_tree, dir_relpath, build_ignore_patterns):
       yield build_file
示例#2
0
 def _collect_ancestor_build_files(cls, project_tree, dir_relpath, build_ignore_patterns):
   for build_file in BuildFile.get_build_files_family(project_tree, dir_relpath, build_ignore_patterns):
     yield build_file
   while not cls._is_root_relpath(dir_relpath):
     dir_relpath = os.path.dirname(dir_relpath)
     for build_file in BuildFile.get_build_files_family(project_tree, dir_relpath, build_ignore_patterns):
       yield build_file
示例#3
0
    def to_url(m):
        if m.group(1):
            return m.group(0)  # It's an http(s) url.
        path = m.group(0)

        if path.startswith("/"):
            path = os.path.relpath(path, buildroot)
        elif path.startswith(".."):
            # The path is not located inside the buildroot, so it's definitely not a BUILD file.
            return None
        else:
            # The path is located in the buildroot: see if it's a reference to a target in a BUILD file.
            parts = path.split(":")
            if len(parts) == 2:
                putative_dir = parts[0]
            else:
                putative_dir = path
            if os.path.isdir(os.path.join(buildroot, putative_dir)):
                build_files = list(
                    BuildFile.get_build_files_family(
                        FileSystemProjectTree(buildroot), putative_dir))
                if build_files:
                    path = build_files[0].relpath
                else:
                    return None

        if os.path.exists(os.path.join(buildroot, path)):
            # The reporting server serves file content at /browse/<path_from_buildroot>.
            return "/browse/{}".format(path)
        else:
            return None
示例#4
0
  def test_sibling_build_files_duplicates(self):
    # This workspace is malformed, you can't shadow a name in a sibling BUILD file
    self.add_to_build_file('BUILD', dedent(
      """
      fake(name="base",
           dependencies=[
             ':foo',
           ])
      """))

    self.add_to_build_file('BUILD.foo', dedent(
      """
      fake(name="foo",
           dependencies=[
             ':bat',
           ])
      """))

    self.add_to_build_file('./BUILD.bar', dedent(
      """
      fake(name="base")
      """))

    with self.assertRaises(BuildFileParser.SiblingConflictException):
      self.build_file_parser.address_map_from_build_files(
        BuildFile.get_build_files_family(FileSystemProjectTree(self.build_root), '.'))
示例#5
0
  def test_sibling_build_files(self):
    self.add_to_build_file('BUILD', dedent(
      """
      fake(name="base",
           dependencies=[
             ':foo',
           ])
      """))

    self.add_to_build_file('BUILD.foo', dedent(
      """
      fake(name="foo",
           dependencies=[
             ':bat',
           ])
      """))

    self.add_to_build_file('./BUILD.bar', dedent(
      """
      fake(name="bat")
      """))

    bar_build_file = self.create_buildfile('BUILD.bar')
    base_build_file = self.create_buildfile('BUILD')
    foo_build_file = self.create_buildfile('BUILD.foo')

    address_map = self.build_file_parser.address_map_from_build_files(
      BuildFile.get_build_files_family(FileSystemProjectTree(self.build_root), "."))
    addresses = address_map.keys()
    self.assertEqual({bar_build_file.relpath, base_build_file.relpath, foo_build_file.relpath},
                     {address.rel_path for address in addresses})
    self.assertEqual({'//:base', '//:foo', '//:bat'},
                     {address.spec for address in addresses})
示例#6
0
  def to_url(m):
    if m.group(1):
      return m.group(0)  # It's an http(s) url.
    path = m.group(0)

    if path.startswith('/'):
      path = os.path.relpath(path, buildroot)
    elif path.startswith('..'):
      # The path is not located inside the buildroot, so it's definitely not a BUILD file.
      return None
    else:
      # The path is located in the buildroot: see if it's a reference to a target in a BUILD file.
      parts = path.split(':')
      if len(parts) == 2:
        putative_dir = parts[0]
      else:
        putative_dir = path
      if os.path.isdir(os.path.join(buildroot, putative_dir)):
        build_files = list(BuildFile.get_build_files_family(
          FileSystemProjectTree(buildroot),
          putative_dir))
        if build_files:
          path = build_files[0].relpath
        else:
          return None

    if os.path.exists(os.path.join(buildroot, path)):
      # The reporting server serves file content at /browse/<path_from_buildroot>.
      return '/browse/{}'.format(path)
    else:
      return None
  def test_sibling_build_files_duplicates(self):
    # This workspace is malformed, you can't shadow a name in a sibling BUILD file
    self.add_to_build_file('BUILD', dedent(
      """
      fake(name="base",
           dependencies=[
             ':foo',
           ])
      """))

    self.add_to_build_file('BUILD.foo', dedent(
      """
      fake(name="foo",
           dependencies=[
             ':bat',
           ])
      """))

    self.add_to_build_file('./BUILD.bar', dedent(
      """
      fake(name="base")
      """))

    with self.assertRaises(BuildFileParser.SiblingConflictException):
      self.build_file_parser.address_map_from_build_files(
        BuildFile.get_build_files_family(FileSystemProjectTree(self.build_root), '.'))
  def test_sibling_build_files(self):
    self.add_to_build_file('BUILD', dedent(
      """
      fake(name="base",
           dependencies=[
             ':foo',
           ])
      """))

    self.add_to_build_file('BUILD.foo', dedent(
      """
      fake(name="foo",
           dependencies=[
             ':bat',
           ])
      """))

    self.add_to_build_file('./BUILD.bar', dedent(
      """
      fake(name="bat")
      """))

    bar_build_file = self.create_buildfile('BUILD.bar')
    base_build_file = self.create_buildfile('BUILD')
    foo_build_file = self.create_buildfile('BUILD.foo')

    address_map = self.build_file_parser.address_map_from_build_files(
      BuildFile.get_build_files_family(FileSystemProjectTree(self.build_root), "."))
    addresses = address_map.keys()
    self.assertEqual({bar_build_file.relpath, base_build_file.relpath, foo_build_file.relpath},
                     set([address.rel_path for address in addresses]))
    self.assertEqual({'//:base', '//:foo', '//:bat'},
                     set([address.spec for address in addresses]))
 def get_build_files_family(self, relpath, build_ignore_patterns=None):
     return BuildFile.get_build_files_family(
         self._project_tree,
         relpath,
         build_ignore_patterns=self._create_ignore_spec(
             build_ignore_patterns),
     )
    def _address_map_from_spec_path(self, spec_path):
        """Returns a resolution map of all addresses in a "directory" in the virtual address space.

    :returns {Address: (Address, <resolved Object>)}:
    """
        if spec_path not in self._spec_path_to_address_map_map:
            try:
                build_files = list(
                    BuildFile.get_build_files_family(
                        self._project_tree, spec_path,
                        self._build_ignore_patterns))
                if not build_files:
                    raise self.BuildFileScanError(
                        "{spec_path} does not contain any BUILD files.".format(
                            spec_path=os.path.join(self.root_dir, spec_path)))
                mapping = self._build_file_parser.address_map_from_build_files(
                    build_files)
            except BuildFileParser.BuildFileParserError as e:
                raise AddressLookupError(
                    "{message}\n Loading addresses from '{spec_path}' failed.".
                    format(message=e, spec_path=spec_path))

            address_map = {
                address: (address, addressed)
                for address, addressed in mapping.items()
            }
            self._spec_path_to_address_map_map[spec_path] = address_map
        return self._spec_path_to_address_map_map[spec_path]
示例#11
0
文件: linkify.py 项目: hardiku/pants
    def to_url(m):
        if m.group(1):
            return m.group(0)  # It's an http(s) url.
        path = m.group(0)

        if path.startswith('/'):
            path = os.path.relpath(path, buildroot)
        else:
            # See if it's a reference to a target in a BUILD file.
            parts = path.split(':')
            if len(parts) == 2:
                putative_dir = parts[0]
            else:
                putative_dir = path
            if os.path.isdir(os.path.join(buildroot, putative_dir)):
                build_files = list(
                    BuildFile.get_build_files_family(
                        FileSystemProjectTree(buildroot), putative_dir))
                if build_files:
                    path = build_files[0].relpath
                else:
                    return None

        if os.path.exists(os.path.join(buildroot, path)):
            # The reporting server serves file content at /browse/<path_from_buildroot>.
            return '/browse/{}'.format(path)
        else:
            return None
示例#12
0
    def test_sibling_build_files(self):
        self.add_to_build_file(
            "BUILD",
            dedent(
                """
      fake(name="base",
           dependencies=[
             ':foo',
           ])
      """
            ),
        )

        self.add_to_build_file(
            "BUILD.foo",
            dedent(
                """
      fake(name="foo",
           dependencies=[
             ':bat',
           ])
      """
            ),
        )

        self.add_to_build_file(
            "./BUILD.bar",
            dedent(
                """
      fake(name="bat")
      """
            ),
        )

        bar_build_file = self.create_buildfile("BUILD.bar")
        base_build_file = self.create_buildfile("BUILD")
        foo_build_file = self.create_buildfile("BUILD.foo")

        address_map = self.build_file_parser.address_map_from_build_files(
            BuildFile.get_build_files_family(FileSystemProjectTree(self.build_root), ".")
        )
        addresses = address_map.keys()
        self.assertEqual(
            {bar_build_file, base_build_file, foo_build_file}, set([address.build_file for address in addresses])
        )
        self.assertEqual({"//:base", "//:foo", "//:bat"}, set([address.spec for address in addresses]))
  def _address_map_from_spec_path(self, spec_path):
    """Returns a resolution map of all addresses in a "directory" in the virtual address space.
    :returns {Address: (Address, <resolved Object>)}:
    """
    if spec_path not in self._spec_path_to_address_map_map:
      try:
        build_files = list(BuildFile.get_build_files_family(self._project_tree, spec_path,
                                                            self._build_ignore_patterns))
        if not build_files:
          raise self.BuildFileScanError("{spec_path} does not contain any BUILD files."
                                        .format(spec_path=os.path.join(self.root_dir, spec_path)))
        mapping = self._build_file_parser.address_map_from_build_files(build_files)
      except BuildFileParser.BuildFileParserError as e:
        raise AddressLookupError("{message}\n Loading addresses from '{spec_path}' failed."
                                 .format(message=e, spec_path=spec_path))

      address_map = {address: (address, addressed) for address, addressed in mapping.items()}
      self._spec_path_to_address_map_map[spec_path] = address_map
    return self._spec_path_to_address_map_map[spec_path]
示例#14
0
 def get_build_files_family(self, relpath, build_ignore_patterns=None):
   return BuildFile.get_build_files_family(self._project_tree, relpath,
                                           build_ignore_patterns=self._create_ignore_spec(build_ignore_patterns))
示例#15
0
 def get_build_files_family(self, relpath):
   return BuildFile.get_build_files_family(self._project_tree, relpath)