From 5cb0ecc00087d716a61dd42d7598a6fb78d60b7b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 5 Sep 2011 14:51:49 -0400 Subject: [PATCH] Fix web revert of a file deletion. When reverting, an add is a remove, and a remove is an add. --- IkiWiki/Plugin/git.pm | 9 +++++---- debian/changelog | 1 + doc/bugs/cannot_revert_page_deletion.mdwn | 8 ++++++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm index cf7fbe9b7..3117e4291 100644 --- a/IkiWiki/Plugin/git.pm +++ b/IkiWiki/Plugin/git.pm @@ -762,6 +762,7 @@ sub git_find_root { } sub git_parse_changes { + my $reverted = shift; my @changes = @_; my ($subdir, $rootdir) = git_find_root(); @@ -782,11 +783,11 @@ sub git_parse_changes { $mode=$detail->{'mode_to'}; } elsif ($detail->{'status'} =~ /^[AM]+\d*$/) { - $action="add"; + $action= $reverted ? "remove" : "add"; $mode=$detail->{'mode_to'}; } elsif ($detail->{'status'} =~ /^[DAM]+\d*/) { - $action="remove"; + $action= $reverted ? "add" : "remove"; $mode=$detail->{'mode_from'}; } else { @@ -845,7 +846,7 @@ sub rcs_receive () { # it and only see changes in it.) # The pre-receive hook already puts us in the right place. $git_dir="."; - push @rets, git_parse_changes(git_commit_info($oldrev."..".$newrev)); + push @rets, git_parse_changes(0, git_commit_info($oldrev."..".$newrev)); $git_dir=undef; } @@ -872,7 +873,7 @@ sub rcs_preprevert ($) { error gettext("you are not allowed to revert a merge"); } - my @ret=git_parse_changes(@commits); + my @ret=git_parse_changes(1, @commits); $git_dir=undef; return @ret; diff --git a/debian/changelog b/debian/changelog index 5ed868e1d..0e82db1ba 100644 --- a/debian/changelog +++ b/debian/changelog @@ -29,6 +29,7 @@ ikiwiki (3.20110716) UNRELEASED; urgency=low is not installed. Closes: #637606 * Promote RPC::XML to a Recommends, since it's used by auto-blog.setup. Closes: #637603 + * Fix web revert of a file deletion. -- Joey Hess Tue, 19 Jul 2011 11:22:52 -0400 diff --git a/doc/bugs/cannot_revert_page_deletion.mdwn b/doc/bugs/cannot_revert_page_deletion.mdwn index 5292906a1..651b4d0ec 100644 --- a/doc/bugs/cannot_revert_page_deletion.mdwn +++ b/doc/bugs/cannot_revert_page_deletion.mdwn @@ -1,2 +1,10 @@ After deleting a page with the "remove" button, it seems that the page deletion cannot be reverted using the "revert" icon in [[RecentChanges]]. It ironically says that "Error: ?$pagename does not exist". See [[http://ikiwiki.info/ikiwiki.cgi?rev=860c2c84d98ea0a38a4f91dacef6d4e09f6e6c2e&do=revert]]. [[JeanPrivat]] + +> And it only gets that far if the remove plugin is enabled. Otherwise it +> complains that you cannot change $pagename. +> +> The root bug is that git's `rcs_preprevert` creates a structure that +> shows the change that was made (which includes a file deletion), +> not the change that would be made if it was reverted (which includes a +> file addition). [[Fixed|done]]. --[[Joey]] -- 2.26.2