aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar Florian Weikert <fwe@google.com>2015-08-11 20:28:33 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2015-08-12 15:23:41 +0000
commitb10ddbf94a5038819274afb963e0a90b67d76627 (patch)
treee880e98b4e2f3d727ea6cc3534cc1d8b9170cbbe /src/main/java/com/google
parenta381b754c15f4752243b25892363eb522f65a508 (diff)
UTF-8 encoded template substitution values are now properly displayed.
-- MOS_MIGRATED_REVID=100410176
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java
index 695ca36375..6edc400436 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java
@@ -391,7 +391,12 @@ public class SkylarkRuleImplementationFunctions {
ImmutableList.Builder<Substitution> substitutions = ImmutableList.builder();
for (Map.Entry<String, String> substitution : castMap(
substitutionsO, String.class, String.class, "substitutions").entrySet()) {
- substitutions.add(Substitution.of(substitution.getKey(), substitution.getValue()));
+ // ParserInputSource.create(Path) uses Latin1 when reading BUILD files, which might
+ // contain UTF-8 encoded symbols as part of template substitution.
+ // As a quick fix, the substitution values are corrected before being passed on.
+ // In the long term, fixing ParserInputSource.create(Path) would be a better approach.
+ substitutions.add(Substitution.of(
+ substitution.getKey(), convertLatin1ToUtf8(substitution.getValue())));
}
TemplateExpansionAction action = new TemplateExpansionAction(
ctx.getRuleContext().getActionOwner(),
@@ -405,6 +410,15 @@ public class SkylarkRuleImplementationFunctions {
};
/**
+ * Returns the proper UTF-8 representation of a String that was erroneously read using Latin1.
+ * @param latin1 Input string
+ * @return The input string, UTF8 encoded
+ */
+ private static String convertLatin1ToUtf8(String latin1) {
+ return new String(latin1.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
+ }
+
+ /**
* A built in Skylark helper function to access the
* Transitive info providers of Transitive info collections.
*/