Delete ctx.action() The function has been deprecated for a long time and is disabled by --incompatible_new_actions_api. RELNOTES: None. PiperOrigin-RevId: 318284100
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java index 7fa6f5b..60cb655 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java
@@ -82,7 +82,6 @@ import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.EvalUtils; import com.google.devtools.build.lib.syntax.Location; -import com.google.devtools.build.lib.syntax.NoneType; import com.google.devtools.build.lib.syntax.Printer; import com.google.devtools.build.lib.syntax.Sequence; import com.google.devtools.build.lib.syntax.Starlark; @@ -873,72 +872,6 @@ return pkg.getSourceRoot().get().relativize(pkg.getBuildFile().getPath()).getPathString(); } - /** - * A Starlark built-in function to create and register a SpawnAction using a dictionary of - * parameters: action( inputs = [input1, input2, ...], outputs = [output1, output2, ...], - * executable = executable, arguments = [argument1, argument2, ...], mnemonic = 'Mnemonic', - * command = 'command', ) - */ - @Override - public NoneType action( - Sequence<?> outputs, - Object inputs, - Object executableUnchecked, - Object toolsUnchecked, - Object arguments, - Object mnemonicUnchecked, - Object commandUnchecked, - Object progressMessage, - Boolean useDefaultShellEnv, - Object envUnchecked, - Object executionRequirementsUnchecked, - Object inputManifestsUnchecked, - StarlarkThread thread) - throws EvalException { - checkDeprecated( - "ctx.actions.run or ctx.actions.run_shell", "ctx.action", thread.getSemantics()); - checkMutable("action"); - if ((commandUnchecked == Starlark.NONE) == (executableUnchecked == Starlark.NONE)) { - throw Starlark.errorf("You must specify either 'command' or 'executable' argument"); - } - boolean hasCommand = commandUnchecked != Starlark.NONE; - if (!hasCommand) { - actions() - .run( - outputs, - inputs, - /*unusedInputsList=*/ Starlark.NONE, - executableUnchecked, - toolsUnchecked, - arguments, - mnemonicUnchecked, - progressMessage, - useDefaultShellEnv, - envUnchecked, - executionRequirementsUnchecked, - inputManifestsUnchecked, - /* execGroupUnchecked= */ Starlark.NONE); - - } else { - actions() - .runShell( - outputs, - inputs, - toolsUnchecked, - arguments, - mnemonicUnchecked, - commandUnchecked, - progressMessage, - useDefaultShellEnv, - envUnchecked, - executionRequirementsUnchecked, - inputManifestsUnchecked, - /* execGroupUnchecked= */ Starlark.NONE, - thread); - } - return Starlark.NONE; - } - @Override public String expandLocation(String input, Sequence<?> targets, StarlarkThread thread) throws EvalException {
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/StarlarkRuleContextApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/StarlarkRuleContextApi.java index b7b398b..bd4b120 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/StarlarkRuleContextApi.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/StarlarkRuleContextApi.java
@@ -26,7 +26,6 @@ import com.google.devtools.build.lib.syntax.ClassObject; import com.google.devtools.build.lib.syntax.Dict; import com.google.devtools.build.lib.syntax.EvalException; -import com.google.devtools.build.lib.syntax.NoneType; import com.google.devtools.build.lib.syntax.Sequence; import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier; import com.google.devtools.build.lib.syntax.StarlarkThread; @@ -526,164 +525,6 @@ String getBuildFileRelativePath() throws EvalException; @StarlarkMethod( - name = "action", - doc = - "DEPRECATED. Use <a href=\"actions.html#run\">ctx.actions.run()</a> or" - + " <a href=\"actions.html#run_shell\">ctx.actions.run_shell()</a>. <br>" - + "Creates an action that runs an executable or a shell command." - + " You must specify either <code>command</code> or <code>executable</code>.\n" - + "Actions and genrules are very similar, but have different use cases. Actions are " - + "used inside rules, and genrules are used inside macros. Genrules also have make " - + "variable expansion.", - parameters = { - @Param( - name = "outputs", - type = Sequence.class, - generic1 = FileApi.class, - named = true, - positional = false, - doc = "List of the output files of the action."), - @Param( - name = "inputs", - allowedTypes = { - @ParamType(type = Sequence.class), - @ParamType(type = Depset.class), - }, - generic1 = FileApi.class, - defaultValue = "[]", - named = true, - positional = false, - doc = "List of the input files of the action."), - @Param( - name = "executable", - type = Object.class, - allowedTypes = { - @ParamType(type = FileApi.class), - @ParamType(type = String.class), - @ParamType(type = NoneType.class), - }, - noneable = true, - defaultValue = "None", - named = true, - positional = false, - doc = "The executable file to be called by the action."), - @Param( - name = "tools", - allowedTypes = { - @ParamType(type = Sequence.class), - @ParamType(type = Depset.class), - }, - generic1 = FileApi.class, - defaultValue = "unbound", - named = true, - positional = false, - doc = - "List of the any tools needed by the action. Tools are inputs with additional " - + "runfiles that are automatically made available to the action."), - @Param( - name = "arguments", - allowedTypes = { - @ParamType(type = Sequence.class), - }, - defaultValue = "[]", - named = true, - positional = false, - doc = - "Command line arguments of the action. Must be a list of strings or actions.args() " - + "objects."), - @Param( - name = "mnemonic", - type = String.class, - noneable = true, - defaultValue = "None", - named = true, - positional = false, - doc = "A one-word description of the action, e.g. CppCompile or GoLink."), - @Param( - name = "command", - type = Object.class, - allowedTypes = { - @ParamType(type = String.class), - @ParamType(type = Sequence.class, generic1 = String.class), - @ParamType(type = NoneType.class), - }, - noneable = true, - defaultValue = "None", - named = true, - positional = false, - doc = - "Shell command to execute. It is usually preferable to " - + "use <code>executable</code> instead. " - + "Arguments are available with <code>$1</code>, <code>$2</code>, etc."), - @Param( - name = "progress_message", - type = String.class, - noneable = true, - defaultValue = "None", - named = true, - positional = false, - doc = - "Progress message to show to the user during the build, " - + "e.g. \"Compiling foo.cc to create foo.o\"."), - @Param( - name = "use_default_shell_env", - type = Boolean.class, - defaultValue = "False", - named = true, - positional = false, - doc = "Whether the action should use the built in shell environment or not."), - @Param( - name = "env", - type = Dict.class, - noneable = true, - defaultValue = "None", - named = true, - positional = false, - doc = "Sets the dictionary of environment variables."), - @Param( - name = "execution_requirements", - type = Dict.class, - noneable = true, - defaultValue = "None", - named = true, - positional = false, - doc = - "Information for scheduling the action. See " - + "<a href=\"$BE_ROOT/common-definitions.html#common.tags\">tags</a> " - + "for useful keys."), - @Param( - // TODO(bazel-team): The name here isn't accurate anymore. This is technically - // experimental, - // so folks shouldn't be too attached, but consider renaming to be more accurate/opaque. - name = "input_manifests", - type = Sequence.class, - noneable = true, - defaultValue = "None", - named = true, - positional = false, - doc = - "(Experimental) sets the input runfiles metadata; " - + "they are typically generated by resolve_command.") - }, - allowReturnNones = true, - useStarlarkThread = true) - NoneType action( - Sequence<?> outputs, - Object inputs, - Object executableUnchecked, - Object toolsUnchecked, - Object arguments, - Object mnemonicUnchecked, - Object commandUnchecked, - Object progressMessage, - Boolean useDefaultShellEnv, - Object envUnchecked, - Object executionRequirementsUnchecked, - Object inputManifestsUnchecked, - StarlarkThread thread) - throws EvalException; - - @StarlarkMethod( name = "expand_location", doc = "Expands all <code>$(location ...)</code> templates in the given string by replacing "
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/StarlarkRuleContextTest.java b/src/test/java/com/google/devtools/build/lib/skylark/StarlarkRuleContextTest.java index 953edf1..c1d2bcc 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/StarlarkRuleContextTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/StarlarkRuleContextTest.java
@@ -146,8 +146,7 @@ "cc_library(name = 'cc_with_features',", " srcs = ['dummy.cc'],", " features = ['f1', '-f3'],", - ")" - ); + ")"); } private void setRuleContext(StarlarkRuleContext ctx) throws Exception { @@ -276,25 +275,27 @@ @Test public void testMandatoryProvidersListWithNative() throws Exception { setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false"); - scratch.file("test/BUILD", - "load('//test:rules.bzl', 'my_rule', 'my_other_rule')", - "my_rule(name = 'mylib',", - " srcs = ['a.py'])", - "testing_rule_for_mandatory_providers(name = 'skyrule1',", - " deps = [':mylib'])", - "my_other_rule(name = 'my_other_lib',", - " srcs = ['a.py'])", - "testing_rule_for_mandatory_providers(name = 'skyrule2',", - " deps = [':my_other_lib'])"); - scratch.file("test/rules.bzl", - "def my_rule_impl(ctx):", - " return struct(a = [])", - "my_rule = rule(implementation = my_rule_impl, ", - " attrs = { 'srcs' : attr.label_list(allow_files=True)})", - "def my_other_rule_impl(ctx):", - " return struct(b = [])", - "my_other_rule = rule(implementation = my_other_rule_impl, ", - " attrs = { 'srcs' : attr.label_list(allow_files=True)})"); + scratch.file( + "test/BUILD", + "load('//test:rules.bzl', 'my_rule', 'my_other_rule')", + "my_rule(name = 'mylib',", + " srcs = ['a.py'])", + "testing_rule_for_mandatory_providers(name = 'skyrule1',", + " deps = [':mylib'])", + "my_other_rule(name = 'my_other_lib',", + " srcs = ['a.py'])", + "testing_rule_for_mandatory_providers(name = 'skyrule2',", + " deps = [':my_other_lib'])"); + scratch.file( + "test/rules.bzl", + "def my_rule_impl(ctx):", + " return struct(a = [])", + "my_rule = rule(implementation = my_rule_impl, ", + " attrs = { 'srcs' : attr.label_list(allow_files=True)})", + "def my_other_rule_impl(ctx):", + " return struct(b = [])", + "my_other_rule = rule(implementation = my_other_rule_impl, ", + " attrs = { 'srcs' : attr.label_list(allow_files=True)})"); reporter.removeHandler(failFastHandler); assertThat(getConfiguredTarget("//test:skyrule1")).isNotNull(); @@ -327,8 +328,7 @@ "load('//test:macros.bzl', 'starlark_rule')", "starlark_rule(name = 'skyrule',", " srcs = ['sub/my_sub_lib.h'])"); - scratch.file("test/sub/BUILD", - "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])"); + scratch.file("test/sub/BUILD", "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])"); scratch.file( "test/macros.bzl", "def _impl(ctx):", @@ -354,8 +354,7 @@ "load('//test:macros.bzl', 'macro_starlark_rule')", "macro_starlark_rule(name = 'm_starlark',", " srcs = ['sub/my_sub_lib.h'])"); - scratch.file("test/sub/BUILD", - "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])"); + scratch.file("test/sub/BUILD", "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])"); scratch.file( "test/macros.bzl", "def _impl(ctx):", @@ -403,12 +402,14 @@ scratch.file("/r/WORKSPACE"); scratch.file("/r/BUILD", "cc_library(name = 'cclib',", " srcs = ['sub/my_sub_lib.h'])"); scratch.file("/r/sub/BUILD", "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])"); - scratch.overwriteFile("WORKSPACE", + scratch.overwriteFile( + "WORKSPACE", new ImmutableList.Builder<String>() .addAll(analysisMock.getWorkspaceContents(mockToolsConfig)) .add("local_repository(name='r', path='/r')") .build()); - invalidatePackages(/*alsoConfigs=*/false); // Repository shuffling messes with toolchain labels. + invalidatePackages( + /*alsoConfigs=*/ false); // Repository shuffling messes with toolchain labels. reporter.removeHandler(failFastHandler); getConfiguredTarget("@r//:cclib"); assertContainsEvent( @@ -432,8 +433,7 @@ "test/BUILD", "load('//test:macros.bzl', 'macro_starlark_rule')", "macro_starlark_rule(name = 'm_starlark')"); - scratch.file("test/sub/BUILD", - "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])"); + scratch.file("test/sub/BUILD", "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])"); scratch.file( "test/macros.bzl", "def _impl(ctx):", @@ -455,13 +455,14 @@ @Test public void testPackageBoundaryError_NativeMacro() throws Exception { - scratch.file("test/BUILD", + scratch.file( + "test/BUILD", "load('//test:macros.bzl', 'macro_native_rule')", "macro_native_rule(name = 'm_native',", " srcs = ['sub/my_sub_lib.h'])"); - scratch.file("test/sub/BUILD", - "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])"); - scratch.file("test/macros.bzl", + scratch.file("test/sub/BUILD", "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])"); + scratch.file( + "test/macros.bzl", "def macro_native_rule(name, deps=[], srcs=[]): ", " native.cc_library(name = name, deps = deps, srcs = srcs)"); reporter.removeHandler(failFastHandler); @@ -949,7 +950,6 @@ assertThat(result).isEqualTo("File"); } - @Test public void testDeriveTreeArtifactNextToSibling() throws Exception { setRuleContext(createRuleContext("//foo:foo")); @@ -997,7 +997,6 @@ assertThat(fragment.getPathString()).isEqualTo("foo/t.exe.params"); } - @Test public void testLabelKeyedStringDictConvertsToTargetToStringMap() throws Exception { scratch.file( @@ -1185,8 +1184,9 @@ invalidatePackages(); getConfiguredTarget("//:r"); - assertContainsEvent("in label_dict attribute of my_rule rule //:r: " - + "source file '//:myfile.cpp' is misplaced here (expected no files)"); + assertContainsEvent( + "in label_dict attribute of my_rule rule //:r: " + + "source file '//:myfile.cpp' is misplaced here (expected no files)"); } @Test @@ -1282,8 +1282,9 @@ invalidatePackages(); getConfiguredTarget("//:r"); - assertContainsEvent("in label_dict attribute of my_rule rule //:r: " - + "'//:dep' does not have mandatory providers: 'my_provider'"); + assertContainsEvent( + "in label_dict attribute of my_rule rule //:r: " + + "'//:dep' does not have mandatory providers: 'my_provider'"); } @Test @@ -1308,8 +1309,8 @@ invalidatePackages(); getConfiguredTarget("//:r"); - assertContainsEvent("in label_dict attribute of my_rule rule //:r: " - + "attribute must be non empty"); + assertContainsEvent( + "in label_dict attribute of my_rule rule //:r: " + "attribute must be non empty"); } @Test @@ -1351,10 +1352,7 @@ " }", ")"); - scratch.file( - "BUILD", - "load('//:my_rule.bzl', 'my_rule')", - "my_rule(name='r')"); + scratch.file("BUILD", "load('//:my_rule.bzl', 'my_rule')", "my_rule(name='r')"); invalidatePackages(); getConfiguredTarget("//:r"); @@ -1375,10 +1373,7 @@ " }", ")"); - scratch.file( - "BUILD", - "load('//:my_rule.bzl', 'my_rule')", - "my_rule(name='r')"); + scratch.file("BUILD", "load('//:my_rule.bzl', 'my_rule')", "my_rule(name='r')"); invalidatePackages(); createRuleContext("//:r"); @@ -1418,7 +1413,8 @@ @Test public void testRelativeLabelInExternalRepository() throws Exception { - scratch.file("external_rule.bzl", + scratch.file( + "external_rule.bzl", "def _impl(ctx):", " return", "external_rule = rule(", @@ -1428,21 +1424,21 @@ " }", ")"); - scratch.file("BUILD", - "filegroup(name='dep')"); + scratch.file("BUILD", "filegroup(name='dep')"); scratch.file("/r/WORKSPACE"); - scratch.file("/r/a/BUILD", - "load('@//:external_rule.bzl', 'external_rule')", - "external_rule(name='r')"); + scratch.file( + "/r/a/BUILD", "load('@//:external_rule.bzl', 'external_rule')", "external_rule(name='r')"); - scratch.overwriteFile("WORKSPACE", + scratch.overwriteFile( + "WORKSPACE", new ImmutableList.Builder<String>() .addAll(analysisMock.getWorkspaceContents(mockToolsConfig)) .add("local_repository(name='r', path='/r')") .build()); - invalidatePackages(/*alsoConfigs=*/false); // Repository shuffling messes with toolchain labels. + invalidatePackages( + /*alsoConfigs=*/ false); // Repository shuffling messes with toolchain labels. setRuleContext(createRuleContext("@r//a:r")); Label depLabel = (Label) ev.eval("ruleContext.attr.internal_dep.label"); assertThat(depLabel).isEqualTo(Label.parseAbsolute("//:dep", ImmutableMap.of())); @@ -1451,7 +1447,8 @@ @Test public void testCallerRelativeLabelInExternalRepository() throws Exception { scratch.file("BUILD"); - scratch.file("external_rule.bzl", + scratch.file( + "external_rule.bzl", "def _impl(ctx):", " return", "external_rule = rule(", @@ -1464,20 +1461,20 @@ ")"); scratch.file("/r/WORKSPACE"); - scratch.file("/r/BUILD", - "filegroup(name='dep')"); + scratch.file("/r/BUILD", "filegroup(name='dep')"); - scratch.file("/r/a/BUILD", - "load('@//:external_rule.bzl', 'external_rule')", - "external_rule(name='r')"); + scratch.file( + "/r/a/BUILD", "load('@//:external_rule.bzl', 'external_rule')", "external_rule(name='r')"); - scratch.overwriteFile("WORKSPACE", + scratch.overwriteFile( + "WORKSPACE", new ImmutableList.Builder<String>() .addAll(analysisMock.getWorkspaceContents(mockToolsConfig)) .add("local_repository(name='r', path='/r')") .build()); - invalidatePackages(/*alsoConfigs=*/false); // Repository shuffling messes with toolchain labels. + invalidatePackages( + /*alsoConfigs=*/ false); // Repository shuffling messes with toolchain labels. setRuleContext(createRuleContext("@r//a:r")); Label depLabel = (Label) ev.eval("ruleContext.attr.internal_dep.label"); assertThat(depLabel).isEqualTo(Label.parseAbsolute("@r//:dep", ImmutableMap.of())); @@ -1496,17 +1493,14 @@ scratch.file( "/r2/test.bzl", "def macro(name, path):", - " native.local_repository(name = name, path = path)" - ); + " native.local_repository(name = name, path = path)"); scratch.file("/r2/WORKSPACE"); scratch.file( - "/r2/other_test.bzl", - "def other_macro(name, path):", - " print(name + ': ' + path)" - ); + "/r2/other_test.bzl", "def other_macro(name, path):", " print(name + ': ' + path)"); scratch.file("BUILD"); - scratch.overwriteFile("WORKSPACE", + scratch.overwriteFile( + "WORKSPACE", new ImmutableList.Builder<String>() .addAll(analysisMock.getWorkspaceContents(mockToolsConfig)) .add("local_repository(name='r2', path='/r2')") @@ -1518,7 +1512,8 @@ .add("macro(NEXT_NAME, '/r2')") // and we can still use macro outside of its chunk. .build()); - invalidatePackages(/*alsoConfigs=*/false); // Repository shuffling messes with toolchain labels. + invalidatePackages( + /*alsoConfigs=*/ false); // Repository shuffling messes with toolchain labels. assertThat(getConfiguredTarget("@r1//:test")).isNotNull(); } @@ -1532,14 +1527,16 @@ scratch.file("/baz/WORKSPACE"); scratch.file("/baz/baz.txt"); scratch.file("/baz/BUILD", "filegroup(name = 'baz', srcs = ['baz.txt'])"); - scratch.overwriteFile("WORKSPACE", + scratch.overwriteFile( + "WORKSPACE", new ImmutableList.Builder<String>() .addAll(analysisMock.getWorkspaceContents(mockToolsConfig)) .add("local_repository(name = 'foo', path = '/bar')") .add("local_repository(name = 'foo', path = '/baz')") .build()); - invalidatePackages(/*alsoConfigs=*/false); // Repository shuffling messes with toolchain labels. + invalidatePackages( + /*alsoConfigs=*/ false); // Repository shuffling messes with toolchain labels. assertThat( (List) getConfiguredTargetAndData("@foo//:baz") @@ -1552,7 +1549,8 @@ scratch.overwriteFile("BUILD"); scratch.overwriteFile("bar.bzl", "dummy = 1"); - scratch.overwriteFile("WORKSPACE", + scratch.overwriteFile( + "WORKSPACE", new ImmutableList.Builder<String>() .addAll(analysisMock.getWorkspaceContents(mockToolsConfig)) .add("local_repository(name = 'foo', path = '/bar')") @@ -1560,8 +1558,7 @@ .add("local_repository(name = 'foo', path = '/baz')") .build()); - invalidatePackages( - /*alsoConfigs=*/ false); // Repository shuffling messes with toolchains. + invalidatePackages(/*alsoConfigs=*/ false); // Repository shuffling messes with toolchains. assertThrows(Exception.class, () -> createRuleContext("@foo//:baz")); assertContainsEvent( "Cannot redefine repository after any load statement in the WORKSPACE file " @@ -1803,8 +1800,7 @@ scratch.file("/bar/bar.txt"); scratch.file("/bar/BUILD", "exports_files(['bar.txt'])"); FileSystemUtils.appendIsoLatin1( - scratch.resolve("WORKSPACE"), - "local_repository(name = 'foo', path = '/bar')"); + scratch.resolve("WORKSPACE"), "local_repository(name = 'foo', path = '/bar')"); scratch.file( "test/BUILD", "genrule(", @@ -1860,33 +1856,33 @@ } private final String testingRuleDefinition = - linesAsString( - "def _testing_impl(ctx):", - " pass", - "testing_rule = rule(", - " implementation = _testing_impl,", - " attrs = {'dep': attr.label()},", - ")"); + linesAsString( + "def _testing_impl(ctx):", + " pass", + "testing_rule = rule(", + " implementation = _testing_impl,", + " attrs = {'dep': attr.label()},", + ")"); private final String simpleBuildDefinition = - linesAsString( - "load(':rules.bzl', 'undertest_rule', 'testing_rule')", - "undertest_rule(", - " name = 'undertest',", - ")", - "testing_rule(", - " name = 'testing',", - " dep = ':undertest',", - ")"); + linesAsString( + "load(':rules.bzl', 'undertest_rule', 'testing_rule')", + "undertest_rule(", + " name = 'undertest',", + ")", + "testing_rule(", + " name = 'testing',", + " dep = ':undertest',", + ")"); @Test public void testDependencyActionsProvider() throws Exception { - scratch.file("test/rules.bzl", + scratch.file( + "test/rules.bzl", getSimpleUnderTestDefinition( "ctx.actions.run_shell(outputs=[out], command='echo foo123 > ' + out.path)"), testingRuleDefinition); - scratch.file("test/BUILD", - simpleBuildDefinition); + scratch.file("test/BUILD", simpleBuildDefinition); StarlarkRuleContext ruleContext = createRuleContext("//test:testing"); setRuleContext(ruleContext); @@ -1905,12 +1901,12 @@ @Test public void testNoAccessToDependencyActionsWithoutStarlarkTest() throws Exception { reporter.removeHandler(failFastHandler); - scratch.file("test/rules.bzl", + scratch.file( + "test/rules.bzl", getSimpleNontestableUnderTestDefinition( "ctx.actions.run_shell(outputs=[out], command='echo foo123 > ' + out.path)"), testingRuleDefinition); - scratch.file("test/BUILD", - simpleBuildDefinition); + scratch.file("test/BUILD", simpleBuildDefinition); StarlarkRuleContext ruleContext = createRuleContext("//test:testing"); setRuleContext(ruleContext); @@ -1943,8 +1939,7 @@ " _skylark_testable = True,", ")", testingRuleDefinition); - scratch.file("test/BUILD", - simpleBuildDefinition); + scratch.file("test/BUILD", simpleBuildDefinition); StarlarkRuleContext ruleContext = createRuleContext("//test:testing"); setRuleContext(ruleContext); ev.update("file1", ev.eval("ruleContext.attr.dep.out1")); @@ -1994,8 +1989,7 @@ " _skylark_testable = True,", ")", testingRuleDefinition); - scratch.file("test/BUILD", - simpleBuildDefinition); + scratch.file("test/BUILD", simpleBuildDefinition); StarlarkRuleContext ruleContext = createRuleContext("//test:testing"); setRuleContext(ruleContext); @@ -2014,11 +2008,12 @@ @Test public void testNoAccessToCreatedActionsWithoutStarlarkTest() throws Exception { - scratch.file("test/rules.bzl", + scratch.file( + "test/rules.bzl", getSimpleNontestableUnderTestDefinition( - "ctx.actions.run_shell(outputs=[out], command='echo foo123 > ' + out.path)") - ); - scratch.file("test/BUILD", + "ctx.actions.run_shell(outputs=[out], command='echo foo123 > ' + out.path)")); + scratch.file( + "test/BUILD", "load(':rules.bzl', 'undertest_rule')", "undertest_rule(", " name = 'undertest',", @@ -2032,12 +2027,12 @@ @Test public void testSpawnActionInterface() throws Exception { - scratch.file("test/rules.bzl", + scratch.file( + "test/rules.bzl", getSimpleUnderTestDefinition( "ctx.actions.run_shell(outputs=[out], command='echo foo123 > ' + out.path)"), testingRuleDefinition); - scratch.file("test/BUILD", - simpleBuildDefinition); + scratch.file("test/BUILD", simpleBuildDefinition); StarlarkRuleContext ruleContext = createRuleContext("//test:testing"); setRuleContext(ruleContext); ev.update("file", ev.eval("ruleContext.attr.dep.files.to_list()[0]")); @@ -2148,12 +2143,11 @@ @Test public void testFileWriteActionInterface() throws Exception { - scratch.file("test/rules.bzl", - getSimpleUnderTestDefinition( - "ctx.actions.write(output=out, content='foo123')"), + scratch.file( + "test/rules.bzl", + getSimpleUnderTestDefinition("ctx.actions.write(output=out, content='foo123')"), testingRuleDefinition); - scratch.file("test/BUILD", - simpleBuildDefinition); + scratch.file("test/BUILD", simpleBuildDefinition); StarlarkRuleContext ruleContext = createRuleContext("//test:testing"); setRuleContext(ruleContext); ev.update("file", ev.eval("ruleContext.attr.dep.files.to_list()[0]")); @@ -2262,10 +2256,9 @@ " _skylark_testable = True,", ")", testingRuleDefinition); - scratch.file("test/template.txt", - "aaaaa", - "bcdef"); - scratch.file("test/BUILD", + scratch.file("test/template.txt", "aaaaa", "bcdef"); + scratch.file( + "test/BUILD", "load(':rules.bzl', 'undertest_rule', 'testing_rule')", "undertest_rule(", " name = 'undertest',", @@ -2292,7 +2285,8 @@ } private void setUpCoverageInstrumentedTest() throws Exception { - scratch.file("test/BUILD", + scratch.file( + "test/BUILD", "cc_library(", " name = 'foo',", " srcs = ['foo.cc'],", @@ -2397,7 +2391,6 @@ "actions.run_shell(command = 'foo', outputs = [file])", "actions.write(file, 'foo')", "check_placeholders('foo', [])", - "action(command = 'foo', outputs = [file])", "runfiles()", "resolve_command(command = 'foo')", "resolve_tools()"); @@ -2405,7 +2398,8 @@ @Test public void testFrozenRuleContextHasInaccessibleAttributes() throws Exception { setStarlarkSemanticsOptions("--incompatible_new_actions_api=false"); - scratch.file("test/BUILD", + scratch.file( + "test/BUILD", "load('//test:rules.bzl', 'main_rule', 'dep_rule')", "dep_rule(name = 'dep')", "main_rule(name = 'main', deps = [':dep'])"); @@ -2450,20 +2444,18 @@ setStarlarkSemanticsOptions("--incompatible_new_actions_api=false"); List<String> attributes = new ArrayList<>(); attributes.addAll(ctxAttributes); - attributes.addAll(ImmutableList.of( - "rule.attr", - "rule.executable", - "rule.file", - "rule.files", - "rule.kind")); - scratch.file("test/BUILD", + attributes.addAll( + ImmutableList.of("rule.attr", "rule.executable", "rule.file", "rule.files", "rule.kind")); + scratch.file( + "test/BUILD", "load('//test:rules.bzl', 'my_rule')", "my_rule(name = 'dep')", "my_rule(name = 'mid', deps = [':dep'])", "my_rule(name = 'main', deps = [':mid'])"); scratch.file("test/rules.bzl"); for (String attribute : attributes) { - scratch.overwriteFile("test/rules.bzl", + scratch.overwriteFile( + "test/rules.bzl", "def _rule_impl(ctx):", " pass", "def _aspect_impl(target, ctx):", @@ -2496,20 +2488,16 @@ } private static final List<String> deprecatedActionsApi = - ImmutableList.of( - "new_file('foo.txt')", - "new_file(file, 'foo.txt')", - "action(command = 'foo', outputs = [file])"); + ImmutableList.of("new_file('foo.txt')", "new_file(file, 'foo.txt')"); @Test public void testIncompatibleNewActionsApi() throws Exception { - scratch.file("test/BUILD", - "load('//test:rules.bzl', 'main_rule')", - "main_rule(name = 'main')"); + scratch.file("test/BUILD", "load('//test:rules.bzl', 'main_rule')", "main_rule(name = 'main')"); scratch.file("test/rules.bzl"); for (String actionApi : deprecatedActionsApi) { - scratch.overwriteFile("test/rules.bzl", + scratch.overwriteFile( + "test/rules.bzl", "def _main_impl(ctx):", " file = ctx.outputs.file", " foo = ctx." + actionApi, @@ -2519,8 +2507,7 @@ " 'deps': attr.label_list()", " },", " outputs = {'file': 'output.txt'},", - ")" - ); + ")"); setStarlarkSemanticsOptions("--incompatible_new_actions_api=true"); invalidatePackages(); AssertionError e = @@ -2537,12 +2524,14 @@ @Test public void testMapAttributeOrdering() throws Exception { - scratch.file("a/a.bzl", + scratch.file( + "a/a.bzl", "key_provider = provider(fields=['keys'])", "def _impl(ctx):", " return [key_provider(keys=ctx.attr.value.keys())]", "a = rule(implementation=_impl, attrs={'value': attr.string_dict()})"); - scratch.file("a/BUILD", + scratch.file( + "a/BUILD", "load(':a.bzl', 'a')", "a(name='a', value={'c': 'c', 'b': 'b', 'a': 'a', 'f': 'f', 'e': 'e', 'd': 'd'})"); @@ -2617,8 +2606,9 @@ reporter.removeHandler(failFastHandler); getConfiguredTarget("//test:my_non_build_setting"); - assertContainsEvent("attempting to access 'build_setting_value' of non-build setting " - + "//test:my_non_build_setting"); + assertContainsEvent( + "attempting to access 'build_setting_value' of non-build setting " + + "//test:my_non_build_setting"); } private void createToolchains() throws Exception {