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..ada26c1e53fd285c669d87eea7e83bd4634f77f6 |
--- /dev/null |
+++ b/tools/clang/scripts/extract_edits.py |
@@ -0,0 +1,56 @@ |
+#!/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. |
+ |
+Clang tools are expected to emit edits like this: |
dcheng
2016/12/27 07:30:14
Not all clang tools, just rewriter tools, right?
Łukasz Anforowicz
2016/12/27 22:33:26
If a clang tool emits edits, then it is a rewriter
|
+ ... |
+ ==== BEGIN EDITS ==== |
+ <edit1> |
+ <edit2> |
+ ... |
+ ==== END EDITS ==== |
+ ... |
+ ... |
+ ==== BEGIN EDITS ==== |
+ <yet another edit1> |
+ <yet another edit2> |
+ ... |
+ ==== END EDITS ==== |
+ ... |
+ |
+This python script extracts and dedupes lines between the begin/end marker |
+lines. |
+ |
+This python script is mainly needed on Windows. |
+On unix this script can be replaced with running sed as follows: |
+ |
+ $ cat run_tool.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) |
danakj
2016/12/23 15:45:06
jw why bother with this, it will make this tool sl
dcheng
2016/12/27 07:30:14
The apply script reads all the edits before dedupi
Łukasz Anforowicz
2016/12/27 22:33:26
I haven't made a change here, but I am open to rem
dcheng
2016/12/28 19:01:36
I don't feel strongly about this, but one easy way
Łukasz Anforowicz
2016/12/28 19:33:07
I am sure that this is lots and lots of lines. I
|
+ print(line) |
dcheng
2016/12/27 07:30:14
For consistency, no ()
Łukasz Anforowicz
2016/12/27 22:33:26
Done.
|
+ return 0 |
+ |
+ |
+if __name__ == '__main__': |
+ sys.exit(main()) |