aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar vladmos <vladmos@google.com>2017-09-12 14:35:11 +0200
committerGravatar Philipp Wollermann <philwo@google.com>2017-09-12 15:48:13 +0200
commit139543d3320f0336b012c2af020ed68fe5c49367 (patch)
treef9cd5cc6f590d5f635de4d4c573b2af4c3930f07 /src
parent1a72fb7b89ccff0841a71e461ada84cd1a24958c (diff)
Fix string representations for root objects
Root objects should not expose their absolute paths as they break hermeticity. PiperOrigin-RevId: 168363549
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/Root.java5
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkStringRepresentationsTest.java21
2 files changed, 24 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Root.java b/src/main/java/com/google/devtools/build/lib/actions/Root.java
index 48abb2385e..81cab786ef 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/Root.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/Root.java
@@ -222,6 +222,11 @@ public final class Root implements Comparable<Root>, Serializable, SkylarkValue
@Override
public void repr(SkylarkPrinter printer) {
+ printer.append(isSourceRoot() ? "<source root>" : "<derived root>");
+ }
+
+ @Override
+ public void reprLegacy(SkylarkPrinter printer) {
printer.append(toString());
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkStringRepresentationsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkStringRepresentationsTest.java
index 8db33169eb..78618b5fd5 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkStringRepresentationsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkStringRepresentationsTest.java
@@ -179,6 +179,8 @@ public class SkylarkStringRepresentationsTest extends SkylarkTestCase {
")",
"",
"def _check_impl(ctx):",
+ " source_file = ctx.attr.srcs[0].files.to_list()[0]",
+ " generated_file = ctx.attr.srcs[1].files.to_list()[0]",
" objects = {",
" 'target': ctx.attr.deps[0],",
" 'alias_target': ctx.attr.deps[1],",
@@ -188,8 +190,10 @@ public class SkylarkStringRepresentationsTest extends SkylarkTestCase {
" 'rule_ctx': ctx,",
" 'aspect_ctx': ctx.attr.asp_deps[0][aspect_ctx_provider].ctx,",
" 'aspect_ctx.rule': ctx.attr.asp_deps[0][aspect_ctx_provider].rule,",
- " 'source_file': ctx.attr.srcs[0].files.to_list()[0],",
- " 'generated_file': ctx.attr.srcs[1].files.to_list()[0],",
+ " 'source_file': source_file,",
+ " 'generated_file': generated_file,",
+ " 'source_root': source_file.root,",
+ " 'generated_root': generated_file.root,",
" }",
" return struct(**prepare_params(objects))",
"check = rule(",
@@ -335,6 +339,19 @@ public class SkylarkStringRepresentationsTest extends SkylarkTestCase {
}
@Test
+ public void testStringRepresentations_Root() throws Exception {
+ setSkylarkSemanticsOptions("--incompatible_descriptive_string_representations=true");
+
+ generateFilesToTestStrings();
+ ConfiguredTarget target = getConfiguredTarget("//test/skylark:check");
+
+ for (String suffix : SUFFIXES) {
+ assertThat(target.get("source_root" + suffix)).isEqualTo("<source root>");
+ assertThat(target.get("generated_root" + suffix)).isEqualTo("<derived root>");
+ }
+ }
+
+ @Test
public void testStringRepresentations_Glob() throws Exception {
setSkylarkSemanticsOptions("--incompatible_descriptive_string_representations=true");