diff -r 5bb3d096ca22 -r 0ed7846bef6f wgnd-mkstruct --- a/wgnd-mkstruct Thu Apr 26 10:42:50 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,137 +0,0 @@ -#!/usr/bin/perl - -# Copyright (C) 2012 Matthias Förste -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -# Matthias Förste - -=encoding utf8 -=cut - -use strict; -use warnings; - -my $VERSION = '0.1'; -my $ME = $0; -use Getopt::Long; -use Pod::Usage; -use Linux::Inotify2; -# File::Rsync in squeeze does not support --xattrs yet -#use File::Rsync; - -my $map = 'wgnd-mkstruct.map.pl'; - -sub trace { print @_ if $ENV{DEBUG}; } - -GetOptions( - "map=s" => \$map, - "h|help" => sub { pod2usage( -verbose => 0, -exitval => 0 ) }, - "m|man" => sub { - pod2usage( - -verbose => 2, - -exitval => 0, - -noperldoc => ( `perldoc -V 2>/dev/null`, $? != 0 )[-1] - ); - }, -) or pod2usage(); - -our $source; -use lib ('.', $ENV{HOME}, '/etc'); -require $map; - -my $inotify = new Linux::Inotify2 - or die "Can't create new inotify object: $!"; -my @rsync = qw(/usr/bin/rsync -ihv -aAX); - -for (keys %{$source}) { - - # add watchers - $inotify->watch ("$_", IN_CREATE, sub { - - my $pid = fork; - - if (not defined $pid) { - warn "Can't fork: $!\n"; - } elsif ($pid == 0) { - my $e = shift; - my $name = $e->fullname; - print "$name was created\n" if $e->IN_CREATE; - print "$name is no longer mounted\n" if $e->IN_UNMOUNT; - print "$name is gone\n" if $e->IN_IGNORED; - print "events for $name have been lost\n" if $e->IN_Q_OVERFLOW; - exec @rsync, $source->{$e->{w}->{name}}, $name; - warn "Can't exec: $!\n"; - } - - }) or die "Can't add watch: $!\n"; -} - -while (1) { - - $inotify->poll; - while (-1 != (my $pid = wait)) { - my $e = $? >> 8; - print "${ME}[$pid]: exit $e\n"; - } - -} - - -__END__ - -=pod - -=head1 NAME - -wgnd-mkstruct - instantiate a directory structure template - -=head1 SYNOPSIS - -wgnd-mkstruct [--map filename] - -wgnd-mkstruct -m|--man - -h|--help - -=head1 DESCRIPTION - -wgnd-mkstruct watches some directories for newly created subdirectories and -synchronises these from a given template directory. - -=head1 OPTIONS - -=over - -=item B<--map> I - -Name of a file containing mappings between templates and directories. Defaults -to F. - -=back - -=head1 FILES - -=over - -=item F - -default for B<--map> - -=back - -=head1 AUTHOR - -Matthias Förste - -=cut