Chromium Code Reviews| Index: appengine/findit/waterfall/extractors.py |
| diff --git a/appengine/findit/waterfall/extractors.py b/appengine/findit/waterfall/extractors.py |
| index b0f6639c2775407366bf0aa1f22d572cc94bab4c..a79a734f3c900bb7c5f55c749c6751345ef106f0 100644 |
| --- a/appengine/findit/waterfall/extractors.py |
| +++ b/appengine/findit/waterfall/extractors.py |
| @@ -217,6 +217,7 @@ class CompileStepExtractor(Extractor): |
| signal = FailureSignal() |
| failure_started = False |
| is_build_command_line = False |
| + failed_output_nodes = set() |
| if (master_name == self.MAC_MASTER_NAME_FOR_COMPILE and |
| bot_name in self.IOS_BUILDER_NAMES_FOR_COMPILE): |
| @@ -242,6 +243,28 @@ class CompileStepExtractor(Extractor): |
| if line.startswith(self.FAILURE_START_LINE_PREFIX): |
| if not failure_started: |
| failure_started = True |
| + line = line[len(self.FAILURE_START_LINE_PREFIX):] |
| + while line: |
|
chanli
2016/04/30 02:24:58
Is it possible that the line is like:
FAILED: a.o
stgao
2016/05/01 05:12:28
In theory, this is possible.
But in practice, when
|
| + quote_index = line.find('"') |
|
lijeffrey
2016/04/30 03:44:25
nit: it seems since this is a temporary solution,
stgao
2016/05/01 05:12:28
This is a good idea.
Done, but with additional ch
|
| + if quote_index < 0: |
| + sub_part = line |
| + remaining_part = None |
| + else: |
| + sub_part = line[:quote_index] |
| + match_quote_index = line.find('"', quote_index + 1) |
| + if match_quote_index < 0: # Unexpected format. |
| + failed_output_nodes.clear() |
| + break |
| + failed_output_nodes.add( |
| + line[quote_index + 1: match_quote_index]) |
| + remaining_part = line[match_quote_index + 1:] |
| + line = remaining_part |
| + |
| + for node in sub_part.split(' '): |
| + node = node.strip() |
| + if node: |
| + failed_output_nodes.add(node) |
| + |
| is_build_command_line = True |
| continue |
| elif is_build_command_line: |
| @@ -270,6 +293,7 @@ class CompileStepExtractor(Extractor): |
| # either within the compile errors or is a ninja error. |
| self.ExtractFiles(line, signal) |
| + signal.failed_output_nodes = sorted(failed_output_nodes) |
| return signal |