Skip to content

Commit

Permalink
[scripts] Enhance checkout_submodules.py script
Browse files Browse the repository at this point in the history
Add options to force submodule updates, and deinitialize
submodules not matched by the platform filter.

Signed-off-by: Damian Krolik <[email protected]>
  • Loading branch information
Damian-Nordic committed Aug 11, 2022
1 parent f2bbce7 commit bd5a0eb
Showing 1 changed file with 30 additions and 8 deletions.
38 changes: 30 additions & 8 deletions scripts/checkout_submodules.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
Module = namedtuple('Module', 'name path platforms')


def load_module_info() -> list:
def load_module_info() -> None:
config = configparser.ConfigParser()
config.read(os.path.join(CHIP_ROOT, '.gitmodules'))

Expand All @@ -69,17 +69,31 @@ def module_matches_platforms(module: Module, platforms: set) -> bool:
return bool(platforms & module.platforms)


def checkout_modules(modules: list, shallow: bool) -> None:
def make_chip_root_safe_directory() -> None:
# ensure no errors regarding ownership in the directory. Newer GIT seems to require this:
subprocess.check_call(['git', 'config', '--global', '--add', 'safe.directory', CHIP_ROOT])


def checkout_modules(modules: list, shallow: bool, force: bool) -> None:
names = [module.name.replace('submodule "', '').replace('"', '') for module in modules]
names = ', '.join(names)
logging.info(f'Checking out: {names}')

# ensure no errors regarding ownership in the directory. Newer GIT seems to
# require this:
subprocess.check_call(['git', 'config', '--global', '--add', 'safe.directory', CHIP_ROOT])

cmd = ['git', '-C', CHIP_ROOT, 'submodule', 'update', '--init']
cmd += ['--depth', '1'] if shallow else []
cmd += ['--force'] if force else []
cmd += [module.path for module in modules]

subprocess.check_call(cmd)


def deinit_modules(modules: list, force: bool) -> None:
names = [module.name.replace('submodule "', '').replace('"', '') for module in modules]
names = ', '.join(names)
logging.info(f'Deinitializing: {names}')

cmd = ['git', '-C', CHIP_ROOT, 'submodule', 'deinit']
cmd += ['--force'] if force else []
cmd += [module.path for module in modules]

subprocess.check_call(cmd)
Expand All @@ -92,13 +106,21 @@ def main():
parser.add_argument('--shallow', action='store_true', help='Fetch submodules without history')
parser.add_argument('--platform', nargs='+', choices=ALL_PLATFORMS, default=[],
help='Process submodules for specific platforms only')
parser.add_argument('--force', action='store_true', help='Perform action despite of warnings')
parser.add_argument('--deinit-unmatched', action='store_true',
help='Deinitialize submodules for non-matching platforms')
args = parser.parse_args()

modules = load_module_info()
modules = list(load_module_info())
selected_platforms = set(args.platform)
selected_modules = [m for m in modules if module_matches_platforms(m, selected_platforms)]
unmatched_modules = [m for m in modules if not module_matches_platforms(m, selected_platforms)]

make_chip_root_safe_directory()
checkout_modules(selected_modules, args.shallow, args.force)

checkout_modules(selected_modules, args.shallow)
if args.deinit_unmatched:
deinit_modules(unmatched_modules, args.force)


if __name__ == '__main__':
Expand Down

0 comments on commit bd5a0eb

Please sign in to comment.