From: Joey Hess Date: Sat, 27 Sep 2008 20:45:27 +0000 (-0400) Subject: Add %wikistate, which is like %pagestate except not specific to a given page, and... X-Git-Tag: 2.66~55 X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/a5d3acd37cd52a5cf0045ae4d300a2ef13a07a6e?hp=61426a71868a6863115b0a4e0467756e97953092 Add %wikistate, which is like %pagestate except not specific to a given page, and is preserved across rebuilds. --- diff --git a/IkiWiki.pm b/IkiWiki.pm index 9a81c7da4..e303c8f4f 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -12,16 +12,16 @@ use Storable; use open qw{:utf8 :std}; use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase - %pagestate %renderedfiles %oldrenderedfiles %pagesources - %destsources %depends %hooks %forcerebuild $gettext_obj - %loaded_plugins}; + %pagestate %wikistate %renderedfiles %oldrenderedfiles + %pagesources %destsources %depends %hooks %forcerebuild + $gettext_obj %loaded_plugins}; use Exporter q{import}; our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match bestlink htmllink readfile writefile pagetype srcfile pagename displaytime will_render gettext urlto targetpage add_underlay pagetitle titlepage linkpage - %config %links %pagestate %renderedfiles + %config %links %pagestate %wikistate %renderedfiles %pagesources %destsources); our $VERSION = 2.00; # plugin interface version, next is ikiwiki version our $version='unknown'; # VERSION_AUTOREPLACE done by Makefile, DNE @@ -1318,9 +1318,11 @@ sub loadindex () { #{{{ my $pages; if (exists $index->{version} && ! ref $index->{version}) { $pages=$index->{page}; + %wikistate=%{$index->{state}}; } else { $pages=$index; + %wikistate=(); } foreach my $src (keys %$pages) { @@ -1368,6 +1370,7 @@ sub saveindex () { #{{{ my $newfile="$config{wikistatedir}/indexdb.new"; my $cleanup = sub { unlink($newfile) }; open (my $out, '>', $newfile) || error("cannot write to $newfile: $!", $cleanup); + my %index; foreach my $page (keys %pagemtime) { next unless $pagemtime{$page}; @@ -1392,6 +1395,14 @@ sub saveindex () { #{{{ } } } + + $index{state}={}; + foreach my $id (@hookids) { + foreach my $key (keys %{$wikistate{$id}}) { + $index{state}{$id}{$key}=$wikistate{$id}{$key}; + } + } + $index{version}="3"; my $ret=Storable::nstore_fd(\%index, $out); return if ! defined $ret || ! $ret; diff --git a/debian/changelog b/debian/changelog index 2ea92c4c3..04a3975c8 100644 --- a/debian/changelog +++ b/debian/changelog @@ -19,10 +19,10 @@ ikiwiki (2.66) UNRELEASED; urgency=low untidied content if tidy crashes. In either case, it seems best to tidy the content to nothing. * htmltidy: Avoid spewing tidy errors to stderr. - * Add %wikistate, which is like %pagestate except not specific to a given - page, and is preserved across rebuilds. * Reorganize index file, add a format version field. Upgrades to the new index format should be transparent. + * Add %wikistate, which is like %pagestate except not specific to a given + page, and is preserved across rebuilds. -- Joey Hess Thu, 25 Sep 2008 13:45:55 -0400 diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index 0e4f2fd6f..4e27d361d 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -467,6 +467,15 @@ When pages are deleted, ikiwiki automatically deletes their pagestate too. Note that page state does not persist across wiki rebuilds, only across wiki updates. +### %wikistate + +The `%wikistate` hash can be used by a plugin to store persistant state +that is not bound to any one page. To set a value, use +`$wikistate{$id}{$key}=$value, where `$value` is anything Storable can +serialize, `$key` is any string you like, and `$id` must be the same as the +"id" parameter passed to `hook()` when registering the plugin, so that the +state can be dropped if the plugin is no longer used. + ### Other variables If your plugin needs to access data about other pages in the wiki. It can diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot index f338750ea..200b3f6d8 100644 --- a/po/ikiwiki.pot +++ b/po/ikiwiki.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-09-27 16:35-0400\n" +"POT-Creation-Date: 2008-09-27 16:40-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -910,7 +910,7 @@ msgstr "" msgid "preprocessing loop detected on %s at depth %i" msgstr "" -#: ../IkiWiki.pm:1624 +#: ../IkiWiki.pm:1632 msgid "yes" msgstr ""