diff options
author | Joey Hess <joey@kitenet.net> | 2010-05-18 13:28:35 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2010-05-18 13:32:28 -0400 |
commit | 7aa209f1ce882372590ff032a1a94ad2b977544d (patch) | |
tree | e8113fc211ce92a152b96f6a3797462879ec2534 /IkiWiki | |
parent | 2b1bc9c7297dc4bf36f4fc91205ad13eaf1513ca (diff) |
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.pm | 18 | ||||
-rw-r--r-- | IkiWiki/Render.pm | 1 |
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}; } } |