Watching a tree containing a symlink to '/' adds a watch to the whole file system, which is probably unwanted. To avoid such behavior by default, following symlinks has to be enabled explicitly. The code may still be vulnerable to TOCTOU.
Further changes:
Use os.walk() to traverse the tree to watch
Remove duplicate add_watch() for IN_MOVED_TO
flake8
Warn instead of failing hard if adding a watch in a tree fails. Can be, for example, a permission error.
Watching a tree containing a symlink to '/' adds a watch to the whole file system, which is probably unwanted. To avoid such behavior by default, following symlinks has to be enabled explicitly. The code may still be vulnerable to TOCTOU.
Further changes:
os.walk()
to traverse the tree to watchadd_watch()
forIN_MOVED_TO