7 releases

Uses old Rust 2015

0.4.2 Mar 26, 2018
0.4.1 Jul 15, 2017
0.3.2 Jun 4, 2017
0.2.0 Feb 20, 2017
0.0.4 Feb 20, 2017

#1003 in Development tools

31 downloads per month

MIT license

15KB
241 lines

Fwatcher

Auto run command when some files changed.

Install

fwatcher is implemented by rust language, so you need cargo command:

cargo install fwatcher

fwatcher will be installed in your cargo binary directory(~/.cargo/bin/).

CLI

fwarcher can be use as a command:

$ fwatcher -h
Usage:
    fwatcher [options] CMD

Options:
    -h, --help          Display this message
    -v, --version       Print version info
    -r, --restart       Auto restart command, default to false
    -d, --directory <dir>
                        Watch directory, default to current directory
    -p, --pattern <pattern>
                        Watch file glob pattern, default to "*"
    -P, --exclude_pattern <exclude_pattern>
                        Watch file glob pattern exclusively, default null
        --delay <second>
                        Delay in seconds for watcher, default to 2
    -i, --interval <second>
                        Interval in seconds to scan filesystem, default to 1

For example to search recursively for python files in the current directory and run pytest when a file is updated:

fwatcher -p "**/*.py" pytest --maxfail=2

you can also use more than one directory/pattern option:

fwatcher -d src -d test -p "**/*.py" -p "**/*.html" pytest --maxfail=2

The --restart option kills the command if it's still running when a filesystem change happens. Can be used to restart locally running webservers on updates, or kill long running tests and restart on updates:

fwatcher -d src -p "**/*.py" --restart run_forever_cmd

Rust Lib

Dependencies in your project's Cargo.toml:

[dependencies]
glob = "0.2"
notify = "4.0"
fwatcher = "*"

The following example shows simple usage:

extern crate glob;
extern crate fwatcher;

use fwatcher::Fwatcher;
use glob::Pattern;
use std::path::PathBuf;
use std::time::Duration;


fn main() {
    let dirs =vec![PathBuf::from("src")];
    let cmd = vec!["pytest".to_string()];

    let mut fwatcher = Fwatcher::new(dirs, cmd);
    fwatcher.pattern(Pattern::new("**/*.py").unwrap())
            .exclude_pattern(Pattern::new("**/.git/**").unwrap())
            .interval(Duration::new(1, 0))
            .restart(false)
            .run();
}

Dependencies

~0.8–8.5MB
~56K SLoC