Add a script to update the reference output of runtestreaddwarf
authorDodji Seketeli <dodji@redhat.com>
Sat, 17 Oct 2015 13:59:55 +0000 (15:59 +0200)
committerDodji Seketeli <dodji@redhat.com>
Sat, 17 Oct 2015 14:20:58 +0000 (16:20 +0200)
This script parses the output of runtestreaddwarf (that output is
non-empty when the reference output *.abi files need updating, but
when there is no ABI change error).  As a result, the script emits a
series of "cp <source-file> <destination-file>" command to issue, to
update the reference output of the runtestreaddwarf test program.

To use this script to update the reference output *.abi files for
runtestreaddwarf,

    <build-dir>/tests/runtestreaddwarf > changed-output.txt
    python update-test-read-dwarf-output.py changed-output.txt > shell-update-commands.sh
    sh shell-update-commands.sh

* tests/update-test-read-dwarf-output.py: New helper python program.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
tests/update-test-read-dwarf-output.py [new file with mode: 0644]

diff --git a/tests/update-test-read-dwarf-output.py b/tests/update-test-read-dwarf-output.py
new file mode 100644 (file)
index 0000000..871f3ef
--- /dev/null
@@ -0,0 +1,67 @@
+#!/bin/python
+
+# This program generates the copy commands you should use to update
+# the reference data for test <build-dir>/tests/runtestreaddwarf,
+# which source code is test-read-dwarf.cc.  It takes in argument the
+# diff result emitted by <build-dir>/tests/runtestreaddwarf, and emits
+# on standard output a series of 'cp <src> <dest>' commands to execute
+# to update reference data of the test.
+
+import fileinput
+import re
+import sys
+import getopt
+
+
+def display_usage():
+    sys.stderr.write("usage: prog-name [options] <file-name|-->\n");
+    sys.stderr.write(" options:\n");
+    sys.stderr.write("  -h  display this help\n");
+    sys.stderr.write(" argument:\n");
+    sys.stderr.write("  <file-name>  the file to read from\n");
+    sys.stderr.write("  if no argument, then reads from stdin\n");
+
+    sys.exit(2)
+
+def main():
+    input_file = None
+
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], "hi", ["help"])
+    except getopt.GetoptError as err:
+        print str(err)
+        display_usage()
+
+    for opt, arg in opts:
+        if opt in ("-h", "--help"):
+            display_usage()
+        else:
+            # unknown option.
+            display_usage()
+
+    if input_file == None and len(args) and args[0] != None:
+        input_file = open(args[0], 'r')
+    elif input_file == None:
+        input_file = sys.stdin
+
+    if input_file != None:
+        process(input_file)
+    else:
+        display_usage()
+
+
+def process(input_file):
+    source = ""
+    dest = ""
+    for line in input_file:
+        m = re.match(r'^--- (.*?)\t', line)
+        if m:
+            dest = m.group(1)
+        else:
+            m = re.match(r'^\+\+\+ (.*?)\t', line)
+            if m:
+                source = m.group(1)
+                sys.stdout.write("cp " + source + " " + dest + "\n");
+
+if __name__ == "__main__":
+    main()