diff -r de0a25512844 -r 7d7ca3f05f25 lib/SI/tools.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/SI/tools.pm Wed Jan 20 21:52:01 2010 +0100 @@ -0,0 +1,54 @@ +package SI::tools; + +use if $ENV{DEBUG} ~~ /tools|all/ => "Smart::Comments"; + +use strict; +use warnings; +use File::Find; +use Data::Dumper; +use base "Exporter"; + +our @EXPORT = qw(&run &verbose &find_by_devid &cat &barf); + +sub run(@) { + system(@_); + die "$_[0] failed with exit code " . ($? >> 8) . "\n" + if $?; +} + +sub barf(@) { die Dumper @_ } + +sub cat($) { + my $fh = new IO::File $_[0] + or die "Can't open $_[0]: $!\n"; + return (<$fh>) if wantarray; + return join "", <$fh>; +} + +my $last = "\n"; + +sub verbose(@) { + print $last eq "\n" ? "" : " " + if not(@_ == 1 and length($_[0]) == 1); + print @_; + $last = substr($_[-1], -1, 1); +} + +sub find_by_devid($$) { + my ($dir, $id) = @_; + my @found; + find( + sub { + push @found, $File::Find::name if (stat)[6] == $id; + return; + }, + $dir + ); + die "ERR: found more than one alias (@found) for $id\n" if @found > 1; + die "ERR: found no alias for $id\n" if not @found; + return $found[0]; +} + +1; + +# vim:sts=4 sw=4 aw ai si: