Skip to content

Commit

Permalink
Use java_common.stamp_jar to stamp scala_import jar (#1372)
Browse files Browse the repository at this point in the history
* Use java_common.stamp_jar to stamp scala_import jar
  • Loading branch information
liucijus authored Mar 22, 2022
1 parent 9b85aff commit 75701d0
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 38 deletions.
47 changes: 11 additions & 36 deletions scala/scala_import.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,16 @@ load("@io_bazel_rules_scala//scala:jars_to_labels.bzl", "JarsToLabelsInfo")
load("//scala/settings:stamp_settings.bzl", "StampScalaImport")

def _stamp_jar(ctx, jar):
stamped_jar_filename = "%s.stamp/%s-stamped.jar" % (ctx.label.name, jar.basename.rstrip(".jar"))

# Preferred way, but currently broken:
# java toolchain's ijar incorrectly handles MANIFEST sections
# https://github.com/bazelbuild/bazel/issues/12730
# symlink_file = ctx.actions.declare_file(jar.basename)
# ctx.actions.symlink(output = symlink_file, target_file = jar)
# return java_common.stamp_jar(
# actions = ctx.actions,
# jar = symlink_file,
# target_label = ctx.label,
# java_toolchain = ctx.attr._java_toolchain[java_common.JavaToolchainInfo],
# )

stamped_file = ctx.actions.declare_file(stamped_jar_filename)

ctx.actions.run(
executable = ctx.executable._ijar,
inputs = [jar],
outputs = [stamped_file],
arguments = [
"--nostrip_jar",
"--target_label",
str(ctx.label),
jar.path,
stamped_file.path,
],
mnemonic = "StampWithIjar",
stamped_jar_filename = "%s.stamp/%s" % (ctx.label.name, jar.basename)
symlink_file = ctx.actions.declare_file(stamped_jar_filename)
ctx.actions.symlink(output = symlink_file, target_file = jar)
return java_common.stamp_jar(
actions = ctx.actions,
jar = symlink_file,
target_label = ctx.label,
java_toolchain = ctx.attr._java_toolchain[java_common.JavaToolchainInfo],
)

return stamped_file

# intellij part is tested manually, tread lightly when changing there
# if you change make sure to manually re-import an intellij project and see imports
# are resolved (not red) and clickable
Expand Down Expand Up @@ -157,15 +135,12 @@ scala_import = rule(
allow_single_file = True,
default = Label("@io_bazel_rules_scala//scala:libPlaceHolderClassToCreateEmptyJarForScalaImport.jar"),
),
"_ijar": attr.label(
default = Label("@bazel_tools//tools/jdk:ijar"),
executable = True,
cfg = "exec",
allow_files = True,
),
"stamp": attr.label(
doc = "Adds Target-Label attribute to MANIFEST.MF for dep tracking",
default = Label("@io_bazel_rules_scala//scala/settings:stamp_scala_import"),
),
"_java_toolchain": attr.label(
default = Label("@bazel_tools//tools/jdk:current_java_toolchain"),
),
},
)
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ def _assert_compile_dep_stamped(ctx):
env = analysistest.begin(ctx)
stamping_enabled = ctx.attr.stamp
jar = ctx.attr.jar.files.to_list()[0].basename
expected_action_mnemonic = "StampWithIjar"
expected_action_mnemonic = "JavaIjar"
expected_input = jar
expected_stamped_output = jar.rstrip(".jar") + "-stamped.jar"

target_under_test = analysistest.target_under_test(env)

if stamping_enabled:
stamp_action = analysistest.target_actions(env)[0]
stamp_action = analysistest.target_actions(env)[1]

actual_action_mnemonic = stamp_action.mnemonic
asserts.equals(env, expected_action_mnemonic, actual_action_mnemonic)
Expand Down

0 comments on commit 75701d0

Please sign in to comment.