add support for mass dependencies
authorJoey Hess <joey@kitenet.net>
Sun, 25 Apr 2010 00:22:20 +0000 (20:22 -0400)
committerJoey Hess <joey@kitenet.net>
Sun, 25 Apr 2010 00:22:20 +0000 (20:22 -0400)
Registered by passing "" as page name to add_depends.

IkiWiki.pm
IkiWiki/Plugin/google.pm
IkiWiki/Plugin/search.pm
IkiWiki/Render.pm

index c2cadd35f02c9f5a005ae915bb62fca4b1fa9693..0ac49ade9a155c9e52e01413517b4c1e34780e47 100644 (file)
@@ -13,8 +13,8 @@ use open qw{:utf8 :std};
 
 use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase
        %pagestate %wikistate %renderedfiles %oldrenderedfiles
-       %pagesources %destsources %depends %depends_simple %hooks
-       %forcerebuild %loaded_plugins %typedlinks %oldtypedlinks
+       %pagesources %destsources %depends %depends_simple @mass_depends 
+       %hooks %forcerebuild %loaded_plugins %typedlinks %oldtypedlinks
        %autofiles};
 
 use Exporter q{import};
index 68cb16513c69812c47443ad2377c091e4d17037e..529a2c801fedbe08a4e10f3e472479f334745a82 100644 (file)
@@ -25,6 +25,10 @@ sub checkconfig () {
        if (! length $config{url}) {
                error(sprintf(gettext("Must specify %s when using the %s plugin"), "url", 'google'));
        }
+       
+       # This is a mass dependency, so if the search form template
+       # changes, every page is rebuilt.
+       add_depends("", "googleform.tmpl");
 }
 
 my $form;
@@ -36,7 +40,7 @@ sub pagetemplate (@) {
        # Add search box to page header.
        if ($template->query(name => "searchform")) {
                if (! defined $form) {
-                       my $searchform = template_depends("googleform.tmpl", $page, blind_cache => 1);
+                       my $searchform = template("googleform.tmpl", blind_cache => 1);
                        $searchform->param(url => $config{url});
                        $form=$searchform->output;
                }
index 55edf8752a8e04c4abbe9e320f36922ad13b0884..c9a69f443e3f6ce165840d860908b708fcad7741 100644 (file)
@@ -41,6 +41,10 @@ sub checkconfig () {
        if (! defined $config{omega_cgi}) {
                $config{omega_cgi}="/usr/lib/cgi-bin/omega/omega";
        }
+
+       # This is a mass dependency, so if the search form template
+       # changes, every page is rebuilt.
+       add_depends("", "searchform.tmpl");
 }
 
 my $form;
@@ -52,7 +56,7 @@ sub pagetemplate (@) {
        # Add search box to page header.
        if ($template->query(name => "searchform")) {
                if (! defined $form) {
-                       my $searchform = template_depends("searchform.tmpl", $page, blind_cache => 1);
+                       my $searchform = template("searchform.tmpl", blind_cache => 1);
                        $searchform->param(searchaction => $config{cgiurl});
                        $form=$searchform->output;
                }
index 8ae0cbd4f64fe4f8b450114dc1cdb1ba0caad400..50af2bdec2bfc062de30e0e9571f77f5d11c7b9d 100644 (file)
@@ -591,13 +591,18 @@ sub render_dependent ($$$$$$$) {
        
        my %lc_changed = map { lc(pagename($_)) => 1 } @changed;
        my %lc_exists_changed = map { lc(pagename($_)) => 1 } @exists_changed;
+
+       my $mass_reason;
+       foreach my $p ("page.tmpl", keys %{$depends_simple{""}}) {
+               $mass_reason=$p if $rendered{$p};
+       }
         
        foreach my $f (@$files) {
                next if $rendered{$f};
                my $p=pagename($f);
-               my $reason = undef;
-       
-               if (exists $depends_simple{$p}) {
+               my $reason = $mass_reason;
+
+               if (exists $depends_simple{$p} && ! defined $reason) {
                        foreach my $d (keys %{$depends_simple{$p}}) {
                                if (($depends_simple{$p}{$d} & $IkiWiki::DEPEND_CONTENT &&
                                     $lc_changed{$d})
@@ -771,13 +776,7 @@ sub refresh () {
                render_linkers($file);
        }
 
-       if ($rendered{"templates/page.tmpl"}) {
-               foreach my $f (@$files) {
-                       next if $f eq "templates/page.tmpl";
-                       render($f, sprintf(gettext("building %s, which depends on %s"), $f, "templates/page.tmpl"));
-               }
-       }
-       elsif (@$changed || @$internal_changed ||
+       if (@$changed || @$internal_changed ||
            @$del || @$internal_del || @$internal_new) {
                1 while render_dependent($files, $new, $internal_new,
                        $del, $internal_del, $internal_changed,