Skip to content

Commit

Permalink
Add transitive dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
Tejal Desai committed Sep 18, 2014
1 parent c0e23d0 commit dff1beb
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
8 changes: 8 additions & 0 deletions src/python/pants/backend/jvm/ivy_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,14 @@ def add_module(self, module):
for caller in module.callers:
self.deps_by_caller[caller].add(module.ref)

def get_jars_for_ivy_module(self, jar):
ref = IvyModuleRef(jar.org, jar.name, jar.rev)
deps = OrderedSet()
for dep in self.deps_by_caller.get(ref, []):
deps.add(dep)
deps.update(self.get_jars_for_ivy_module(dep))
return deps


class IvyUtils(object):
IVY_TEMPLATE_PACKAGE_NAME = __name__
Expand Down
20 changes: 19 additions & 1 deletion src/python/pants/backend/jvm/tasks/depmap.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,12 @@
import json
import os

from twitter.common.collections import OrderedSet

from pants.backend.core.tasks.console_task import ConsoleTask
from pants.backend.core.targets.dependencies import Dependencies
from pants.backend.core.targets.resources import Resources
from pants.backend.jvm.ivy_utils import IvyUtils
from pants.backend.jvm.targets.jar_dependency import JarDependency
from pants.backend.jvm.targets.scala_library import ScalaLibrary
from pants.base.build_environment import get_buildroot
Expand Down Expand Up @@ -119,6 +122,9 @@ def __init__(self, *args, **kwargs):
self.separator = self.context.options.depmap_separator
self.project_info = self.context.options.depmap_is_project_info
self.format = self.context.options.depmap_is_formatted
self._ivy_utils = IvyUtils(config=self.context.config,
options=self.context.options,
log=self.context.log)

def console_output(self, targets):
if len(self.context.target_roots) == 0:
Expand Down Expand Up @@ -244,6 +250,7 @@ def output_deps(outputted, dep, parent=None):
def project_info_output(self, targets):
targets_map = {}
resource_target_map = {}
ivy_info = self._ivy_utils.parse_xml_report(targets, 'default')

def process_target(current_target):
"""
Expand All @@ -260,19 +267,29 @@ def get_target_type(target):
else:
return Depmap.SourceRootTypes.SOURCE

def get_transitive_jars(jar_lib):
transitive_jars = OrderedSet()
if ivy_info:
for jar in jar_lib.jar_dependencies:
transitive_jars.update(ivy_info.get_jars_for_ivy_module(jar))
return transitive_jars

info = {
'targets': [],
'libraries': [],
'roots': [],
'target_type': get_target_type(current_target)
}

target_libraries = get_transitive_jars(current_target) if current_target.is_jar_library else OrderedSet()
for dep in current_target.dependencies:
if dep.is_java or dep.is_jar_library or dep.is_jvm or dep.is_scala or dep.is_scalac_plugin:
info['targets'].append(self._address(dep.address))
if dep.is_jar_library:
for jar in dep.jar_dependencies:
info['libraries'].append(self._jar_id(jar))
target_libraries.add(jar)
# Add all the jars pulled in by this jar_library
target_libraries.update(get_transitive_jars(dep))
if isinstance(dep, Resources):
info['targets'].append(self._address(dep.address))
resource_target_map[dep] = current_target
Expand All @@ -290,6 +307,7 @@ def get_target_type(target):
'source_root': source_root,
'package_prefix': package_prefix
}, roots)
info['libraries'] = [self._jar_id(lib) for lib in target_libraries]
targets_map[self._address(current_target.address)] = info

for target in targets:
Expand Down

0 comments on commit dff1beb

Please sign in to comment.