X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/8250c3a45799cecb0f3a4f48e9a660ae4e937f39..72f72e211e3cefcbb1a6f229e8f893a1f62b3a4d:/IkiWiki/Plugin/transient.pm?ds=inline diff --git a/IkiWiki/Plugin/transient.pm b/IkiWiki/Plugin/transient.pm index 5764467ab..c0ad5fc11 100644 --- a/IkiWiki/Plugin/transient.pm +++ b/IkiWiki/Plugin/transient.pm @@ -8,6 +8,7 @@ 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 () { @@ -24,10 +25,27 @@ sub getsetup () { our $transientdir; sub checkconfig () { - eval q{use Cwd 'abs_path'}; - error($@) if $@; - $transientdir = abs_path($config{wikistatedir})."/transient"; - add_underlay($transientdir); + 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 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;