diff options
author | Joey Hess <joey@kitenet.net> | 2014-09-26 18:55:09 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2014-09-26 18:55:09 -0400 |
commit | 6294894f314970d428b12891547b07bef2e07352 (patch) | |
tree | e43b4b6267ee9fd34b6b02c317fd5c5fc5d4b62c | |
parent | b6299a2b67bfe3e67d354e4152786455ab30ac87 (diff) | |
download | ikiwiki-6294894f314970d428b12891547b07bef2e07352.tar ikiwiki-6294894f314970d428b12891547b07bef2e07352.tar.gz |
Fix crash that can occur when only_committed_changes is set and a file is deleted from the underlay.
srcfile_stat got called on a file from the underlay that no longer existed.
I am not 100% sure of the circumstances of that; I was able to reproduce
the bug but neglected to snapshot the tree, and then accidentially
got it to stop crashing. I know that a transient tag page got deleted using
the web interface to trigger the crash.
It seems that process_changed_files must have returned the file, despite it
being deleted. And since the file was not checked into git, it seems it
must have not been included in @IkiWiki::underlayfiles, which would have
caused process_changed_files to not return it.
I do not know why a transient tag page would not be in
@IkiWiki::underlayfiles. There is a bug here that I don't understand.
This is just a workaround -- run srcfile_stat such that it won't crash,
and if it is unable to stat a file, find_changed knows it's not changed,
so it's ok to skip it.
Also made find_new_files run srcfile_stat such that it won't crash, just
because I was there.
-rw-r--r-- | IkiWiki/Render.pm | 12 | ||||
-rw-r--r-- | debian/changelog | 5 |
2 files changed, 12 insertions, 5 deletions
diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 825c077da..9d6f636a2 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -473,7 +473,8 @@ sub find_new_files ($) { } $pagecase{lc $page}=$page; if (! exists $pagectime{$page}) { - $pagectime{$page}=(srcfile_stat($file))[10]; + my $ctime=(srcfile_stat($file, 1))[10]; + $pagectime{$page}=$ctime if defined $ctime; } } } @@ -533,10 +534,11 @@ sub find_changed ($) { my @internal_changed; foreach my $file (@$files) { my $page=pagename($file); - my ($srcfile, @stat)=srcfile_stat($file); - if (! exists $pagemtime{$page} || - $stat[9] > $pagemtime{$page} || - $forcerebuild{$page}) { + my ($srcfile, @stat)=srcfile_stat($file, 1); + if (defined $srcfile && + (! exists $pagemtime{$page} || + $stat[9] > $pagemtime{$page} || + $forcerebuild{$page})) { $pagemtime{$page}=$stat[9]; if (isinternal($page)) { diff --git a/debian/changelog b/debian/changelog index 20eca0155..d33973691 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,13 @@ ikiwiki (3.20140917) UNRELEASED; urgency=medium + [ Simon McVittie ] * Build-depend on libmagickcore-6.q16-2-extra | libmagickcore-extra so we can thumbnail SVGs in the docwiki + [ Joey Hess ] + * Fix crash that can occur when only_committed_changes is set and a + file is deleted from the underlay. + -- Simon McVittie <smcv@debian.org> Tue, 16 Sep 2014 11:21:16 +0100 ikiwiki (3.20140916) unstable; urgency=low |