46 lines
953 B
Perl
46 lines
953 B
Perl
#!/usr/bin/perl
|
|
package IkiWiki::Plugin::rsync;
|
|
|
|
use warnings;
|
|
use strict;
|
|
use IkiWiki 3.00;
|
|
|
|
sub import {
|
|
hook(type => "getsetup", id => "rsync", call => \&getsetup);
|
|
hook(type => "rendered", id => "rsync", call => \&postrefresh);
|
|
hook(type => "delete", id => "rsync", call => \&postrefresh);
|
|
}
|
|
|
|
sub getsetup () {
|
|
return
|
|
plugin => {
|
|
safe => 0,
|
|
rebuild => 0,
|
|
},
|
|
rsync_command => {
|
|
type => "string",
|
|
example => "rsync -qa --delete . user\@host:/path/to/docroot/",
|
|
description => "command to run to sync updated pages",
|
|
safe => 0,
|
|
rebuild => 0,
|
|
},
|
|
}
|
|
|
|
my $ran=0;
|
|
|
|
sub postrefresh () {
|
|
if (defined $config{rsync_command} && ! $ran) {
|
|
$ran=1;
|
|
chdir($config{destdir}) || error("chdir: $!");
|
|
system $config{rsync_command};
|
|
if ($? == -1) {
|
|
warn(sprintf(gettext("failed to execute rsync_command: %s"), $!))."\n";
|
|
}
|
|
elsif ($? != 0) {
|
|
warn(sprintf(gettext("rsync_command exited %d"), $? >> 8))."\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
1
|