Track whether we're in the scan or render phase

In the scan phase, it's too early to match pagespecs or sort pages;
in the render phase, both of those are OK.

It would be possible to add phases later, renumbering them if necessary
to maintain numerical order.
master
Simon McVittie 2014-03-05 10:11:04 +00:00
parent 236c46a3f7
commit a9fc30b19c
3 changed files with 18 additions and 2 deletions

View File

@ -14,7 +14,7 @@ use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase
%pagestate %wikistate %renderedfiles %oldrenderedfiles %pagestate %wikistate %renderedfiles %oldrenderedfiles
%pagesources %delpagesources %destsources %depends %depends_simple %pagesources %delpagesources %destsources %depends %depends_simple
@mass_depends %hooks %forcerebuild %loaded_plugins %typedlinks @mass_depends %hooks %forcerebuild %loaded_plugins %typedlinks
%oldtypedlinks %autofiles @underlayfiles $lastrev}; %oldtypedlinks %autofiles @underlayfiles $lastrev $phase};
use Exporter q{import}; use Exporter q{import};
our @EXPORT = qw(hook debug error htmlpage template template_depends our @EXPORT = qw(hook debug error htmlpage template template_depends
@ -34,6 +34,11 @@ our $DEPEND_CONTENT=1;
our $DEPEND_PRESENCE=2; our $DEPEND_PRESENCE=2;
our $DEPEND_LINKS=4; our $DEPEND_LINKS=4;
# Phases of processing.
sub PHASE_SCAN () { 0 }
sub PHASE_RENDER () { 1 }
$phase = PHASE_SCAN;
# Optimisation. # Optimisation.
use Memoize; use Memoize;
memoize("abs2rel"); memoize("abs2rel");

View File

@ -827,6 +827,8 @@ sub gen_autofile ($$$) {
} }
sub refresh () { sub refresh () {
$phase = PHASE_SCAN;
srcdir_check(); srcdir_check();
run_hooks(refresh => sub { shift->() }); run_hooks(refresh => sub { shift->() });
my ($files, $pages, $new, $internal_new, $del, $internal_del, $changed, $internal_changed); my ($files, $pages, $new, $internal_new, $del, $internal_del, $changed, $internal_changed);
@ -878,7 +880,10 @@ sub refresh () {
} }
calculate_links(); calculate_links();
# At this point it becomes OK to start matching pagespecs.
$phase = PHASE_RENDER;
remove_del(@$del, @$internal_del); remove_del(@$del, @$internal_del);
foreach my $file (@$changed) { foreach my $file (@$changed) {
@ -942,6 +947,10 @@ sub commandline_render () {
loadindex(); loadindex();
unlockwiki(); unlockwiki();
# This function behaves as though it's in the render phase;
# all other files are assumed to have been scanned last time.
$phase = PHASE_RENDER;
my $srcfile=possibly_foolish_untaint($config{render}); my $srcfile=possibly_foolish_untaint($config{render});
my $file=$srcfile; my $file=$srcfile;
$file=~s/\Q$config{srcdir}\E\/?//; $file=~s/\Q$config{srcdir}\E\/?//;

View File

@ -22,6 +22,8 @@ foreach my $file (@$files) {
$pagesources{$page}=$file; # used by po plugin functions $pagesources{$page}=$file; # used by po plugin functions
} }
$IkiWiki::phase = IkiWiki::PHASE_RENDER;
foreach my $lang (@{$config{po_slave_languages}}) { foreach my $lang (@{$config{po_slave_languages}}) {
my ($ll, $name)=IkiWiki::Plugin::po::splitlangpair($lang); my ($ll, $name)=IkiWiki::Plugin::po::splitlangpair($lang);
$config{destdir}="../underlays/locale/$ll"; $config{destdir}="../underlays/locale/$ll";