template_depends: throw nice error message when template cannot be found
authorJoey Hess <joey@kitenet.net>
Mon, 27 Sep 2010 19:47:14 +0000 (15:47 -0400)
committerJoey Hess <joey@kitenet.net>
Mon, 27 Sep 2010 19:58:01 +0000 (15:58 -0400)
plovs reported a crash when templates were not installed properly,
with a non-useful error about the template object not being defined.
I've audited all uses of template_depends(), and template(), and it makes
sense for them to throw an error if the template cannot be found. All code
with a user-supplied template catches errors already, to handle template
parse failures.

It did not make sense for template_file to throw errors, as some code uses
it to probe if a template file is available.

IkiWiki.pm
IkiWiki/Plugin/edittemplate.pm
IkiWiki/Plugin/inline.pm
IkiWiki/Plugin/template.pm
doc/plugins/write.mdwn

index 6da281999f0b4c035805626f11d6e244c105d69f..66ae868095ad792360e6459753e9d5f32f15e9c2 100644 (file)
@@ -1769,12 +1769,14 @@ sub template_depends ($$;@) {
        my $page=shift;
        
        my ($filename, $tpage, $untrusted)=template_file($name);
+       if (! defined $filename) {
+               error(sprintf(gettext("template %s not found"), $name))
+       }
+
        if (defined $page && defined $tpage) {
                add_depends($page, $tpage);
        }
-
-       return unless defined $filename;
-
+       
        my @opts=(
                filter => sub {
                        my $text_ref = shift;
index 4f07866e443c61ff73e778620e691d85c81f2084..576c94be4fdcb6736501ef0d139935883a1149d7 100644 (file)
@@ -132,9 +132,6 @@ sub filltemplate ($$) {
                # up a template that doesn't work.
                return "[[!pagetemplate ".gettext("failed to process template:")." $@]]";
        }
-       if (! defined $template) {
-               return;
-       }
 
        $template->param(name => $page);
 
index 715a3d6523cfcee4e57c125425d19cfdab110298..c00aed299c8fa2cd27508f2ded85a9f000da7930 100644 (file)
@@ -336,10 +336,7 @@ sub preprocess_inline (@) {
                                        blind_cache => 1);
                        };
                        if ($@) {
-                               error gettext("failed to process template:")." $@";
-                       }
-                       if (! $template) {
-                               error sprintf(gettext("template %s not found"), $params{template}.".tmpl");
+                               error sprintf(gettext("failed to process template %s"), $params{template}.".tmpl").": $@";
                        }
                }
                my $needcontent=$raw || (!($archive && $quick) && $template->query(name => 'content'));
index db26bfe315a254ddc8bdafef07abf83c4a819deb..3df06e652eeee285d51690b9d2178d6e0fb2b8ca 100644 (file)
@@ -41,12 +41,9 @@ sub preprocess (@) {
                        blind_cache => 1);
        };
        if ($@) {
-               error gettext("failed to process template:")." $@";
-       }
-       if (! $template) {
-               error sprintf(gettext("%s not found"),
+               error sprintf(gettext("failed to process template %s"),
                        htmllink($params{page}, $params{destpage},
-                               "/templates/$params{id}"))
+                               "/templates/$params{id}"))." $@";
        }
 
        $params{basename}=IkiWiki::basename($params{page});
index e60314485e77409e124330345f436b4895d37e51..d5bd1dd7648bf867b3dfe1f3a21f71038e40ee83 100644 (file)
@@ -740,6 +740,8 @@ with no ".tmpl" extension. Template pages are normally looked for in
 the templates/ directory. If the page name starts with "/", a page
 elsewhere in the wiki can be used.
 
+If the template is not found, or contains a syntax error, an error is thrown.
+
 ### `template_depends($$;@)`
 
 Use this instead of `template()` if the content of a template is being