sub import {
hook(type => "getsetup", id => "transient", call => \&getsetup);
hook(type => "checkconfig", id => "transient", call => \&checkconfig);
- hook(type => "change", id => "transient", call => \&change);
+ hook(type => "rendered", id => "transient", call => \&rendered);
}
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 (@) {
+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
- my $page = pagename($file);
- my $casualty = "$transientdir/$page.$config{default_pageext}";
+ # 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"), $page));
- IkiWiki::prune($casualty);
+ debug(sprintf(gettext("removing transient version of %s"), $file));
+ IkiWiki::prune($casualty, $transientdir);
}
}
}