Assume that every page has been scanned by the time the scan phase ends
authorSimon McVittie <smcv@debian.org>
Wed, 5 Mar 2014 10:42:00 +0000 (10:42 +0000)
committerSimon McVittie <smcv@debian.org>
Wed, 5 Mar 2014 10:42:20 +0000 (10:42 +0000)
This doesn't prevent memory from being used to track what we have
and haven't scanned, but it does make it temporary. The existing
%rendered hash, which is filled afterwards, will be larger than %scanned
in practice anyway: %scanned will contain an entry for each page
that changed, plus an entry for each template used by templatebody,
whereas %rendered will contain an entry for each page that changed
plus an entry for each page rendered due to links or dependencies.

IkiWiki/Render.pm

index c88de1e8e5f7f8974729b6e5a52be956149bb3f3..825c077daa7416483f731cc0e31ed4add4444fab 100644 (file)
@@ -154,7 +154,7 @@ sub genpage ($$) {
 
 sub scan ($) {
        my $file=shift;
 
 sub scan ($) {
        my $file=shift;
-       return if $scanned{$file};
+       return if $phase > PHASE_SCAN || $scanned{$file};
        $scanned{$file}=1;
 
        debug(sprintf(gettext("scanning %s"), $file));
        $scanned{$file}=1;
 
        debug(sprintf(gettext("scanning %s"), $file));
@@ -883,6 +883,9 @@ sub refresh () {
 
        # At this point it becomes OK to start matching pagespecs.
        $phase = PHASE_RENDER;
 
        # At this point it becomes OK to start matching pagespecs.
        $phase = PHASE_RENDER;
+       # Save some memory: we no longer need to keep track of which pages
+       # we've scanned
+       %scanned = ();
 
        remove_del(@$del, @$internal_del);
 
 
        remove_del(@$del, @$internal_del);