From b0b746664fce21ddfb7ea4fd1e5f95f35156a09e Mon Sep 17 00:00:00 2001 From: skullY Date: Sun, 30 Jun 2019 22:54:02 -0700 Subject: [PATCH] Add a `qmk clone` command --- .gitignore | 3 +++ qmk_cli/clone.py | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 qmk_cli/clone.py diff --git a/.gitignore b/.gitignore index 894a44c..4aeb218 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,6 @@ venv.bak/ # mypy .mypy_cache/ + +# QMK +qmk_firmware diff --git a/qmk_cli/clone.py b/qmk_cli/clone.py new file mode 100644 index 0000000..6b1afd7 --- /dev/null +++ b/qmk_cli/clone.py @@ -0,0 +1,40 @@ +"""Clone a qmk_firmware fork. +""" +import os +import subprocess +from pathlib import Path + +from qmk_cli.milc import cli + +default_repo = 'qmk_firmware' +default_fork = 'qmk/' + default_repo +default_branch = 'master' + +@cli.argument('--baseurl', default='https://github.com', help='The URL all git operations start from.') +@cli.argument('-b', '--branch', default=default_branch, help='The branch to clone.') +@cli.argument('destination', default=os.environ['QMK_HOME'], nargs='?', help='The directory to clone to.') +@cli.argument('fork', default=default_fork, nargs='?', help='The qmk_firmware fork to clone') +@cli.entrypoint('Clone a qmk_firmware fork.') +def main(cli): + qmk_firmware = Path(cli.args.destination) + git_clone = [ + 'git', + 'clone', + '--recurse-submodules', + '--branch=' + cli.config.general.branch, + '/'.join((cli.config.general.baseurl, cli.args.fork)), + cli.args.destination, + ] + + if qmk_firmware.exists(): + cli.log.error('Destination already exists: %s', cli.args.destination) + exit(1) + + with subprocess.Popen(git_clone, stdout=subprocess.PIPE, bufsize=1, universal_newlines=True) as p: + for line in p.stdout: + print(line, end='') + + if p.returncode != 0: + cli.log.error('git clone exited %d', p.returncode) + else: + cli.log.info('Successfully cloned %s to %s!', cli.args.fork, cli.args.destination)