Executes commands in response to file modifications
Go to file
Félix Saparelli 2d633d9177
Use proper ignore API so path globs match correctly
This notably fixes the v1 "confusing" behaviour when matching folders,
where the expectation is for any of:

folder
folder/
/folder

to match the folder and all paths below it, but v1 would only do this
when *both* of these were added:

**/folder
**/folder/**

Which is very verbose and has caught literally everyone who's ever tried
to do this kinda thing.

The old behaviour is preserved in the globset filterer, for
compatibility, as there are other small behavioural changes that this
affects, even though the new behaviour in the tagged filterer is
arguably the most correct and the old is a bug.
2021-12-01 01:41:07 +13:00
.github/workflows Add manual trigger to audit and check 2021-10-26 21:14:47 +13:00
bin Apply tabs project-wide 2021-08-24 20:22:25 +12:00
cli Pre-add support for logical grouping of options in help 2021-11-22 21:24:59 +13:00
completions Apply tabs project-wide 2021-08-24 20:22:25 +12:00
doc Add --no-process-group flag 2021-07-22 00:56:35 +12:00
lib Use proper ignore API so path globs match correctly 2021-12-01 01:41:07 +13:00
test Remask received signal after re-raising it 2016-12-15 09:41:10 -05:00
.editorconfig Fix cli tests 2021-08-24 22:53:44 +12:00
.gitignore Add rpm support with cargo-generate-rpm 2021-07-10 03:48:12 +12:00
.rustfmt.toml Apply tabs project-wide 2021-08-24 20:22:25 +12:00
CITATION.cff cli: v1.17.1 2021-07-31 06:37:29 +12:00
CONTRIBUTING.md Split the versioning of the lib and cli (in theory) 2021-05-01 04:22:33 +12:00
Cargo.lock Replace ExitStatus with our own type in Event 2021-10-22 05:38:48 +13:00
Cargo.toml Opt into resolver=2 2021-10-20 00:47:41 +13:00
LICENSE Create LICENSE 2016-09-18 16:43:26 -04:00
README.md Add repology badge 2021-09-29 01:43:36 +13:00

README.md

CI status

Watchexec

Software development often involves running the same commands over and over. Boring!

watchexec is a simple, standalone tool that watches a path and runs a command whenever it detects modifications.

Example use cases:

  • Automatically run unit tests
  • Run linters/syntax checkers

Features

  • Simple invocation and use, does not require a cryptic command line involving xargs
  • Runs on OS X, Linux, and Windows
  • Monitors current directory and all subdirectories for changes
  • Coalesces multiple filesystem events into one, for editors that use swap/backup files during saving
  • Loads .gitignore and .ignore files
  • Uses process groups to keep hold of forking programs
  • Provides the paths that changed in environment variables
  • Does not require a language runtime, not tied to any particular language or ecosystem
  • And more!

Quick start

Watch all JavaScript, CSS and HTML files in the current directory and all subdirectories for changes, running npm run build when a change is detected:

$ watchexec -e js,css,html npm run build

Call/restart python server.py when any Python file in the current directory (and all subdirectories) changes:

$ watchexec -r -e py -- python server.py

More usage examples: in the CLI README!

Install

Packaging status

  • As pre-built binary package: https://watchexec.github.io/downloads/
  • With your package manager for Arch, Homebrew, Nix, Scoop, Chocolatey…
  • From source with Cargo: cargo install watchexec-cli

All options in detail: in the CLI README.

Extend

  • watchexec library: to create more specialised watchexec-powered tools! such as:
  • clearscreen: to clear the (terminal) screen on every platform.
  • command group: to run commands in process groups.
  • notify: to respond to file modifications (third-party).
  • globset: to match globs (third-party).