3ad0e1aa57
Previously, when importing multiple nested ignore files, some info from the parent—notably the "root" path—would be inherited. This lead to some problems with matching of "pseudo-absolute" rules (those with a leading slash) in nested ignore files (see #745 for more details). To fix this, we now fully isolate each path of the tree during the import process. This leads to more accurate, though unfortunately slightly less performant, rule matching. The only time a builder is reused now is if two input files have the same `applies_in` value, in which case they are merged together. I have added tests to ensure correctness and prevent a regression. I also was careful to make sure no previous tests broke in any way (all changes to existing tests were made in isolation, and thus are not affected by the logic changes). As far as I can tell, the only behavior change is that now some previously-ignored rules will now be applied, which could, in very rare configurations, lead to files being unintentionally ignored. However, due to the aforementioned logic bug, those files were all ignored by git already, so I suspect the number of people actually caught off guard by this change to be extremely low, likely zero. Fixes #745. |
||
---|---|---|
.cargo | ||
.github | ||
bin | ||
completions | ||
crates | ||
doc | ||
.clippy-lints | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
.rustfmt.toml | ||
CITATION.cff | ||
CONTRIBUTING.md | ||
Cargo.lock | ||
Cargo.toml | ||
LICENSE | ||
README.md |
README.md
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
- Rebuild artifacts
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 or STDIN
- 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
- With your package manager for Arch, Debian, Homebrew, Nix, Scoop, Chocolatey…
- From binary with Binstall:
cargo binstall watchexec-cli
- As pre-built binary package from Github
- From source with Cargo:
cargo install --locked watchexec-cli
All options in detail: in the CLI README,
in the online help (watchexec -h
, watchexec --help
, or watchexec --manual
),
and in the manual page.
Augment
Watchexec pairs well with:
- checkexec: to run only when source files are newer than a target file
- just: a modern alternative to
make
- systemfd: socket-passing in development
Extend
- watchexec library: to create more specialised watchexec-powered tools.
- watchexec-events: event types for watchexec.
- watchexec-signals: signal types for watchexec.
- watchexec-supervisor: process lifecycle manager (the exec part of watchexec).
- clearscreen: to clear the (terminal) screen on every platform.
- command group: to run commands in process groups.
- ignore files: to find, parse, and interpret ignore files.
- project origins: to find the origin(s) directory of a project.
- notify: to respond to file modifications (third-party).
Downstreams
Selected downstreams of watchexec and associated crates:
- cargo watch: a specialised watcher for Rust/Cargo projects.
- cargo lambda: a dev tool for Rust-powered AWS Lambda functions.
- create-rust-app: a template for Rust+React web apps.
- dotter: a dotfile manager.
- ghciwatch: a specialised watcher for Haskell projects.
- tectonic: a TeX/LaTeX typesetting system.