Skip to content

Commit a049954

Browse files
authored
Fix dependency exclusion for transitives (#214)
1 parent 0655e51 commit a049954

File tree

6 files changed

+31
-22
lines changed

6 files changed

+31
-22
lines changed

misc/extdeps_pomgen.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ def _parse_arguments(args):
5252
class ThirdPartyDepsPomGen(pom.DynamicPomGen):
5353

5454
def __init__(self, workspace, artifact_def, dependencies, pom_template):
55-
super(ThirdPartyDepsPomGen, self).__init__(workspace, artifact_def,
56-
pom_template=pom_template)
55+
super(ThirdPartyDepsPomGen, self).__init__(
56+
workspace, artifact_def, pom_template=pom_template, excluded_deps=[])
5757
self.dependencies = dependencies
5858

5959

src/crawl/artifactgenctx.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class ArtifactGenerationContext:
66
Information about a single artifact that was crawled.
77
"""
88

9-
def __init__(self, workspace, pom_template, artifact_def, label):
9+
def __init__(self, workspace, pom_template, artifact_def, label, excluded_deps):
1010
self._artifact_def = artifact_def
1111
self._label = label
1212

@@ -15,7 +15,7 @@ def __init__(self, workspace, pom_template, artifact_def, label):
1515
self._library_transitive_closure = []
1616

1717
self._generator = crawl.pom.get_pom_generator(
18-
workspace, pom_template, artifact_def)
18+
workspace, pom_template, artifact_def, excluded_deps)
1919

2020
@property
2121
def artifact_def(self):

src/crawl/crawler.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -548,8 +548,10 @@ def _crawl(self, label, parent_node, follow_references):
548548
self.package_to_artifact[label.package_path] = artifact_def
549549
self.library_to_artifact[artifact_def.library_path].append(artifact_def)
550550

551+
_, excluded_deps = self._load_custom_output_dependencies(artifact_def)
551552
artifactctx = artifactgenctx.ArtifactGenerationContext(
552-
self.workspace, self.pom_template, artifact_def, label)
553+
self.workspace, self.pom_template, artifact_def, label,
554+
excluded_deps)
553555
self.genctxs.append(artifactctx)
554556
labels = self._discover_dependencies(artifact_def, label)
555557
# TODO abstract this, as it assumes maven_install

src/crawl/pom.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class PomContentType:
3434
MASKED_VERSION = "***"
3535

3636

37-
def get_pom_generator(workspace, pom_template, artifact_def):
37+
def get_pom_generator(workspace, pom_template, artifact_def, excluded_deps):
3838
"""
3939
Returns a pom.xml generator (AbstractPomGen implementation) for the
4040
specified artifact_def.
@@ -52,9 +52,9 @@ def get_pom_generator(workspace, pom_template, artifact_def):
5252
also_generate_dep_man_pom = artifact_def.gen_dependency_management_pom
5353
if also_generate_dep_man_pom:
5454
return PomWithCompanionDependencyManagementPomGen(
55-
workspace, artifact_def, pom_template)
55+
workspace, artifact_def, pom_template, excluded_deps)
5656
else:
57-
return DynamicPomGen(workspace, artifact_def, pom_template)
57+
return DynamicPomGen(workspace, artifact_def, pom_template, excluded_deps)
5858
elif mode is pomgenmode.TEMPLATE:
5959
return TemplatePomGen(workspace, artifact_def)
6060
elif mode is pomgenmode.SKIP:
@@ -471,10 +471,11 @@ class DynamicPomGen(AbstractPomGen):
471471
#{group_id}
472472
#{version}
473473
"""
474-
def __init__(self, workspace, artifact_def, pom_template):
474+
def __init__(self, workspace, artifact_def, pom_template, excluded_deps):
475475
super(DynamicPomGen, self).__init__(workspace, artifact_def)
476476
self.pom_content = workspace.pom_content
477477
self.pom_template = pom_template
478+
self.excluded_deps = excluded_deps
478479

479480
def gen(self, pomcontenttype):
480481
content = self.pom_template.replace("#{group_id}", self._artifact_def.group_id)
@@ -538,8 +539,14 @@ def _get_transitive_deps(self, dependencies):
538539
# <dependencies> section, we don't need to include it again
539540
pass
540541
else:
541-
transitives.append(transitive)
542-
transitives_set.add(transitive)
542+
if transitive not in self.excluded_deps:
543+
# TODO stoens: this loop should really use
544+
# self.dependencies_library_transitive_closure instead
545+
# of dependencies (the directs)
546+
# the exclusions have been applied to that former list
547+
# already - review if that is possible
548+
transitives.append(transitive)
549+
transitives_set.add(transitive)
543550

544551
return transitives
545552

@@ -606,9 +613,9 @@ class PomWithCompanionDependencyManagementPomGen(AbstractPomGen):
606613
Composite PomGen implementation with a companion PomGen the generates a
607614
DependencyManagement pom.
608615
"""
609-
def __init__(self, workspace, artifact_def, pom_template):
616+
def __init__(self, workspace, artifact_def, pom_template, excluded_deps):
610617
super(PomWithCompanionDependencyManagementPomGen, self).__init__(workspace, artifact_def)
611-
self.pomgen = DynamicPomGen(workspace, artifact_def, pom_template)
618+
self.pomgen = DynamicPomGen(workspace, artifact_def, pom_template, excluded_deps)
612619
self.depmanpomgen = DependencyManagementPomGen(workspace, artifact_def, pom_template)
613620

614621
def register_dependencies(self, dependencies):

