Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 5 additions & 9 deletions src/crawl/crawler.py
Original file line number Diff line number Diff line change
Expand Up @@ -533,12 +533,11 @@ def _crawl(self, package, dep, parent_node, follow_references):
artifactctx = artifactgenctx.ArtifactGenerationContext(
self.workspace, self.pom_template, artifact_def, dep)
self.genctxs.append(artifactctx)
source_deps, ext_deps, all_deps = self._discover_dependencies(artifact_def, dep)
source_deps, all_deps = self._discover_dependencies(artifact_def, dep)
self.target_to_dependencies[target_key] = all_deps
if self.verbose:
logger.debug("Determined deps for artifact: [%s] with target key [%s]" % (artifact_def, target_key))
logger.debug("Source deps: %s" % "\n".join([str(d) for d in source_deps]))
logger.debug("Ext deps: %s" % "\n".join([str(d) for d in ext_deps]))
logger.debug("All deps: %s" % "\n".join([str(d) for d in all_deps]))
node = Node(parent_node, artifact_def, dep)
if follow_references:
Expand All @@ -557,11 +556,10 @@ def _discover_dependencies(self, artifact_def, dep):
"""
Discovers the dependencies of the given artifact (bazel target).

This method returns a tuple of 3 (!) lists of Dependency instances:
(l1, l2, l3)
This method returns a tuple of 2 lists of Dependency instances:
(l1, l2)
l1: all source dependencies (== references to other bazel packages)
l2: all external dependencies (maven jars)
l3: l1 and l2 together, in "discovery order"
l2: l1 + all external dependencies
"""
assert artifact_def is not None
assert dep is not None, "dep is None for artifact %s" % artifact_def
Expand All @@ -579,9 +577,7 @@ def _discover_dependencies(self, artifact_def, dep):
else:
source_dependencies.append(dep)

return (tuple(source_dependencies),
tuple(ext_dependencies),
tuple(all_deps))
return (tuple(source_dependencies), tuple(all_deps))

# this method delegates to bazel query to get the value of a bazel target's
# "deps" and "runtime_deps" attributes
Expand Down
15 changes: 8 additions & 7 deletions src/crawl/dependency.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ class AbstractDependency(object):
version: the maven artifact version of this depdendency.

external: True -> this dependency references a Nexus artifact
(which could be a previously uploaded monorepo artifact)
False -> this is a monorepo source dependency
(which could be a previously uploaded repository artifact)
False -> this is a repository source dependency

references_artifact: True -> this dependency references another maven
artifact
Expand All @@ -42,7 +42,7 @@ class AbstractDependency(object):
scope: the maven scope of the dependency

bazel_package: The bazel package this dependency lives in, None for
artifacts that are not built out of the monorepo (for example Guava).
artifacts that are not built out of the repository (for example Guava).

bazel_target: If bazel_packge is not None, the specific target for this
dependency.
Expand Down Expand Up @@ -158,15 +158,15 @@ def __lt__(self, other):
other_packaging,
other_scope)
else:
# other is a monorepo dep, 3rd party goes last
# other is a repository dep, 3rd party goes last
return False
else:
# self is a monorepo dep
# self is a repository dep
if other.bazel_package is None:
# other is a 3rd party dep, monorepo goes first
# other is a 3rd party dep, repository goes first
return True
else:
# other is also a monorepo dep, compare based on name
# other is also a repository dep, compare based on name
return (self.group_id, self.artifact_id) < (other.group_id, other.artifact_id)

def __str__(self):
Expand Down Expand Up @@ -236,6 +236,7 @@ def _normalize(self, n):
n = n.replace('.', '_')
return n


class MonorepoDependency(AbstractDependency):

def __init__(self, artifact_def, bazel_target):
Expand Down
36 changes: 0 additions & 36 deletions src/crawl/dependencymd.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,36 +27,6 @@ def get_transitive_closure(self, dependency):
key = self._get_key(dependency)
return self._dep_to_transitives.get(key, [])

def get_transitive_exclusions(self, dependency):
"""
Returns the exclusions for the specified dependency, as a list of
dependency.Dependency instances.

These are the exclusions in the Maven/pom.xml sense - these dependencies
are excluded from the transitive closure of depdendencies.

This method is a noop for dependency instances that do not represent
external (from Maven Central/Nexus) Maven dependencies.
"""
key = self._get_key(dependency)
return self._dep_to_exclusions.get(key, [])

