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
%pagesources %delpagesources %destsources %depends %depends_simple
@mass_depends %hooks %forcerebuild %loaded_plugins %typedlinks
%oldtypedlinks %autofiles @underlayfiles $lastrev};
%oldtypedlinks %autofiles @underlayfiles $lastrev $phase};
use Exporter q{import};
our @EXPORT = qw(hook debug error htmlpage template template_depends
@ -34,6 +34,11 @@ our $DEPEND_CONTENT=1;
our $DEPEND_PRESENCE=2;
our $DEPEND_LINKS=4;
# Phases of processing.
sub PHASE_SCAN () { 0 }
sub PHASE_RENDER () { 1 }
$phase = PHASE_SCAN;
# Optimisation.
use Memoize;
memoize("abs2rel");

View File

@ -827,6 +827,8 @@ sub gen_autofile ($$$) {
}
sub refresh () {
$phase = PHASE_SCAN;
srcdir_check();
run_hooks(refresh => sub { shift->() });
my ($files, $pages, $new, $internal_new, $del, $internal_del, $changed, $internal_changed);
@ -878,7 +880,10 @@ sub refresh () {
}
calculate_links();
# At this point it becomes OK to start matching pagespecs.
$phase = PHASE_RENDER;
remove_del(@$del, @$internal_del);
foreach my $file (@$changed) {
@ -942,6 +947,10 @@ sub commandline_render () {
loadindex();
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 $file=$srcfile;
$file=~s/\Q$config{srcdir}\E\/?//;

View File

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