diff options
author | Joey Hess <joey@kitenet.net> | 2011-02-09 13:42:15 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2011-02-09 13:42:15 -0400 |
commit | acd10522980712a91b8a801e974240ff90af829e (patch) | |
tree | e17285f96306cf3fc9d1a71b88d4ba1064bafc54 /IkiWiki | |
parent | 0c68cd556a7d2c7395aed2a4e101c0ced0e33726 (diff) | |
parent | 44b0cea85f1641f33ccb305f9da6f96e812b84e9 (diff) |
Merge remote branch 'smcv/ready/transient'
Diffstat (limited to 'IkiWiki')
-rw-r--r-- | IkiWiki/Plugin/transient.pm | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/transient.pm b/IkiWiki/Plugin/transient.pm new file mode 100644 index 000000000..c482b8552 --- /dev/null +++ b/IkiWiki/Plugin/transient.pm @@ -0,0 +1,49 @@ +#!/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); + hook(type => "change", id => "transient", call => \&change); +} + +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 () { + eval q{use Cwd 'abs_path'}; + error($@) if $@; + $transientdir = abs_path($config{wikistatedir})."/transient"; + add_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; |