X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/c7bf305c81e01f9a49e110a33665cc692cfe0859..86e821ff514f273d715b3642197f9434b7a654e2:/IkiWiki/Plugin/transient.pm?ds=inline

diff --git a/IkiWiki/Plugin/transient.pm b/IkiWiki/Plugin/transient.pm
index 2784164f6..d4eb005ea 100644
--- a/IkiWiki/Plugin/transient.pm
+++ b/IkiWiki/Plugin/transient.pm
@@ -8,7 +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);
+	hook(type => "rendered", id => "transient", call => \&rendered);
 }
 
 sub getsetup () {
@@ -25,21 +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);
+	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);
 		}
 	}
 }