boot-clj / boot

Build tooling for Clojure.
https://boot-clj.github.io/
Eclipse Public License 1.0
1.75k stars 179 forks source link

Use filesystem events directly in watcher #746

Closed jeroenvandijk closed 5 years ago

jeroenvandijk commented 5 years ago

The current file watcher is very slow on large projects. This change is a naive approach to use the available filesystem events directly in order to prevent the costly rescanning of the filesystem.

Motivation and Context

The file watcher is a fundamental part of the virtual filesystem that Boot implements. When there is a delay in updating this filesystem this delay is forwarded to any system that depends on responding to handling file updates. Especially when an external system is used for file updates this becomes visible (e.g. Hawk). For small projects this is somewhat manageable with correctly timed Thread/sleeps [after being bitten by random failures due to the subtle delay], for larger projects these updates become too slow and the delay is noticable and annoying.

How Has This Been Tested?

I've tested it manually with an autotest script to see if the latency was improved. It is unclear if there are edge cases that are now broken.

My environment is Mac OSX (High Sierra). Since this change might behave differently accross filesystems it needs to be tested in other environments too.

Types of changes

Checklist:

jeroenvandijk commented 5 years ago

Hmm i think my "fix" doesn't add a (noticable) improvement. I just found out it's actually my editor (emacs) that is slow in saving my files :see_no_evil: With Textmate for both the old code and new code the effect is instant, with emacs there is a delay in both cases.