forked from jupyterlab/jupyterlab
-
Notifications
You must be signed in to change notification settings - Fork 0
/
clean.py
42 lines (33 loc) · 1.2 KB
/
clean.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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)