avoid internal error message when img uses just-deleted page
authorJoey Hess <joey@kodama.kitenet.net>
Mon, 21 Jul 2008 20:38:40 +0000 (16:38 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Mon, 21 Jul 2008 20:38:40 +0000 (16:38 -0400)
I think this used to be a fatal error, not just inline error, so I don't
know why it was never noticed, but if a page that an img directive mentions
gets deleted, bestlink() returns a file that no longer exists, and
srcfile() throws an error.

Note that bestlink's behavior of returning a deleted file could be
considered buggy. But, if it's changed to not do that, the page with the img
on it is not updated at all when the file is removed.

IkiWiki/Plugin/img.pm

index 17a9367d3339145170256d44c734663f561e94ec..42de81bd16defdfbb4535cfd3c373e3bd1e52383 100644 (file)
@@ -41,6 +41,10 @@ sub preprocess (@) { #{{{
        }
 
        my $file = bestlink($params{page}, $image);
+       my $srcfile = srcfile($file, 1);
+       if (! defined $srcfile) {
+               error(sprintf(gettext("%s not found"), $image));
+       }
 
        my $dir = $params{page};
        my $base = IkiWiki::basename($file);
@@ -61,12 +65,12 @@ sub preprocess (@) { #{{{
                
                will_render($params{page}, $imglink);
 
-               if (-e $outfile && (-M srcfile($file) >= -M $outfile)) {
+               if (-e $outfile && (-M $srcfile >= -M $outfile)) {
                        $r = $im->Read($outfile);
                        error sprintf(gettext("failed to read %s: %s"), $outfile, $r) if $r;
                }
                else {
-                       $r = $im->Read(srcfile($file));
+                       $r = $im->Read($srcfile);
                        error sprintf(gettext("failed to read %s: %s"), $file, $r) if $r;
 
                        $r = $im->Resize(geometry => "${w}x${h}");
@@ -83,7 +87,7 @@ sub preprocess (@) { #{{{
                }
        }
        else {
-               $r = $im->Read(srcfile($file));
+               $r = $im->Read($srcfile);
                error sprintf(gettext("failed to read %s: %s"), $file, $r) if $r;
                $imglink = $file;
        }