diff options
author | 2015-08-11 20:28:33 +0000 | |
---|---|---|
committer | 2015-08-12 15:23:41 +0000 | |
commit | b10ddbf94a5038819274afb963e0a90b67d76627 (patch) | |
tree | e880e98b4e2f3d727ea6cc3534cc1d8b9170cbbe /src/main/java/com/google | |
parent | a381b754c15f4752243b25892363eb522f65a508 (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.java | 16 |
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. */ |