~ruther/qmk_firmware

e35bb8ebfad8b8ce40de98e9607fb6dbf8d8fff4 — Joel Challis 2 years ago 66d56a9
Add force support to 'qmk git-submodule' (#19705)

1 files changed, 18 insertions(+), 3 deletions(-)

M lib/python/qmk/cli/git/submodule.py
M lib/python/qmk/cli/git/submodule.py => lib/python/qmk/cli/git/submodule.py +18 -3
@@ 7,14 7,21 @@ from qmk import submodules

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

IGNORE_DIRS = [
    'lib/arm_atsam',
    'lib/fnv',
    'lib/lib8tion',
    'lib/python',
    'lib/usbhost',
]


@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.argument('-f', '--force', action='store_true', help='Flag to remove unexpected directories')
@cli.subcommand('Git Submodule actions.')
def git_submodule(cli):
    """Git Submodule actions


@@ 29,7 36,15 @@ def git_submodule(cli):
                cli.run(['git', 'submodule', 'update', '--depth=50', '--init', name], capture_output=False)
        return True

    for folder in REMOVE_DIRS:
    # can be the default behavior with: qmk config git_submodule.force=True
    remove_dirs = REMOVE_DIRS
    if cli.config.git_submodule.force:
        # Also trash everything that isnt marked as "safe"
        for path in normpath('lib').iterdir():
            if not any(ignore in path.as_posix() for ignore in IGNORE_DIRS):
                remove_dirs.append(path)

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