fswatch is a developer tool that triggers commands in response to filesystem changes. Works well on Mac, Linux, and should also works on Windows(not well tested).
go get -u -v github.com/codeskyblue/fswatch
Create a config file
.fsw.yml, quickly generated by the following command.
config file example
desc: Auto generated by fswatch [fswatch] triggers: - pattens: - '**/*.go' - '**/*.c' # also support '!**/test_*.go' env: DEBUG: "1" # if shell is true, $cmd will be wrapped with `bash -c` shell: true cmd: go test -v delay: 100ms stop_timeout:1s signal: "KILL" kill_signal: "SIGTERM" watch_paths: - . watch_depth: 5
Every time you edit a file. Command
go test -v will be called.
$ fswatch fswatch >>> exec start: go test -v # github.com/codeskyblue/fswatch ./fswatch.go:281: main redeclared in this block previous declaration at ./config.go:354 fswatch >>> program exited: exit status 2 fswatch >>> finish in 145.499911ms
You should know
How fswatch kill process
fswatch send signal to all process when restart. (mac and linux killed by pgid, windows by taskkill)
Ctrl+C will trigger fswatch quit and kill all process it started.
More about the pattens. The patten has the same rule like
So you can write like this.
- pattens: - '*.go' - '!*_test.go' - '!**/bindata.go'
main.go changed will trigger command, but
libs/bindata.go will be ignored.
too many open files
For mac, run the following command
sysctl -w kern.maxfiles=20480 sysctl -w kern.maxfilesperproc=18000 ulimit -S -n 2048
Chinese Blog: http://my.oschina.net/goskyblue/blog/194240
I reviewed the first version of fswatch(which was taged 0.1). The code I look now is shit. So I deleted almost 80% code, And left some very useful functions.
- https://github.com/emcrisostomo/fswatch write with cpp
- https://github.com/Unknwon/bra Funny name.