From: Cefn Hoile Date: Sun, 18 Feb 2018 01:30:05 +0000 (+0000) Subject: Pyboard-specific filesystem synchronization behaviour X-Git-Tag: 0.1.0~4^2~132 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/407308219c2a647970137a9635cb1573ff34ef0e Pyboard-specific filesystem synchronization behaviour --- diff --git a/python/upload_pyboard_watch.py b/python/upload_pyboard_watch.py new file mode 100755 index 0000000..54dd72e --- /dev/null +++ b/python/upload_pyboard_watch.py @@ -0,0 +1,62 @@ +#!/usr/bin/python3 +# Verified on Ubuntu with dependencies... +# pip3 install watchdog +# sudo apt install rsync +import time +import subprocess +from watchdog.observers import Observer + +# the rsync command intended to selectively upload from the local repo to a feather m0 express +command = ( + 'rsync ' + '--recursive --verbose --progress ' + '--prune-empty-dirs --inplace --times --archive --whole-file ' + # prefer unittest.py source code + '--exclude="/unittest.mpy" ' + # don't upload upload https://www.youtube.com/watch?v=iEwW6D0sht0 + '--exclude="upload_*_watch.py" ' + # recurse in search + '--include="*/" ' + # filter for python source files and micropython bytecode files + '--include="*.py" ' + '--include="*.mpy" ' + # exclude everything else + '--exclude="*" ' + # rsync from folder + './ ' + # rsync to folder + '/media/cefn/PYBFLASH ' +) + +syncing = False + +def sync(): + """Synchronizes from git repo to Feather filesystem""" + global syncing + syncing = True + subprocess.run(command, shell=True) + syncing = False + +class ChangeEventHandler: + """handler for future filesystem events""" + def dispatch(self, event): + if not syncing: + sync() + +if __name__ == "__main__": + sync() + handler=ChangeEventHandler() + + # set up filesystem monitoring + observer = Observer() + observer.schedule(handler, ".", recursive=True) + observer.start() + + # await CTRL+C + try: + while True: + time.sleep(1) + except KeyboardInterrupt: + observer.stop() + # join daemon thread to shutdown interpreter + observer.join()