]> git.donarmstrong.com Git - ikiwiki_plugins.git/commitdiff
chdir to the source directory before starting R
authorDon Armstrong <don@donarmstrong.com>
Thu, 22 Mar 2012 20:30:31 +0000 (13:30 -0700)
committerDon Armstrong <don@donarmstrong.com>
Thu, 22 Mar 2012 20:30:31 +0000 (13:30 -0700)
make sure the destination figure exists

sweavealike.pm

index 96bb5564c8aaceef08337a911792503759b7dfca..48c603c63a5f3e38339e0906f0ec377e690d0dd8 100644 (file)
@@ -85,6 +85,7 @@ use IkiWiki '3.00';
 
 use Encode qw(decode);
 use Digest::MD5 qw(md5_hex);
+use Cwd;
 
 my $id = "sweavealike";
 sub import {
@@ -112,8 +113,13 @@ sub preprocess {
     my %param = @_;
 
     if (not defined $pagestate{$param{page}}{$id}{R}) {
+       # I've decided to put R into the src directory instead of the
+       # dest directory
+       my $cur_dir = getcwd;
+       chdir($config{srcdir});
        $pagestate{$param{page}}{$id}{R} = Statistics::R->new(shared => 1)
            or error("Unable to create an R process");
+       chdir($cur_dir);
     }
     # we currently don't bother to support anything but outputing the
     # entire segment of code and its R output
@@ -141,11 +147,13 @@ sub preprocess {
        my $image_loc_esc = $image_loc;
        $image_loc_esc =~ s/"/\\"/g;
        will_render($param{page},$image_loc);
+       # this makes sure that we can write to the file result
+       writefile($image_loc, $config{destdir}, "");
        eval {
-           $pagestate{$param{page}}{$id}{R}->run(qq|png(filename="$image_loc_esc",width=$param{width},height=$param{height});|);
+           $pagestate{$param{page}}{$id}{R}->run(qq|png(filename="$config{destdir}/$image_loc_esc",width=$param{width},height=$param{height});|);
        };
        if ($@) {
-           error(qq|code 'png(filename="$image_loc_esc",width=$param{width},height=$param{height});' (from internal figure handling) produced error '$@'|);
+           error(qq|code 'png(filename="$config{destdir}/$image_loc_esc",width=$param{width},height=$param{height});' (from internal figure handling) produced error '$@'|);
        }
     }
     my $code_result;