aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki
diff options
context:
space:
mode:
authorJoey Hess <joey@kitenet.net>2010-05-18 13:28:35 -0400
committerJoey Hess <joey@kitenet.net>2010-05-18 13:32:28 -0400
commit7aa209f1ce882372590ff032a1a94ad2b977544d (patch)
treee8113fc211ce92a152b96f6a3797462879ec2534 /IkiWiki
parent2b1bc9c7297dc4bf36f4fc91205ad13eaf1513ca (diff)
downloadikiwiki-7aa209f1ce882372590ff032a1a94ad2b977544d.tar
ikiwiki-7aa209f1ce882372590ff032a1a94ad2b977544d.tar.gz
Fix a bug that prevented matching deleted comments, and so did not update pages that had contained them.
Problem is that by the time rendering calls render_dependent, %pagesources has had deleted files removed from it. So match_comment's lookup of files in there to see if they had the _comment extension failed. I had to introduce a hash that temporarily holds filenames of deleted pages to fix this. Note that unlike comment(), internal() had avoided this pitfall by being defined to match both internal and non-internal pages.
Diffstat (limited to 'IkiWiki')
-rw-r--r--IkiWiki/Plugin/comments.pm18
-rw-r--r--IkiWiki/Render.pm1
2 files changed, 11 insertions, 8 deletions
diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm
index eb861d74f..de193bd12 100644
--- a/IkiWiki/Plugin/comments.pm
+++ b/IkiWiki/Plugin/comments.pm
@@ -908,10 +908,12 @@ sub match_comment ($$;@) {
my $page = shift;
my $glob = shift;
- if (! IkiWiki::isinternal($page)) {
- return IkiWiki::FailReason->new("$page is not a comment");
- }
- my $type=IkiWiki::pagetype($IkiWiki::pagesources{$page});
+ # To see if it's a comment, check the source file type.
+ # Deal with comments that were just deleted.
+ my $source=exists $IkiWiki::pagesources{$page} ?
+ $IkiWiki::pagesources{$page} :
+ $IkiWiki::delpagesources{$page};
+ my $type=IkiWiki::pagetype($source);
if (defined $type && $type ne "_comment") {
return IkiWiki::FailReason->new("$page is not a comment");
}
@@ -923,10 +925,10 @@ sub match_comment_pending ($$;@) {
my $page = shift;
my $glob = shift;
- if (! IkiWiki::isinternal($page)) {
- return IkiWiki::FailReason->new("$page is not a pending comment");
- }
- my $type=IkiWiki::pagetype($IkiWiki::pagesources{$page});
+ my $source=exists $IkiWiki::pagesources{$page} ?
+ $IkiWiki::pagesources{$page} :
+ $IkiWiki::delpagesources{$page};
+ my $type=IkiWiki::pagetype($source);
if (defined $type && $type ne "_comment_pending") {
return IkiWiki::FailReason->new("$page is not a pending comment");
}
diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index 833fcaaff..f9fbc801f 100644
--- a/IkiWiki/Render.pm
+++ b/IkiWiki/Render.pm
@@ -442,6 +442,7 @@ sub remove_del (@) {
}
delete $pagecase{lc $page};
+ $delpagesources{$page}=$pagesources{$page};
delete $pagesources{$page};
}
}