summaryrefslogtreecommitdiffstats
path: root/hacking/build-ansible.py
diff options
context:
space:
mode:
Diffstat (limited to 'hacking/build-ansible.py')
-rwxr-xr-xhacking/build-ansible.py103
1 files changed, 103 insertions, 0 deletions
diff --git a/hacking/build-ansible.py b/hacking/build-ansible.py
new file mode 100755
index 0000000..c108c18
--- /dev/null
+++ b/hacking/build-ansible.py
@@ -0,0 +1,103 @@
+#!/usr/bin/env python
+# coding: utf-8
+# PYTHON_ARGCOMPLETE_OK
+# Copyright: (c) 2019, Ansible Project
+# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+
+# Make coding more python3-ish
+from __future__ import (absolute_import, division, print_function)
+__metaclass__ = type
+
+
+import argparse
+import os.path
+import sys
+
+from straight.plugin import load
+
+try:
+ import argcomplete
+except ImportError:
+ argcomplete = None
+
+
+def build_lib_path(this_script=__file__):
+ """Return path to the common build library directory."""
+ hacking_dir = os.path.dirname(this_script)
+ libdir = os.path.abspath(os.path.join(hacking_dir, 'build_library'))
+
+ return libdir
+
+
+def ansible_lib_path(this_script=__file__):
+ """Return path to the common build library directory."""
+ hacking_dir = os.path.dirname(this_script)
+ libdir = os.path.abspath(os.path.join(hacking_dir, '..', 'lib'))
+
+ return libdir
+
+
+sys.path.insert(0, ansible_lib_path())
+sys.path.insert(0, build_lib_path())
+
+
+from build_ansible import commands, errors
+
+
+def create_arg_parser(program_name):
+ """
+ Creates a command line argument parser
+
+ :arg program_name: The name of the script. Used in help texts
+ """
+ parser = argparse.ArgumentParser(prog=program_name,
+ description="Implements utilities to build Ansible")
+ return parser
+
+
+def main():
+ """
+ Start our run.
+
+ "It all starts here"
+ """
+ subcommands = load('build_ansible.command_plugins', subclasses=commands.Command)
+
+ arg_parser = create_arg_parser(os.path.basename(sys.argv[0]))
+ arg_parser.add_argument('--debug', dest='debug', required=False, default=False,
+ action='store_true',
+ help='Show tracebacks and other debugging information')
+ subparsers = arg_parser.add_subparsers(title='Subcommands', dest='command',
+ help='for help use build-ansible.py SUBCOMMANDS -h')
+ subcommands.pipe('init_parser', subparsers.add_parser)
+
+ if argcomplete:
+ argcomplete.autocomplete(arg_parser)
+
+ args = arg_parser.parse_args(sys.argv[1:])
+ if args.command is None:
+ print('Please specify a subcommand to run')
+ sys.exit(1)
+
+ for subcommand in subcommands:
+ if subcommand.name == args.command:
+ command = subcommand
+ break
+ else:
+ # Note: We should never trigger this because argparse should shield us from it
+ print('Error: {0} was not a recognized subcommand'.format(args.command))
+ sys.exit(1)
+
+ try:
+ retval = command.main(args)
+ except (errors.DependencyError, errors.MissingUserInput, errors.InvalidUserInput) as e:
+ print(e)
+ if args.debug:
+ raise
+ sys.exit(2)
+
+ sys.exit(retval)
+
+
+if __name__ == '__main__':
+ main()