Skip to content

codeskyblue/fswatch

Folders and files

NameName
Last commit message
Last commit date
Apr 8, 2019
Jul 24, 2016
Aug 8, 2016
Apr 8, 2019
Oct 4, 2014
Apr 23, 2014
Feb 16, 2016
Sep 29, 2013
Aug 12, 2020
Feb 25, 2016
Aug 12, 2020
Aug 12, 2020

Repository files navigation

fswatch

Build Status 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 get -u -v github.com/codeskyblue/fswatch

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

Watchers

Forks

Packages

No packages published

Languages