Newer
Older
import click
from ocrd.decorators import ocrd_loglevel
from ocrd_utils import getLogger
from yaml import safe_load
from pkg_resources import resource_filename
from .repo import Repo
LOG = getLogger('kwalitee.cli')
def _check_cloned(ctx):
uncloned = []
for repo in ctx.repos:
if not repo.is_cloned():
uncloned.append(repo)
if uncloned:
raise Exception("Some repos not yet cloned: %s" % [str(r) for r in uncloned])
class CliCtx():
def __init__(self, config_file):
with open(config_file, 'r') as f_config_file:
self.config = safe_load(f_config_file.read())
self.repos = []
for repo_desc in self.config['repolist']:
url = repo_desc['url']
official = repo_desc.get('official', False)
compliant_cli = repo_desc.get('compliant_cli', False)
self.repos.append(Repo(self.config, url, official, compliant_cli))
pass_ctx = click.make_pass_decorator(CliCtx)
@click.group()
@click.option('-c', '--config-file', help="", default=resource_filename(__name__, 'config.yml'))
@ocrd_loglevel
@click.pass_context
def cli(ctx, config_file, **kwargs): # pylint: disable=unused-argument
ctx.obj = CliCtx(config_file)
@cli.command('clone', help='''
Clone all repos
''')
@pass_ctx
def clone_all(ctx):
for repo in ctx.repos:
if repo.is_cloned():
LOG.info("Already cloned %s" % repo)
else:
LOG.info("Cloning %s" % repo)
repo.clone()
@cli.command('pull', help='''
Pull all repos
''')
@pass_ctx
def pull_all(ctx):
_check_cloned(ctx)
for repo in ctx.repos:
LOG.info("Pulling %s" % repo)
repo.pull()
# print('%s %s -> %s' % (repo.path.is_dir(), repo.url, repo.path))