diff options
author | 2017-08-29 18:36:17 +0200 | |
---|---|---|
committer | 2017-08-29 18:53:13 +0200 | |
commit | 687d6c449a336cd5f9667cf0b15b0f7a26d6c103 (patch) | |
tree | cfb65b65057a868b40567f0c777b5ac395417ac4 /src/main/java/com/google/devtools/common/options/ParamsFilePreProcessor.java | |
parent | adda51294125a335e9b3fad9c72c00b8de54b766 (diff) |
Rollforward of https://github.com/bazelbuild/bazel/commit/0071b396776be4d146fd271499716dd5dea6f7e9: Enable parameter files for manifest merger actions.
NEW: Using shell quoted param files and unescape arguments in ParamsFilePreProcessor to avoid miss-processing --manifestValues arguments containing whitespace.
RELNOTES: None.
PiperOrigin-RevId: 166858411
Diffstat (limited to 'src/main/java/com/google/devtools/common/options/ParamsFilePreProcessor.java')
-rw-r--r-- | src/main/java/com/google/devtools/common/options/ParamsFilePreProcessor.java | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/common/options/ParamsFilePreProcessor.java b/src/main/java/com/google/devtools/common/options/ParamsFilePreProcessor.java index 30b67ed55e..791265ae1b 100644 --- a/src/main/java/com/google/devtools/common/options/ParamsFilePreProcessor.java +++ b/src/main/java/com/google/devtools/common/options/ParamsFilePreProcessor.java @@ -68,7 +68,7 @@ public class ParamsFilePreProcessor implements ArgsPreProcessor { while (iterator.hasNext()) { char next = iterator.next(); if (Character.isWhitespace(next) && !iterator.isInQuote() && !iterator.isEscaped()) { - newArgs.add(arg.toString()); + newArgs.add(unescape(arg.toString())); arg = new StringBuilder(); } else { arg.append(next); @@ -92,6 +92,14 @@ public class ParamsFilePreProcessor implements ArgsPreProcessor { return args; } + private String unescape(String arg) { + if (arg.startsWith("'") && arg.endsWith("'")) { + String unescaped = arg.replace("'\\''", "'"); + return unescaped.substring(1, unescaped.length() - 1); + } + return arg; + } + // Doesn't implement iterator to avoid autoboxing and to throw exceptions. static class CharIterator { @@ -145,7 +153,7 @@ public class ParamsFilePreProcessor implements ArgsPreProcessor { throw new NoSuchElementException(); } char current = (char) reader.read(); - + // check for \r\n line endings. If found, drop the \r for normalized parsing. if (current == '\r' && peek() == '\n') { current = (char) reader.read(); |