diff options
Diffstat (limited to 'IkiWiki/Plugin/transient.pm')
-rw-r--r-- | IkiWiki/Plugin/transient.pm | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/transient.pm b/IkiWiki/Plugin/transient.pm new file mode 100644 index 000000000..d4eb005ea --- /dev/null +++ b/IkiWiki/Plugin/transient.pm @@ -0,0 +1,51 @@ +#!/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 => "rendered", id => "transient", call => \&rendered); +} + +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 () { + if (defined $config{wikistatedir}) { + $transientdir = $config{wikistatedir}."/transient"; + # add_underlay treats relative underlays as relative to the installed + # location, not the cwd. That's not what we want here. + IkiWiki::add_literal_underlay($transientdir); + } +} + +sub rendered (@) { + 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, $transientdir); + } + } +} + +1; |