Skip to content
Open
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
7 changes: 7 additions & 0 deletions private/dependency_tree_parser.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,13 @@ copy_file(
get_classifier(dep) in PLATFORM_CLASSIFIER:
continue

# If the artifact is in exclusions, exclude it from deps here. It will be listed
# in maven_exclusion as well.
if simple_coord in exclusions and \
stripped_dep in exclusions[simple_coord]:
print("skipping %s in %s".format(stripped_dep, simple_coord))
continue

# Coursier returns cyclic dependencies sometimes. Handle it here.
# See https://github.com/bazelbuild/rules_jvm_external/issues/172
if dep_target_label != target_label:
Expand Down
74 changes: 67 additions & 7 deletions tests/unit/jvm_import/jvm_import_test.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,6 @@ TagsInfo = provider(
},
)

PackageMetadataInfoCollectionInfo = provider(
doc = "Provider to propagate jvm_import's applicable_licenses for testing purposes",
fields = {
"info": "A PackageMetadataInfo provider from jvm_import's applicable_licenses for testing purposes",
},
)

def _tags_propagator_impl(target, ctx):
tags = getattr(ctx.rule.attr, "tags")
return TagsInfo(tags = tags)
Expand All @@ -46,6 +39,13 @@ tags_propagator = aspect(
implementation = _tags_propagator_impl,
)

PackageMetadataInfoCollectionInfo = provider(
doc = "Provider to propagate jvm_import's applicable_licenses for testing purposes",
fields = {
"info": "A PackageMetadataInfo provider from jvm_import's applicable_licenses for testing purposes",
},
)

def _package_metadata_info_propagator_impl(target, ctx):
direct = getattr(ctx.rule.attr, "package_metadata", None)
if not direct:
Expand All @@ -70,6 +70,26 @@ package_metadata_info_propagator = aspect(
implementation = _package_metadata_info_propagator_impl,
)

DepsInfo = provider(
doc = "Provider to propagate jvm_import's deps for testing purposes",
fields = {
"deps": "deps to be propagated for jvm_import's tests",
},
)

def _deps_propagator_impl(target, ctx):
raw_deps = getattr(ctx.rule.attr, "deps")
deps = []
for dep in raw_deps:
deps.append(str(dep.label))
return DepsInfo(deps = deps)

deps_propagator = aspect(
doc = "Aspect that propagates deps to help with testing jvm_import",
attr_aspects = ["deps"],
implementation = _deps_propagator_impl,
)

def _does_jvm_import_have_tags_impl(ctx):
env = analysistest.begin(ctx)

Expand All @@ -94,6 +114,40 @@ does_jvm_import_have_tags_test = analysistest.make(
},
)

def _does_jvm_import_exclude_exclusions_in_deps_test_impl(ctx):
env = analysistest.begin(ctx)

expected_tags = [
"maven_coordinates=com.google.guava:guava:31.1-jre",
"maven_exclusion=com.google.errorprone:error_prone_annotations",
"maven_repository=https://repo1.maven.org/maven2",
"maven_sha256=a42edc9cab792e39fe39bb94f3fca655ed157ff87a8af78e1d6ba5b07c4a00ab",
"maven_url=https://repo1.maven.org/maven2/com/google/guava/guava/31.1-jre/guava-31.1-jre.jar",
]

asserts.equals(env, expected_tags, ctx.attr.src[TagsInfo].tags)

expected_deps = [
"@@_main~maven~pom_exclusion_testing_coursier//:com_google_code_findbugs_jsr305",
"@@_main~maven~pom_exclusion_testing_coursier//:com_google_guava_failureaccess",
"@@_main~maven~pom_exclusion_testing_coursier//:com_google_guava_listenablefuture",
"@@_main~maven~pom_exclusion_testing_coursier//:com_google_j2objc_j2objc_annotations",
"@@_main~maven~pom_exclusion_testing_coursier//:org_checkerframework_checker_qual",
]
asserts.equals(env, expected_deps, ctx.attr.src[DepsInfo].deps)
return analysistest.end(env)

does_jvm_import_exclude_exclusions_in_deps_test = analysistest.make(
_does_jvm_import_exclude_exclusions_in_deps_test_impl,
attrs = {
"src": attr.label(
doc = "Target to traverse for tags and deps",
aspects = [tags_propagator, deps_propagator],
mandatory = True,
),
},
)

def _does_jvm_import_have_applicable_licenses_impl(ctx):
env = analysistest.begin(ctx)

Expand Down Expand Up @@ -179,6 +233,12 @@ def jvm_import_test_suite(name):
src = "@jvm_import_test//:com_google_code_findbugs_jsr305",
)

does_jvm_import_exclude_exclusions_in_deps_test(
name = "does_jvm_import_exclude_exclusions_in_deps_test",
target_under_test = "@pom_exclusion_testing_coursier//:com_google_guava_guava",
src = "@pom_exclusion_testing_coursier//:com_google_guava_guava",
)

# TODO: restore once https://github.com/bazelbuild/rules_license/issues/154 is resolved
# does_non_jvm_import_target_carry_metadata_test(
# name = "does_non_jvm_import_target_carry_metadata",
Expand Down