Skip to content

codeskyblue/fswatch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

149 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fswatch

Build status

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).

Install

go install github.com/codeskyblue/fswatch@latest

Simple way to use fswatch

Usage example

$ fswatch -v
3.0
$ fswtach --help
show help message ...

Watch file change event and trigger command

TODO: now only watch *.go, *.c, *.py files, watch depth = 0 (current directory)

$ fswatch sh -c "ls -l | wc -l"
fswatch >>> [] exec start: sh -c 'ls -l | wc -l'
       8
fswatch >>> [] finish in 11.822873ms
fswatch >>> changed: fswatch.go
fswatch >>> delay: 100ms
fswatch >>> [] exec start: [sh -c ls -l | wc -l]
       8
fswatch >>> [] finish in 13.606428ms
^Cfswatch >>> Catch signal interrupt!
fswatch >>> Kill all running ... Done

Hard way to use fswatch (not recommend)

Step 1

Create a config file fsw.yml

config file example though command fswatch with no arguments

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

Step 2

Run fswatch directly. 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

support specify config file through fswatch --config myfsw.yml

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.

Pattens

More about the pattens. The patten has the same rule like .gitignore. So you can write like this.

- pattens:
  - '*.go'
  - '!*_test.go'
  - '!**/bindata.go'

main.go changed will trigger command, but a_test.go and libs/bindata.go will be ignored.

FAQs

too many open files

For mac, run the following command

sysctl -w kern.maxfiles=20480
sysctl -w kern.maxfilesperproc=18000
ulimit -S -n 2048

reference

Other

Chinese Blog: http://my.oschina.net/goskyblue/blog/194240

Friendly link:

Code History

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.

Alternative

LICENSE

Under MIT

About

Watch file change, and trigger commands. (Cross platform)

Resources

License

Stars

348 stars

Watchers

17 watching

Forks

Packages

 
 
 

Contributors

Languages