submodule.py (1827B)
- import shutil
- from pathlib import Path
- from milc import cli
- from qmk import submodules
- REMOVE_DIRS = [
- 'lib/ugfx',
- 'lib/chibios-contrib/ext/mcux-sdk',
- ]
- 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
- """
- 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
- # 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 Path('lib').iterdir():
- if not any(ignore in path.as_posix() for ignore in IGNORE_DIRS):
- remove_dirs.append(path)
- for folder in map(Path, remove_dirs):
- if 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)