tests/crawlerunittest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -576,7 +576,7 @@ def test_register_dependencies(self):
576576
library_path=library_path)
577577
ws = self._get_workspace()
578578
ctx = artifactgenctx.ArtifactGenerationContext(
579-
ws, pom_template, node1.artifact_def, node1.label)
579+
ws, pom_template, node1.artifact_def, node1.label, excluded_deps=[])
580580
strategy = pomgenerationstrategy.PomGenerationStrategy(ws, pom_template)
581581
crawler = crawlerm.Crawler(ws, strategy, pom_template)
582582
crawler.library_to_nodes[library_path].append(node1)
@@ -608,7 +608,7 @@ def test_register_dependencies_with_exclusions(self):
608608
library_path=library_path)
609609
ws = self._get_workspace()
610610
ctx = artifactgenctx.ArtifactGenerationContext(
611-
ws, pom_template, node1.artifact_def, node1.label)
611+
ws, pom_template, node1.artifact_def, node1.label, excluded_deps=[])
612612
strategy = pomgenerationstrategy.PomGenerationStrategy(ws, pom_template)
613613
crawler = crawlerm.Crawler(ws, strategy, pom_template)
614614
crawler.library_to_nodes[library_path].append(node1)

tests/pomtest.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def test_dynamic_pom__sanity(self):
7070
label_to_overridden_fq_label={})
7171
artifact_def = buildpom.MavenArtifactDef("g1", "a2", "1.2.3")
7272
artifact_def = buildpom._augment_art_def_values(artifact_def, None, "pack1", None, None, pomgenmode.DYNAMIC)
73-
pomgen = pom.DynamicPomGen(ws, artifact_def, TEST_POM_TEMPLATE)
73+
pomgen = pom.DynamicPomGen(ws, artifact_def, TEST_POM_TEMPLATE, [])
7474

7575
deps = [self.guava_dep,
7676
self.logback_dep,
@@ -201,7 +201,7 @@ def test_dynamic_pom__gen_description(self):
201201
</project>
202202
"""
203203
artifact_def = buildpom.MavenArtifactDef("g1", "a2", "1.2.3", bazel_target="t1")
204-
pomgen = pom.DynamicPomGen(ws, artifact_def, pom_template)
204+
pomgen = pom.DynamicPomGen(ws, artifact_def, pom_template, [])
205205
generated_pom = pomgen.gen(pom.PomContentType.RELEASE)
206206
self.assertEqual(exepcted_pom, generated_pom)
207207

@@ -227,7 +227,7 @@ def test_dynamic_pom__remove_description_token_if_no_value(self):
227227
</project>
228228
"""
229229
artifact_def = buildpom.MavenArtifactDef("g1", "a2", "1.2.3", bazel_target="t1")
230-
pomgen = pom.DynamicPomGen(ws, artifact_def, pom_template)
230+
pomgen = pom.DynamicPomGen(ws, artifact_def, pom_template, [])
231231

232232
generated_pom = pomgen.gen(pom.PomContentType.RELEASE)
233233

@@ -253,7 +253,7 @@ def test_dyamic_pom__no_explicit_transitives(self):
253253
pomcontent.NOOP,
254254
depmd,
255255
label_to_overridden_fq_label={})
256-
pomgen = pom.DynamicPomGen(ws, artifact_def, TEST_POM_TEMPLATE)
256+
pomgen = pom.DynamicPomGen(ws, artifact_def, TEST_POM_TEMPLATE, [])
257257
pomgen.register_dependencies([self.guava_dep])
258258

259259
generated_pom = pomgen.gen(pom.PomContentType.RELEASE)
@@ -279,7 +279,7 @@ def test_dynamic_pom__classifier(self):
279279
label_to_overridden_fq_label={})
280280
root_artifact_def = buildpom.MavenArtifactDef("g1", "a2", "1.2.3")
281281
root_artifact_def = buildpom._augment_art_def_values(root_artifact_def, None, "pack1", None, None, pomgenmode.DYNAMIC)
282-
pomgen = pom.DynamicPomGen(ws, root_artifact_def, TEST_POM_TEMPLATE)
282+
pomgen = pom.DynamicPomGen(ws, root_artifact_def, TEST_POM_TEMPLATE, [])
283283
dep_art_def = buildpom.MavenArtifactDef("class-group", "class-art", "1", bazel_target="g1")
284284
dep = dependency.new_dep_from_maven_artifact_def(dep_art_def)
285285

@@ -306,7 +306,7 @@ def test_dynamic_pom__do_not_include_deps(self):
306306
label_to_overridden_fq_label={})
307307
artifact_def = buildpom.MavenArtifactDef(
308308
"g1", "a2", "1.2.3", bazel_target="t1", include_deps=False)
309-
pomgen = pom.DynamicPomGen(ws, artifact_def, "")
309+
pomgen = pom.DynamicPomGen(ws, artifact_def, "", [])
310310

311311
generated_pom = pomgen.gen(pom.PomContentType.RELEASE)
312312

@@ -325,7 +325,7 @@ def test_dynamic_pom_genmode__goldfile(self):
325325
label_to_overridden_fq_label={})
326326
artifact_def = buildpom.MavenArtifactDef("g1", "a2", "1.2.3", bazel_target="t1")
327327
artifact_def = buildpom._augment_art_def_values(artifact_def, None, "pack1", None, None, pomgenmode.DYNAMIC)
328-
pomgen = pom.DynamicPomGen(ws, artifact_def, TEST_POM_TEMPLATE)
328+
pomgen = pom.DynamicPomGen(ws, artifact_def, TEST_POM_TEMPLATE, [])
329329
deps = [self.guava_dep, self.aop_dep]
330330
pomgen.register_dependencies(deps)
331331

0 commit comments

Comments
 (0)