Index: tools/clang/scripts/extract_edits.py |
diff --git a/tools/clang/scripts/extract_edits.py b/tools/clang/scripts/extract_edits.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..b0df9c3541d90f985ce0bbd8d07c04b25a1aa1f8 |
--- /dev/null |
+++ b/tools/clang/scripts/extract_edits.py |
@@ -0,0 +1,65 @@ |
+#!/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(): |
+ 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()) |