aboutsummaryrefslogblamecommitdiffstatshomepage
path: root/pull/main.py
blob: d111da7a554fe436a7195c6a277b38d45c332424 (plain) (tree)


































































                                                                             
from argparse import ArgumentParser
import logging
import sys

from pull.cgit import CGit, Output
from pull.my_repos import MY_REPOS


DEFAULT_OUTPUT_DIR = 'output'

DEFAULT_CGIT_CLONE_USER = 'egor'
DEFAULT_CGIT_CLONE_HOST = 'tensin-ext1.home'
DEFAULT_CGIT_CLONE_PORT = 8080


def set_up_logging():
    logging.basicConfig(
        level=logging.DEBUG,
        datefmt='%Y-%m-%d %H:%M:%S',
        format='%(asctime)s | %(levelname)s | %(message)s')


def parse_args(argv=None):
    if argv is None:
        argv = sys.argv[1:]
    parser = ArgumentParser()
    parser.add_argument('--output', metavar='PATH',
                        default=DEFAULT_OUTPUT_DIR,
                        help='output directory path')
    parser.add_argument('--cgit-user', metavar='USERNAME',
                        default=DEFAULT_CGIT_CLONE_USER,
                        help='cgit clone username')
    parser.add_argument('--cgit-host', metavar='HOST',
                        default=DEFAULT_CGIT_CLONE_HOST,
                        help='cgit clone host')
    parser.add_argument('--cgit-port', metavar='PORT', type=int,
                        default=DEFAULT_CGIT_CLONE_PORT,
                        help='cgit clone port number')
    parser.add_argument('--repo', metavar='REPO_ID', nargs='*', dest='repos',
                        help='repos to pull')
    return parser.parse_args(argv)


def main(args=None):
    set_up_logging()
    try:
        args = parse_args(args)
        cgit = CGit(args.cgit_user, args.cgit_host, args.cgit_port)
        output = Output(args.output, cgit)
        success = True
        for repo in MY_REPOS:
            if args.repos is None or repo.repo_id in args.repos:
                if not output.pull(repo):
                    success = False
        if success:
            logging.info('All repositories were updated successfully')
            return 0
        else:
            logging.warning("Some repositories couldn't be updated!")
            return 1
    except Exception as e:
        logging.exception(e)
        raise


if __name__ == '__main__':
    sys.exit(main())