xref: /llvm-project/libcxx/utils/cat_files.py (revision 7bfaa0f09d0564f315ea778023b34b8a113ec740)
1887894aaSEric Fiselier#!/usr/bin/env python
2887894aaSEric Fiselier# ===----------------------------------------------------------------------===##
3887894aaSEric Fiselier#
457b08b09SChandler Carruth# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
557b08b09SChandler Carruth# See https://llvm.org/LICENSE.txt for license information.
657b08b09SChandler Carruth# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7887894aaSEric Fiselier#
8887894aaSEric Fiselier# ===----------------------------------------------------------------------===##
9887894aaSEric Fiselier
10887894aaSEric Fiselierfrom argparse import ArgumentParser
11887894aaSEric Fiselierimport sys
12887894aaSEric Fiselier
13*7bfaa0f0STobias Hieta
14887894aaSEric Fiselierdef print_and_exit(msg):
15*7bfaa0f0STobias Hieta    sys.stderr.write(msg + "\n")
16887894aaSEric Fiselier    sys.exit(1)
17887894aaSEric Fiselier
18*7bfaa0f0STobias Hieta
19887894aaSEric Fiselierdef main():
20*7bfaa0f0STobias Hieta    parser = ArgumentParser(description="Concatenate two files into a single file")
21887894aaSEric Fiselier    parser.add_argument(
22*7bfaa0f0STobias Hieta        "-o",
23*7bfaa0f0STobias Hieta        "--output",
24*7bfaa0f0STobias Hieta        dest="output",
25*7bfaa0f0STobias Hieta        required=True,
26*7bfaa0f0STobias Hieta        help="The output file. stdout is used if not given",
27*7bfaa0f0STobias Hieta        type=str,
28*7bfaa0f0STobias Hieta        action="store",
29*7bfaa0f0STobias Hieta    )
30887894aaSEric Fiselier    parser.add_argument(
31*7bfaa0f0STobias Hieta        "files", metavar="files", nargs="+", help="The files to concatenate"
32*7bfaa0f0STobias Hieta    )
33887894aaSEric Fiselier
34887894aaSEric Fiselier    args = parser.parse_args()
35887894aaSEric Fiselier
36887894aaSEric Fiselier    if len(args.files) < 2:
37*7bfaa0f0STobias Hieta        print_and_exit("fewer than 2 inputs provided")
38*7bfaa0f0STobias Hieta    data = ""
39887894aaSEric Fiselier    for filename in args.files:
40*7bfaa0f0STobias Hieta        with open(filename, "r") as f:
41887894aaSEric Fiselier            data += f.read()
42*7bfaa0f0STobias Hieta        if len(data) != 0 and data[-1] != "\n":
43*7bfaa0f0STobias Hieta            data += "\n"
44887894aaSEric Fiselier    assert len(data) > 0 and "cannot cat empty files"
45*7bfaa0f0STobias Hieta    with open(args.output, "w") as f:
46887894aaSEric Fiselier        f.write(data)
47887894aaSEric Fiselier
48887894aaSEric Fiselier
49*7bfaa0f0STobias Hietaif __name__ == "__main__":
50887894aaSEric Fiselier    main()
51887894aaSEric Fiselier    sys.exit(0)
52