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);
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 {
IkiWiki::saveindex();
}
}
- else {
+ elsif ($form->submitted ne 'Cancel') {
$form->title(sprintf(gettext("confirm reversion of %s"), $rev));
- my $patch_contents = IkiWiki::rcs_showpatch(rev => $rev);
- $form->tmpl_param(patch_contents => encode_entities($patch_contents));
+ $form->tmpl_param(diff => encode_entities(scalar IkiWiki::rcs_diff($rev)));
$form->field(name => "rev", type => "hidden", value => $rev, force => 1);
IkiWiki::showform($form, $buttons, $session, $q);
exit 0;
];
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}