You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
2.2 KiB
Python

import argparse
import os
import sys
import logging
from vcs_mirrors.lib.config import load_config
from vcs_mirrors.lib.config import save_config
from vcs_mirrors.lib.loader import load_commands
DEFAULT_CONFIG_FILE = os.getenv('VCS_MIRROR_CONFIG', 'vcs-mirrors.yaml')
DEFAULT_LOG_LEVEL = logging.INFO
DEFAULT_LOG_FORMAT = '%(levelname)-8.8s %(message)s'
def main(args=None):
"""The main routine."""
if args is None:
args = sys.argv[1:]
parser = argparse.ArgumentParser(
description='vcs-mirror Command-Line Interface')
subparsers = parser.add_subparsers(title='subcommands',
description='Main vcs-mirror CLI commands',
dest='subcommand',
help='Choose and run with --help')
subparsers.required = True
cmds = load_commands()
for name, cmd in cmds.items():
subparser = subparsers.add_parser(name)
subparser.set_defaults(which=name)
subparser.add_argument('--config',
help='Application configuration file',
dest='yaml_file',
required=False,
default=DEFAULT_CONFIG_FILE)
subparser.add_argument('-q', '--quiet', action='store_const',
const=logging.CRITICAL, dest='verbosity',
help='Show only critical errors.')
subparser.add_argument('-v', '--debug', action='store_const',
const=logging.DEBUG, dest='verbosity',
help='Show all messages, including debug messages.')
cmd.configure_argparse(subparser)
# Parse command-line arguments
parsed_args = vars(parser.parse_args(args))
# Initialize logging from
level = parsed_args.get('verbosity') or DEFAULT_LOG_LEVEL
logging.basicConfig(level=level, format=DEFAULT_LOG_FORMAT)
config = load_config(parsed_args['yaml_file'])
# Execute the command
which_command = parsed_args['which']
result = cmds[which_command].execute(config, parsed_args)
if result != 0:
sys.exit(result)
save_config(config, parsed_args['yaml_file'])