Usage

<command> Command to execute as a single arg, i.e. put it inside
double quotes, or else spaces and other special
characters should be escaped.
--help|-h Show this help message and exit.
--ignore|-i=<file> File or directory to ignore. Any directories of the
given name (and their subdirs) are excluded from the
search for changed files. Any modification to files of
the given name are ignored. The given value is
compared to basenames, so for example, "--ignore=def"
will skip the contents of directory "./abc/def/" and
will ignore file "./ghi/def". Can be specified multiple
times.
--verbose|-v Display the names of changed files before the command
output.
--version Show version number and exit.

Example

rerun --verbose --ignore=myoutputdir "python -m unittest mymodule"

This will run your tests whenever you save your source code in the current
dir or its subdirectories, but it won’t rerun the tests a second time when .pyo
files get updated as a result of executing the tests, nor when our program
writes to myoutputdir.

This is handy for seeing the new test results in another console window after
you hit ‘save’ in your editor, without having to change window focus.

Description

Rerun detects changes to files by polling file modification times once per
second. It looks in the current directory and all its subdirectories. On
detecting any changes, it clears the terminal and reruns the given command.

It always ignores directories called .svn, .git, .hg, .bzr, build and dist.
Additions to this list can be given using –ignore.

It always ignores files ending with .pyc or .pyo. This isn’t currently
user-overrideable.

While polling sounds sub-optimal, I’ve yet to encounter a project large
enough that rerun’s resource usage was even noticeable. (Plus, see discussion
of ‘watchdog’ below.)

Dependencies

Tested on MacOSX, Ubuntu, WindowsXP, Windows 7.

Tested on Python 2.6, 2.7 and 3.4.

Python 2.6 requires argparse to be installed -
see requirements_2.6.txt.

No other dependencies.

Hacking

To run tests requires mock, tox. On Python 2.6 also requires unittest2.
See requirements_dev.txt and requirements_dev_2.6.txt.

See Makefile for a cheatsheet of commonly used commands I use while hacking
on this.

However, watchmedo doesn’t seem to work for my primary use case, which is
re-running tests when files are saved by Vim. This is due to the way Vim writes
to temporary files and then moves the temp file to overwrite data atomically.
Vim thus guarantees that the user never loses data, but also fails to generate
the correct FS events that watchmedo is looking for.