def get_ancestors(self, dependency):
"""
For the specified dependency, returns all of its ancestors: a list of
dependency.Dependency instances, all dependencies that have the
specified dependency as a direct or indirect dependency).
"""
ancestors = []
for dep_key, transitives in self._dep_to_transitives.items():
for transitive in transitives:
if transitive.bazel_label_name == dependency.bazel_label_name:
# we don't use dependency.Dependency's defined equality
# because we want to compare within the same maven_install
# rule
ancestors.append(self._dep_key_to_dependency[dep_key])
return ancestors

def get_classifier(self, dependency):
if dependency.classifier is not None:
return dependency.classifier
Expand All @@ -72,12 +42,6 @@ def register_transitives(self, dependency, transitives):
self._dep_to_transitives[key] = transitives
self._dep_key_to_dependency[key] = dependency

def register_exclusions(self, dependency, exclusions):
key = self._get_key(dependency)
assert key is not None, "no key for dependency: [%s]" % dependency
assert key not in self._dep_to_exclusions, "duplicate key [%s] for dependency [%s]" % (key, dependency)
self._dep_to_exclusions[key] = exclusions

def clear(self):
self._dep_to_transitives.clear()
self._dep_to_exclusions.clear()
Expand Down
48 changes: 0 additions & 48 deletions tests/dependencymdtest.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,54 +25,6 @@ def test_register_transitives(self):
self.assertEqual(transitives, dependencymd.get_transitive_closure(dep1))
self.assertEqual(transitives, dependencymd.get_transitive_closure(dep2))

def test_register_exclusions(self):
dependencymd = dependencymdmod.DependencyMetadata(jar_artifact_classifier=None)
dep1 = dependency.new_dep_from_maven_art_str("g1:a1:v1", "maven1")
dep2 = dependency.new_dep_from_maven_art_str("g1:a1:v1", "maven2")
exclusions = (dependency.new_dep_from_maven_art_str("t1:a1:v1", "foo"))

dependencymd.register_exclusions(dep1, exclusions)
dependencymd.register_exclusions(dep2, exclusions)

self.assertEqual(exclusions, dependencymd.get_transitive_exclusions(dep1))
self.assertEqual(exclusions, dependencymd.get_transitive_exclusions(dep2))

def test_get_ancestors(self):
dependencymd = dependencymdmod.DependencyMetadata(jar_artifact_classifier=None)
dep1 = dependency.new_dep_from_maven_art_str("g1:a1:v1", "m")
dep2 = dependency.new_dep_from_maven_art_str("g2:a1:v1", "m")
dep3 = dependency.new_dep_from_maven_art_str("g3:a1:v1", "m")
child_dep1 = dependency.new_dep_from_maven_art_str("t1:a1:v1", "m")
child_dep2 = dependency.new_dep_from_maven_art_str("t2:a1:v1", "m")
child_dep3 = dependency.new_dep_from_maven_art_str("t3:a1:v1", "m")
dep1_transitives = [child_dep1, child_dep2]
dep2_transitives = [child_dep2, child_dep3]

dependencymd.register_transitives(dep1, dep1_transitives)
dependencymd.register_transitives(dep2, dep2_transitives)

self.assertEqual([dep1], dependencymd.get_ancestors(child_dep1))
self.assertEqual([dep1, dep2], dependencymd.get_ancestors(child_dep2))
self.assertEqual([dep2], dependencymd.get_ancestors(child_dep3))
self.assertEqual([], dependencymd.get_ancestors(dep3))

def test_get_ancestors__is_scoped_by_maven_install_rule(self):
dependencymd = dependencymdmod.DependencyMetadata(jar_artifact_classifier=None)
dep1 = dependency.new_dep_from_maven_art_str("g1:a1:v1", "m1")
dep2 = dependency.new_dep_from_maven_art_str("g2:a1:v1", "m2")
child_dep1 = dependency.new_dep_from_maven_art_str("t1:a1:v1", "m1")
child_dep2 = dependency.new_dep_from_maven_art_str("t1:a1:v1", "m2")
child_dep3 = dependency.new_dep_from_maven_art_str("t2:a1:v1", "m2")
dep1_transitives = [child_dep1,]
dep2_transitives = [child_dep2, child_dep3]

dependencymd.register_transitives(dep1, dep1_transitives)
dependencymd.register_transitives(dep2, dep2_transitives)

self.assertEqual([dep1], dependencymd.get_ancestors(child_dep1))
self.assertEqual([dep2], dependencymd.get_ancestors(child_dep2))
self.assertEqual([dep2], dependencymd.get_ancestors(child_dep3))

def test_get_classifier__none(self):
dependencymd = dependencymdmod.DependencyMetadata(jar_artifact_classifier=None)
ext_dep = dependency.new_dep_from_maven_art_str("g1:a1:pack:class:2.0,0", "m1")
Expand Down
Loading