I have this sitting in my ~/bin
#! /usr/bin/perl -w
# onchange file ... command
# run command if any of the given files/directories
# change
use strict;
use warnings;
use File::Find;
use Digest::MD5;
my $Command = pop @ARGV;
my $Files = [@ARGV];
my $Last_digest = '';
sub has_changed {
my $files = shift;
my $ctx = Digest::MD5->new;
find(sub {$ctx->add($File::Find::name, (stat($_))[9])}, grep {
+-e $_} @$files);
my $digest = $ctx->digest;
my $has_changed = $digest ne $Last_digest;
$Last_digest = $digest;
return($has_changed);
};
while (1) {
system($Command) if has_changed($Files);
sleep 1;
};
I have this in my .cshrc
alias testwatch "onchange Makefile.PL Makefile */*.pod */*.pm *.pm t t
+est.pl 'clear; make test \!*'"
I then type % testwatch or % testwatch TEST_VERBOSE=1 in the root directory of any module I'm messing with.
This won't work 100% of the time but hits that 80/20 spot for me.
I have a little todo list on an improved test monitor that I will, when some of that mythical free time comes along, implement. Now we have the lovely Test::Harness::Straps it's not even that difficult. |