Add rsync plugin, though the only rsync-specific thing about it is the
authorAmitai Schlair <schmonz@magnetic-babysitter.(none)>
Sun, 23 Aug 2009 19:18:41 +0000 (15:18 -0400)
committerAmitai Schlair <schmonz@magnetic-babysitter.(none)>
Sun, 23 Aug 2009 19:18:41 +0000 (15:18 -0400)
assumption that uploading an entire site is efficient.

IkiWiki/Plugin/rsync.pm [new file with mode: 0644]
IkiWiki/Render.pm

diff --git a/IkiWiki/Plugin/rsync.pm b/IkiWiki/Plugin/rsync.pm
new file mode 100644 (file)
index 0000000..6304695
--- /dev/null
@@ -0,0 +1,47 @@
+#!/usr/bin/perl
+package IkiWiki::Plugin::rsync;
+
+use warnings;
+no warnings 'redefine';
+use strict;
+use IkiWiki 3.00;
+
+sub import {
+       hook(type => "getsetup", id => "rsync", call => \&getsetup);
+       hook(type => "checkconfig", id => "rsync", call => \&checkconfig);
+       hook(type => "postrefresh", id => "rsync", call => \&postrefresh);
+}
+
+sub getsetup () {
+       return
+               plugin => {
+                       safe => 0,
+                       rebuild => 0,
+               },
+               rsync_command => {
+                       type => "string",
+                       example => "rsync -qa --delete /path/to/destdir/ user\@host:/path/to/docroot/",
+                       description => "command to upload regenerated pages to another host",
+                       safe => 0,
+                       rebuild => 0,
+               },
+}
+
+sub checkconfig {
+       if (! exists $config{rsync_command} ||
+           ! defined $config{rsync_command}) {
+               error("Must specify rsync_command");
+       }
+}
+
+sub postrefresh () {
+       debug "in postrefresh hook, gonna run rsync";
+       system $config{rsync_command};
+       if ($? == -1) {
+               error("failed to execute rsync_command: $!");
+       } elsif ($? != 0) {
+               error(sprintf("rsync_command exited %d", $? >> 8));
+       }
+}
+
+1
index fc8f287..74033fa 100644 (file)
@@ -524,6 +524,7 @@ sub refresh () {
        if (%rendered) {
                run_hooks(change => sub { shift->(keys %rendered) });
        }
+       run_hooks(postrefresh => sub { shift->() });
 }
 
 sub commandline_render () {