2010-11-26 23:25:41 +01:00
|
|
|
#!/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);
|
2010-11-27 14:40:11 +01:00
|
|
|
hook(type => "change", id => "transient", call => \&change);
|
2010-11-26 23:25:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
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 () {
|
2011-02-25 22:32:36 +01:00
|
|
|
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);
|
|
|
|
}
|
2010-11-26 23:25:41 +01:00
|
|
|
}
|
|
|
|
|
2010-11-27 14:40:11 +01:00
|
|
|
sub change (@) {
|
|
|
|
foreach my $file (@_) {
|
2011-01-07 20:50:34 +01:00
|
|
|
# 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";
|
2010-11-27 14:40:11 +01:00
|
|
|
if (srcfile($file) ne $casualty && -e $casualty) {
|
2011-01-07 20:50:34 +01:00
|
|
|
debug(sprintf(gettext("removing transient version of %s"), $file));
|
2010-11-27 14:40:11 +01:00
|
|
|
IkiWiki::prune($casualty);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-11-26 23:25:41 +01:00
|
|
|
1;
|