From 8250c3a45799cecb0f3a4f48e9a660ae4e937f39 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Fri, 26 Nov 2010 22:25:41 +0000 Subject: Add transient plugin, which adds ~/.ikiwiki/transient as an underlay This can contain auto-generated things, like tag pages; if edited they'll automatically migrate into source code control. --- IkiWiki/Plugin/transient.pm | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 IkiWiki/Plugin/transient.pm (limited to 'IkiWiki/Plugin') diff --git a/IkiWiki/Plugin/transient.pm b/IkiWiki/Plugin/transient.pm new file mode 100644 index 000000000..5764467ab --- /dev/null +++ b/IkiWiki/Plugin/transient.pm @@ -0,0 +1,33 @@ +#!/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); +} + +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); +} + +1; -- cgit v1.2.3 From c7bf305c81e01f9a49e110a33665cc692cfe0859 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sat, 27 Nov 2010 13:40:11 +0000 Subject: GC unused pages in the transient underlay --- IkiWiki/Plugin/transient.pm | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'IkiWiki/Plugin') diff --git a/IkiWiki/Plugin/transient.pm b/IkiWiki/Plugin/transient.pm index 5764467ab..2784164f6 100644 --- a/IkiWiki/Plugin/transient.pm +++ b/IkiWiki/Plugin/transient.pm @@ -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 () { @@ -30,4 +31,17 @@ sub checkconfig () { 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 + my $page = pagename($file); + my $casualty = "$transientdir/$page.$config{default_pageext}"; + if (srcfile($file) ne $casualty && -e $casualty) { + debug(sprintf(gettext("removing transient version of %s"), $page)); + IkiWiki::prune($casualty); + } + } +} + 1; -- cgit v1.2.3 From 44b0cea85f1641f33ccb305f9da6f96e812b84e9 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Fri, 7 Jan 2011 19:50:34 +0000 Subject: Assume obsolete transient pages have the same extension as the changed page --- IkiWiki/Plugin/transient.pm | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'IkiWiki/Plugin') diff --git a/IkiWiki/Plugin/transient.pm b/IkiWiki/Plugin/transient.pm index 2784164f6..c482b8552 100644 --- a/IkiWiki/Plugin/transient.pm +++ b/IkiWiki/Plugin/transient.pm @@ -33,12 +33,14 @@ sub checkconfig () { 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 - 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)); + debug(sprintf(gettext("removing transient version of %s"), $file)); IkiWiki::prune($casualty); } } -- cgit v1.2.3