X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/d4fd8cd67dd868ed8b0d51c2d710b834d6a33b05..f5c270b11dbfb2589df21388a07f55002e076d3c:/IkiWiki/Plugin/recentchanges.pm?ds=inline diff --git a/IkiWiki/Plugin/recentchanges.pm b/IkiWiki/Plugin/recentchanges.pm index 4cd910667..fe414d865 100644 --- a/IkiWiki/Plugin/recentchanges.pm +++ b/IkiWiki/Plugin/recentchanges.pm @@ -93,7 +93,12 @@ sub sessioncgi ($$) { return unless $do eq 'revert' && $rev; - IkiWiki::rcs_preprevert(cgi => $q, session => $session, rev => $rev); + my @changes=$IkiWiki::hooks{rcs}{rcs_preprevert}{call}->($rev); + IkiWiki::check_canchange( + cgi => $q, + session => $session, + changes => \@changes, + ); my ($form, $buttons) = confirmation_form($q, $session); IkiWiki::decode_form_utf8($form); @@ -101,12 +106,17 @@ sub sessioncgi ($$) { if ($form->submitted eq 'Revert' && $form->validate) { IkiWiki::checksessionexpiry($q, $session, $q->param('sid')); IkiWiki::disable_commit_hook(); - my $r = IkiWiki::rcs_revert( - session => $session, - rev => $rev); + my $r = $IkiWiki::hooks{rcs}{rcs_revert}{call}->($rev); + if (! defined $r) { # success + rcs_commit_staged( + message => sprintf(gettext("This reverts commit %s"), $rev), + session => $session, + rev => $rev, + ); + } IkiWiki::enable_commit_hook(); - if ($r) { + if (defined $r) { die "Revert '$rev' failed."; } else { @@ -115,7 +125,7 @@ sub sessioncgi ($$) { IkiWiki::saveindex(); } } - else { + elsif ($form->submitted ne 'Cancel') { $form->title(sprintf(gettext("confirm reversion of %s"), $rev)); $form->tmpl_param(diff => encode_entities(scalar IkiWiki::rcs_diff($rev))); $form->field(name => "rev", type => "hidden", value => $rev, force => 1); @@ -181,7 +191,9 @@ sub store ($$$) { ]; push @{$change->{pages}}, { link => '...' } if $is_excess; - if (length $config{cgiurl}) { + if (length $config{cgiurl} && + exists $IkiWiki::hooks{rcs}{rcs_preprevert} && + exists $IkiWiki::hooks{rcs}{rcs_revert}) { $change->{reverturl} = IkiWiki::cgiurl( do => "revert", rev => $change->{rev}