Call a command when a directory changes. (Mac OS only)
icemac.callonchange calls a specific command when a directory or something in it has changed. It was developed to ease test driven development (TDD): it can call the test case under development each time the test case or the developed code changes.
- General usage
- Usage as script
- In buildout
- Stopping callonchange
- Runing the tests
- Similar tools
- Mac OS X 10.5+ (Leopard)
- Python 2.5
Usage: callonchange [options] path utility [utility arguments]
coc invokes utility with its utility arguments when path or something in it changes.
-h, --help show this help message and exit -e EXTENSION only call utility on changes of a file with this extension (option might be used multiple times)
EXTENSION might be specified with or without leading dot:
-e .py is equal to -e py
Caution: optional arguments must be specified before the positional arguments (path and utility). Arguments specified after the positional arguments are taken as arguments of the utility.
To install callonchange as script call:
$ python setup.py install
or install it using a package manager like easy_install or pip.
To call it as a script add the path to the directory to be observed and the command (script or program) to be called when the directory or something in it has changed.
Example to call xeyes when a file with the extension log has changed in /var/log enter:
$ callonchange -e log /var/log xeyes
Caution: In this example xeyes is called on every new entry in the log file.
There is a recipe in the package which eases installation using buildout.
Add a section to your buildout to generate a script for callonchange (don’t forget to add it to the parts!):
[coc] recipe = icemac.callonchange
This creates a callonchange script with default arguments. These are:
'-e', 'py', '-e', 'zcml', '-e', 'pt', '-e', 'txt', 'src', 'bin/test', '-cv'
Which means: observe in the src directory files with the extensions py, zcml, pt and txt. Call bin/test with the arguments cv (verbose and color) on changes.
To override the default arguments add an arguments parameter to the buildout section:
[coc] recipe = icemac.callonchange name = coc arguments = 'Products', 'bin/ztest'
This means: The created script will be named coc. When called it will observe the Products directory and call bin/ztest on changes.
You can add additional parameters when you call the generated script:
$ bin/callonchange -t testObserver
When you use the default arguments in the buildout section, this command line calls bin/test -cv -t testObserver on each change of py, zcml, pt or txt files in the src directory.
To stop a running callonchange instance hit ^C (Control-C).
To run the tests of icemac.callonchange call:
$ python setup.py test
or use buildout:
$ python bootstrap.py $ bin/buildout $ bin/test
or use callonchange itself:
$ python bootstrap.py $ bin/buildout $ bin/callonchange
In the last version you have to change something inside the src directory of the package so the observer lets the tests run.
- pest: “Auto tester for python” Seems to be designed to run tests and nothing else. Has growl integration. Current version (1.0.2) has no automatic tests.
- sniffer: “An automatic test runner. Supports nose out of the box.” Supports Linux, Windows and Mac OS X. But in current version (0.1.1) Windows and Mac OS X are untested. Current version has no automatic tests.
- It would be nice to have predefined argument lines (profiles) even when not using buildout. They could be stored in the home directory of the user. (Should support profiles which reverence other profiles.)
- In buildout recipe: default script name should be section name.
- Added list of similar tools.
- Fixed incorrect handling of the find-links buildout parameter.
- Added abbility to specify file extensions so only files with these extensions will be observed.
- Added a name parameter to the recipe to control the name of the generated script, e. g. allowing more than one icemac.callonchange script in a buildout.
- Added buildout recipe to ease integration with buildout projects. (See section In buildout.)
- Initial release.