-
Notifications
You must be signed in to change notification settings - Fork 0
/
pack.py
70 lines (53 loc) · 1.81 KB
/
pack.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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env python3
import os
import glob
import zipfile
# A completely standalone, drop-in script to automate
# recursively zipping up the current directory into a
# ZIP archive while skipping files matching shell-
# style wildcard filenames in each directory.
OUTPUT_FILENAME = 'ledscreen.zip'
BLACKLIST_PATTERNS = [
'**/.idea/**',
'**/.idea/**/.*',
'**/env/**/.*',
'**/env/**',
'**/__pycache__/**',
'.git/**',
'screend/frames/**',
'*.zip'
]
BLACKLIST_PATTERNS_DEV = [
'**/env/**/.*',
'**/env/**',
'**/__pycache__/**',
'.git/**',
'screend/frames/*.jpg',
'screend/frames/*.jpeg',
'screend/frames/*.png',
'*.zip'
]
BASE_DIR = '.'
def run():
active_blacklist = BLACKLIST_PATTERNS
blacklisted_paths = []
for pattern in active_blacklist:
entry_names = glob.glob(pattern, recursive=True)
for matched_name in entry_names:
# print(f'pattern "{pattern}" matched on "{matched_name}"')
if matched_name not in blacklisted_paths:
blacklisted_paths.append(os.path.join(BASE_DIR, matched_name))
print(f'{len(blacklisted_paths)} blacklisted files from {len(active_blacklist)} patterns')
all_paths = set()
for current_dir, dirs, files in os.walk(BASE_DIR):
for file in files:
all_paths.add(os.path.join(current_dir, file))
print(f'{len(all_paths)} total files')
whitelisted_paths = all_paths - set(blacklisted_paths)
print(f'{len(whitelisted_paths)} whitelisted files')
archive_file = zipfile.ZipFile(OUTPUT_FILENAME, mode='w', compression=zipfile.ZIP_BZIP2)
for whitelisted in whitelisted_paths:
archive_file.write(whitelisted)
print(f'created archive "{OUTPUT_FILENAME}"')
if __name__ == '__main__':
run()