EMF_Camp_Badge/.development/sync.py

93 lines
2.7 KiB
Python

import os, shutil, sys, fnmatch
def sync(storage, patterns, resources, verbose):
root = get_root(verbose)
# Add all paths that are already files
paths = set([p for p in (patterns or []) if os.path.isfile(os.path.join(root, p))])
# Always copy boot.py
paths.add("boot.py")
# wifi.json
wifi_path = os.path.join(root, "wifi.json")
if os.path.isfile(wifi_path):
paths.add(wifi_path)
if not patterns:
patterns = ["*"]
synced_resources = []
for pattern in patterns:
found = False
for key, resource in resources.items():
if fnmatch.fnmatch(key, pattern):
found = True
synced_resources.append(key)
if verbose:
print("Resource %s is going to be synced" % key)
for path in resource['files'].keys():
paths.add(path)
if not found:
print("WARN: No resources to copy found for pattern %s" % patterns)
if not verbose:
print("Copying %s files: " % len(paths), end="")
for path in paths:
if not path:
continue
rel_path = os.path.relpath(path, root)
if rel_path.startswith(".") or os.path.isdir(path) or os.path.islink(path):
continue
if verbose:
print("Copying %s..." % rel_path)
else:
print(".", end="")
target = os.path.join(storage, rel_path)
target_dir = os.path.dirname(target)
ensure_dir(target_dir, storage)
if not os.path.exists(target_dir):
os.makedirs(target_dir)
shutil.copy2(path, target)
if verbose:
print("Files copied successfully")
else:
print(" DONE")
return synced_resources
def ensure_dir(path, storage):
# micropython has a tendecy
if not path or path == storage:
return
if os.path.isfile(path):
os.remove(path)
ensure_dir(os.path.dirname(path), storage)
def set_boot_app(storage, app_to_boot):
path = os.path.join(storage, 'once.txt')
try:
os.remove(path)
except OSError:
pass
with open(path, 'w') as f:
f.write(app_to_boot + "\n")
if app_to_boot:
print("setting next boot to %s" % app_to_boot)
def set_no_boot(storage):
path = os.path.join(storage, 'no_boot')
try:
os.remove(path)
except OSError:
pass
with open(path, 'w') as f:
f.write("\n")
def get_root(verbose=False):
root = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..'))
if not os.path.isfile(os.path.join(root, "boot.py")):
print("Path %s doesn't contain a boot.py, aborting. Something is probably wrong with your setup.")
sys.exit(1)
return root