| #!/usr/bin/env python |
| # Copyright (c) 2016 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """Script to extract edits from clang tool output. |
| |
| If a clang tool emits edits, then the edits should look like this: |
| ... |
| ==== BEGIN EDITS ==== |
| <edit1> |
| <edit2> |
| ... |
| ==== END EDITS ==== |
| ... |
| |
| extract_edits.py takes input that is concatenated from multiple tool invocations |
| and extract just the edits. In other words, given the following input: |
| ... |
| ==== BEGIN EDITS ==== |
| <edit1> |
| <edit2> |
| ==== END EDITS ==== |
| ... |
| ==== BEGIN EDITS ==== |
| <yet another edit1> |
| <yet another edit2> |
| ==== END EDITS ==== |
| ... |
| extract_edits.py would emit the following output: |
| <edit1> |
| <edit2> |
| <yet another edit1> |
| <yet another edit2> |
| |
| This python script is mainly needed on Windows. |
| On unix this script can be replaced with running sed as follows: |
| |
| $ cat run_tool.debug.out \ |
| | sed '/^==== BEGIN EDITS ====$/,/^==== END EDITS ====$/{//!b};d' |
| | sort | uniq |
| """ |
| |
| import sys |
| |
| |
| def main(): |
| # TODO(dcheng): extract_edits.py should normalize paths. Doing this in |
| # apply_edits.py is too late, as a common use case is to apply edits from many |
| # different platforms. |
| unique_lines = set() |
| inside_marker_lines = False |
| for line in sys.stdin: |
| line = line.rstrip('\n\r') |
| if line == '==== BEGIN EDITS ====': |
| inside_marker_lines = True |
| continue |
| if line == '==== END EDITS ====': |
| inside_marker_lines = False |
| continue |
| if inside_marker_lines and line not in unique_lines: |
| unique_lines.add(line) |
| print line |
| return 0 |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main()) |