Improve ctx.actions.args() debug print.
It now prints its string representation. Do not use this for anything other than debugging.
Closes #6039.
RELNOTES: None
PiperOrigin-RevId: 211496298
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
index 68f8ee5..be4d487 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
@@ -25,6 +25,7 @@
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ArtifactRoot;
import com.google.devtools.build.lib.actions.CommandLine;
+import com.google.devtools.build.lib.actions.CommandLineExpansionException;
import com.google.devtools.build.lib.actions.ParamFileInfo;
import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType;
import com.google.devtools.build.lib.actions.RunfilesSupplier;
@@ -893,6 +894,15 @@
printer.append("context.args() object");
}
+ @Override
+ public void debugPrint(SkylarkPrinter printer) {
+ try {
+ printer.append(Joiner.on(" ").join(commandLine.build().arguments()));
+ } catch (CommandLineExpansionException e) {
+ printer.append("Cannot expand command line: " + e.getMessage());
+ }
+ }
+
ImmutableSet<Artifact> getTreeArtifacts() {
for (Iterable<Object> collection : potentialTreeArtifacts) {
scanForTreeArtifacts(collection);
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
index 264346b..a503c78 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
@@ -2859,6 +2859,15 @@
}
@Test
+ public void testPrintArgs() throws Exception {
+ Args args =
+ (Args)
+ evalRuleContextCode(
+ "args = ruleContext.actions.args()", "args.add_all(['--foo', '--bar'])", "args");
+ assertThat(Printer.debugPrint(args)).isEqualTo("--foo --bar");
+ }
+
+ @Test
public void testDirectoryInArgs() throws Exception {
setSkylarkSemanticsOptions("--incompatible_expand_directories");
SkylarkList<?> result =