summaryrefslogtreecommitdiff
path: root/hacking/build-ansible.py
diff options
context:
space:
mode:
Diffstat (limited to 'hacking/build-ansible.py')
-rwxr-xr-xhacking/build-ansible.py130
1 files changed, 0 insertions, 130 deletions
diff --git a/hacking/build-ansible.py b/hacking/build-ansible.py
deleted file mode 100755
index 717cf1c1..00000000
--- a/hacking/build-ansible.py
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/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 importlib
-import inspect
-import os.path
-import pkgutil
-import sys
-import typing as t
-
-try:
- import argcomplete
-except ImportError:
- argcomplete = None
-
-C = t.TypeVar('C')
-
-
-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 load(package: str, subclasses: t.Type[C]) -> list[t.Type[C]]:
- """Load modules in the specified package and return concrete types that derive from the specified base class."""
- for module in pkgutil.iter_modules(importlib.import_module(package).__path__, f'{package}.'):
- try:
- importlib.import_module(module.name)
- except ImportError:
- pass # ignore plugins which are missing dependencies
-
- types: set[t.Type[C]] = set()
- queue: list[t.Type[C]] = [subclasses]
-
- while queue:
- for child in queue.pop().__subclasses__():
- queue.append(child)
-
- if not inspect.isabstract(child):
- types.add(child)
-
- return sorted(types, key=lambda sc: sc.__name__)
-
-
-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')
-
- for subcommand in subcommands:
- subcommand.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()