https://github.com/softdevteam/rerun_except
Specify which files should not trigger a cargo rebuild
https://github.com/softdevteam/rerun_except
Last synced: 9 months ago
JSON representation
Specify which files should not trigger a cargo rebuild
- Host: GitHub
- URL: https://github.com/softdevteam/rerun_except
- Owner: softdevteam
- License: other
- Created: 2019-05-24T10:10:03.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2021-03-01T11:36:21.000Z (almost 5 years ago)
- Last Synced: 2025-01-25T18:04:24.646Z (about 1 year ago)
- Language: Rust
- Size: 16.6 KB
- Stars: 0
- Watchers: 5
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGES.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# rerun_except
Specify which files should *not* trigger a `cargo` rebuild.
In normal operation, `cargo` rebuilds a project when any potentially relevant
file changes. One can use the
[`rerun-if-changed`](https://doc.rust-lang.org/cargo/reference/build-scripts.html#change-detection)
instruction to tell `cargo` to only rebuild if certain files are changed.
However, it is easy to forget to add new files when using `rerun-if-changed`,
causing `cargo` not to rebuild a project when it should.
`rerun_except` inverts this logic, causing `cargo` to rebuild a project when a
file changes *unless you explicitly ignored that file*. This is safer than
`rerun-if-changed` because if you forget to explicitly ignore files, then
`cargo` will still rebuild your project.
`rerun_except` uses the [`ignore`](https://crates.io/crates/ignore) library to
specify which files to ignore in `gitignore` format. Note that explicit ignore
files in your project (e.g. `.gitignore`) are implicitly added to the list of
ignored files.
For example if you have the following file layout:
```text
proj/
.gitignore
Cargo.toml
src/
lib.rs
lang_tests/
run.rs
test1.lang
test2.lang
target/
...
```
and you do not want the two `.lang` files to trigger a rebuild then you would
tell `rerun_except` to exclude `lang_tests/*.lang`. Assuming, as is common, that your
`.gitignore` file also the `target/` directory, then `rerun_except` will
also ignore the `target` directory.
Adding a new file such as `lang_tests/test3.lang` will not trigger a rebuild
(since it is covered by the ignore glob `lang_tests/*.lang`), but adding a new
file such as `build.rs` will trigger a rebuild (since it is not covered by an
ignore glob).
To use `rerun_except` in this manner you simply need to call
`rerun_except::rerun_except` with an array of ignore globs in [`gitignore`
format](https://git-scm.com/docs/gitignore) as part of your `build.rs` file:
```rust,ignore
use rerun_except::rerun_except;
fn main() {
rerun_except(&["lang_tests/*.lang"]).unwrap();
}
```