aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@kitenet.net>2014-09-26 18:55:09 -0400
committerJoey Hess <joey@kitenet.net>2014-09-26 18:55:09 -0400
commit6294894f314970d428b12891547b07bef2e07352 (patch)
treee43b4b6267ee9fd34b6b02c317fd5c5fc5d4b62c
parentb6299a2b67bfe3e67d354e4152786455ab30ac87 (diff)
downloadikiwiki-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.pm12
-rw-r--r--debian/changelog5
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