blob: 69ce53a1ef6633dbb68b45169f8ba9a363c12015 [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright 2013 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Generates a shell or batch script to run a command."""
import argparse
import os
import string
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--output', required=True, help='Output file')
parser.add_argument('--command', required=True, help='Command to run')
parser.add_argument('--cwd', required=False, help='Working directory')
parser.add_argument('rest', nargs='*', help='Arguments to pass to the command')
# Rest of the arguments are passed to the command.
args = parser.parse_args()
out_path = os.path.dirname(args.output)
if not os.path.exists(out_path):
os.makedirs(out_path)
script = string.Template(
'''#!/bin/sh
set -e
# Set a trap to restore the working directory.
trap "popd > /dev/null" EXIT
pushd "$cwd" > /dev/null
$command $args
'''
)
params = {
'command': args.command,
'args': ' '.join(args.rest),
'cwd': args.cwd if args.cwd else '',
}
with open(args.output, 'w') as f:
f.write(script.substitute(params))
# Make the script executable.
os.chmod(args.output, 0o755)
if __name__ == '__main__':
main()