1e01aa904Sopenharmony_ci#!/bin/python
2e01aa904Sopenharmony_ci# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3e01aa904Sopenharmony_ci
4e01aa904Sopenharmony_ci# This program generates the copy commands you should use to update
5e01aa904Sopenharmony_ci# the reference data for tests <build-dir>/tests/runtest* that emit an
6e01aa904Sopenharmony_ci# output that is compared against a reference output.
7e01aa904Sopenharmony_ci#
8e01aa904Sopenharmony_ci# It takes in argument the diff result emitted by
9e01aa904Sopenharmony_ci# <build-dir>/tests/runtest*, and emits on standard output a series of
10e01aa904Sopenharmony_ci# 'cp <src> <dest>' commands to execute to update reference data of
11e01aa904Sopenharmony_ci# the test.
12e01aa904Sopenharmony_ci
13e01aa904Sopenharmony_ciimport fileinput
14e01aa904Sopenharmony_ciimport re
15e01aa904Sopenharmony_ciimport sys
16e01aa904Sopenharmony_ciimport getopt
17e01aa904Sopenharmony_ci
18e01aa904Sopenharmony_ci
19e01aa904Sopenharmony_cidef display_usage():
20e01aa904Sopenharmony_ci    sys.stderr.write("usage: prog-name [options] <file-name|-->\n");
21e01aa904Sopenharmony_ci    sys.stderr.write(" options:\n");
22e01aa904Sopenharmony_ci    sys.stderr.write("  -h  display this help\n");
23e01aa904Sopenharmony_ci    sys.stderr.write(" argument:\n");
24e01aa904Sopenharmony_ci    sys.stderr.write("  <file-name>  the file to read from\n");
25e01aa904Sopenharmony_ci    sys.stderr.write("  if no argument, then reads from stdin\n");
26e01aa904Sopenharmony_ci
27e01aa904Sopenharmony_ci    sys.exit(2)
28e01aa904Sopenharmony_ci
29e01aa904Sopenharmony_cidef main():
30e01aa904Sopenharmony_ci    input_file = None
31e01aa904Sopenharmony_ci
32e01aa904Sopenharmony_ci    try:
33e01aa904Sopenharmony_ci        opts, args = getopt.getopt(sys.argv[1:], "hi", ["help"])
34e01aa904Sopenharmony_ci    except getopt.GetoptError as err:
35e01aa904Sopenharmony_ci        print(str(err))
36e01aa904Sopenharmony_ci        display_usage()
37e01aa904Sopenharmony_ci
38e01aa904Sopenharmony_ci    for opt, arg in opts:
39e01aa904Sopenharmony_ci        if opt in ("-h", "--help"):
40e01aa904Sopenharmony_ci            display_usage()
41e01aa904Sopenharmony_ci        else:
42e01aa904Sopenharmony_ci            # unknown option.
43e01aa904Sopenharmony_ci            display_usage()
44e01aa904Sopenharmony_ci
45e01aa904Sopenharmony_ci    if input_file == None and len(args) and args[0] != None:
46e01aa904Sopenharmony_ci        input_file = open(args[0], 'r')
47e01aa904Sopenharmony_ci    elif input_file == None:
48e01aa904Sopenharmony_ci        input_file = sys.stdin
49e01aa904Sopenharmony_ci
50e01aa904Sopenharmony_ci    if input_file != None:
51e01aa904Sopenharmony_ci        process(input_file)
52e01aa904Sopenharmony_ci    else:
53e01aa904Sopenharmony_ci        display_usage()
54e01aa904Sopenharmony_ci
55e01aa904Sopenharmony_ci
56e01aa904Sopenharmony_cidef process(input_file):
57e01aa904Sopenharmony_ci    source = ""
58e01aa904Sopenharmony_ci    dest = ""
59e01aa904Sopenharmony_ci    for line in input_file:
60e01aa904Sopenharmony_ci        m = re.match(r'^--- (.*?)\t', line)
61e01aa904Sopenharmony_ci        if m:
62e01aa904Sopenharmony_ci            dest = m.group(1)
63e01aa904Sopenharmony_ci        else:
64e01aa904Sopenharmony_ci            m = re.match(r'^\+\+\+ (.*?)\t', line)
65e01aa904Sopenharmony_ci            if m:
66e01aa904Sopenharmony_ci                source = m.group(1)
67e01aa904Sopenharmony_ci                sys.stdout.write("cp " + source + " " + dest + "\n");
68e01aa904Sopenharmony_ci
69e01aa904Sopenharmony_ciif __name__ == "__main__":
70e01aa904Sopenharmony_ci    main()
71