fix handing of case of file first created by preview but then saved
authorJoey Hess <joey@kodama.kitenet.net>
Mon, 29 Sep 2008 17:25:31 +0000 (13:25 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Mon, 29 Sep 2008 17:25:31 +0000 (13:25 -0400)
To handle this, avoid populating %renderedfiles in preview,
and in expiry, check if the file is in %renderedfiles, if it is
do not delete it since it was saved.

IkiWiki/Plugin/editpage.pm

index d12c6732de2b317da24fa0360967ca6fb19acb00..8ab02cabc364f7f99b8cf1b963c3d9f1b36af562 100644 (file)
@@ -29,8 +29,17 @@ sub refresh () {
                foreach my $file (@{$wikistate{editpage}{previews}}) {
                        my $mtime=(stat("$config{destdir}/$file"))[9];
                        if (defined $mtime && $mtime <= $expire) {
-                               debug(sprintf(gettext("removing old preview %s"), $file));
-                               IkiWiki::prune("$config{destdir}/$file");
+                               # Avoid deleting a preview that was later saved.
+                               my $delete=1;
+                               foreach my $page (keys %renderedfiles) {
+                                       if (grep { $_ eq $file } @{$renderedfiles{$page}}) {
+                                               $delete=0;
+                                       }
+                               }
+                               if ($delete) {
+                                       debug(sprintf(gettext("removing old preview %s"), $file));
+                                       IkiWiki::prune("$config{destdir}/$file");
+                               }
                        }
                        elsif (defined $mtime) {
                                push @previews, $file;
@@ -225,6 +234,7 @@ sub cgi_editpage ($$) { #{{{
                        $previews{$file}=1 unless $wasrendered{$file};
                }
                @{$wikistate{editpage}{previews}} = keys %previews;
+               $renderedfiles{$page}=[keys %wasrendered];
                saveindex();
        }
        elsif ($form->submitted eq "Save Page") {