import os import subprocess here = os.path.abspath(os.path.dirname(__file__)) # Workaround for https://github.com/git-for-windows/git/issues/607 if os.name == 'nt': for (root, dnames, files) in os.walk(here): if 'node_modules' in dnames: subprocess.check_call(['rmdir', '/s', '/q', 'node_modules'], cwd=root, shell=True) dnames.remove('node_modules') subprocess.check_call('python -m pip uninstall -y jupyterlab'.split(), cwd=here) def resolvePattern(pat): """handle a leading `#` or `@` in a pattern """ pat = pat.strip() if not pat or pat.startswith('#'): return [] elif pat.startswith('@'): raw = pat[1:] return [ raw, f'!packages/**/{raw}', f'!**/node_modules/**/{raw}' ] else: return [pat] # get the exclude patterns listed in .cleanignore with open(os.path.join(here, '.cleanignore')) as f: git_clean_exclude = [f'--exclude={pat}' for line in f for pat in resolvePattern(line)] git_clean_command = ['git', 'clean', '-dfx'] + git_clean_exclude subprocess.check_call(git_clean_command, cwd=here)