summaryrefslogtreecommitdiffstats
path: root/lib/python/qmk/cli/git/submodule.py
blob: 9f354c021e00406bd251db84b3e62cb172ee337a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import shutil

from milc import cli

from qmk.path import normpath
from qmk import submodules

REMOVE_DIRS = [
    'lib/ugfx',
    'lib/pico-sdk',
    'lib/chibios-contrib/ext/mcux-sdk',
    'lib/lvgl',
]


@cli.argument('--check', arg_only=True, action='store_true', help='Check if the submodules are dirty, and display a warning if they are.')
@cli.argument('--sync', arg_only=True, action='store_true', help='Shallow clone any missing submodules.')
@cli.subcommand('Git Submodule actions.')
def git_submodule(cli):
    """Git Submodule actions
    """
    if cli.args.check:
        return all(item['status'] for item in submodules.status().values())

    if cli.args.sync:
        cli.run(['git', 'submodule', 'sync', '--recursive'])
        for name, item in submodules.status().items():
            if item['status'] is None:
                cli.run(['git', 'submodule', 'update', '--depth=50', '--init', name], capture_output=False)
        return True

    for folder in REMOVE_DIRS:
        if normpath(folder).is_dir():
            print(f"Removing '{folder}'")
            shutil.rmtree(folder)

    cli.run(['git', 'submodule', 'sync', '--recursive'], capture_output=False)
    cli.run(['git', 'submodule', 'update', '--init', '--recursive', '--progress'], capture_output=False)