summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@kitenet.net>2011-02-09 13:42:15 -0400
committerJoey Hess <joey@kitenet.net>2011-02-09 13:42:15 -0400
commitacd10522980712a91b8a801e974240ff90af829e (patch)
treee17285f96306cf3fc9d1a71b88d4ba1064bafc54
parent0c68cd556a7d2c7395aed2a4e101c0ced0e33726 (diff)
parent44b0cea85f1641f33ccb305f9da6f96e812b84e9 (diff)
Merge remote branch 'smcv/ready/transient'
-rw-r--r--IkiWiki/Plugin/transient.pm49
1 files changed, 49 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/transient.pm b/IkiWiki/Plugin/transient.pm
new file mode 100644
index 000000000..c482b8552
--- /dev/null
+++ b/IkiWiki/Plugin/transient.pm
@@ -0,0 +1,49 @@
+#!/usr/bin/perl
+package IkiWiki::Plugin::transient;
+
+use warnings;
+use strict;
+use IkiWiki 3.00;
+
+sub import {
+ hook(type => "getsetup", id => "transient", call => \&getsetup);
+ hook(type => "checkconfig", id => "transient", call => \&checkconfig);
+ hook(type => "change", id => "transient", call => \&change);
+}
+
+sub getsetup () {
+ return
+ plugin => {
+ # this plugin is safe but only makes sense as a
+ # dependency; similarly, it needs a rebuild but
+ # only if something else does
+ safe => 0,
+ rebuild => 0,
+ },
+}
+
+our $transientdir;
+
+sub checkconfig () {
+ eval q{use Cwd 'abs_path'};
+ error($@) if $@;
+ $transientdir = abs_path($config{wikistatedir})."/transient";
+ add_underlay($transientdir);
+}
+
+sub change (@) {
+ foreach my $file (@_) {
+ # If the corresponding file exists in the transient underlay
+ # and isn't actually being used, we can get rid of it.
+ # Assume that the file that just changed has the same extension
+ # as the obsolete transient version: this'll be true for web
+ # edits, and avoids invoking File::Find.
+ my $casualty = "$transientdir/$file";
+ if (srcfile($file) ne $casualty && -e $casualty) {
+ debug(sprintf(gettext("removing transient version of %s"), $file));
+ IkiWiki::prune($casualty);
+ }
+ }
+}
+
+1;