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)