]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Plugin/transient.pm
Merge remote branch 'smcv/ready/transient-recentchanges'
[ikiwiki.git] / IkiWiki / Plugin / transient.pm
index 5764467ab0092827651f65b0485a96862e82c4ed..9811aa010e3d31672dd930596082f83d69d7a02c 100644 (file)
@@ -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,25 @@ sub getsetup () {
 our $transientdir;
 
 sub checkconfig () {
-       eval q{use Cwd 'abs_path'};
-       error($@) if $@;
-       $transientdir = abs_path($config{wikistatedir})."/transient";
-       add_underlay($transientdir);
+       $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;