From 3d6bc6e1b7145d85cd9495fd0a0d0a6823869368 Mon Sep 17 00:00:00 2001 From: Amitai Schlair Date: Sun, 23 Aug 2009 15:18:41 -0400 Subject: [PATCH] Add rsync plugin, though the only rsync-specific thing about it is the assumption that uploading an entire site is efficient. --- IkiWiki/Plugin/rsync.pm | 47 +++++++++++++++++++++++++++++++++++++++++ IkiWiki/Render.pm | 1 + 2 files changed, 48 insertions(+) create mode 100644 IkiWiki/Plugin/rsync.pm diff --git a/IkiWiki/Plugin/rsync.pm b/IkiWiki/Plugin/rsync.pm new file mode 100644 index 000000000..630469528 --- /dev/null +++ b/IkiWiki/Plugin/rsync.pm @@ -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 diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index fc8f287ce..74033fa97 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -524,6 +524,7 @@ sub refresh () { if (%rendered) { run_hooks(change => sub { shift->(keys %rendered) }); } + run_hooks(postrefresh => sub { shift->() }); } sub commandline_render () { -- 2.26.2