Goal: Web interface to allow reverting of changes.
At least at first, it will be exposed via the recentchanges
page, with revert icons next to each change. We may want a dynamic
per-page interface that goes back more than 100 changes later.
Peter Gammie has done an initial implementation of the above.
[[!template id=gitbranch branch=peteg/revert author="[[peteg]]"]]
Review: --[[Joey]]
The revert commit will not currently say what web user did the revert.
This could be fixed by doing a --no-commit revert first and then using
rcs_commit_staged.
Fixed, I think. --[[peteg]]
So I see one thing I completly forgot about is check_canedit
. Avoiding users
using reverting to make changes they would normally not be allowed to do is
tricky. I guess that a easy first pass would be to only let admins do it.
That would be enough to get the feature out there..
I'm thinking about having a rcs_preprevert
. It would take a rev and look
at what changes reverting it would entail, and return the same data
structure that rcs_recieve
does. This could be done by using git revert --no-commit
, and then examining the changes, and then git reset
to drop
them.
Then the code that is currently in IkiWiki/Receive.pm, that calls
check_canedit
and check_canremove
to test the change, can be
straightforwardly refactored out, and used for checking reverts too.
(The data from rcs_preprevert
could also be used for a confirmation
prompt -- it doesn't currently include enough info for diffs, but at
least could have a list of changed files.)
Note that it's possible for a git repo to have commits that modify wiki
files in a subdir, and code files elsewhere. rcs_preprevert
should
detect changes outside the wiki dir, and fail, like rcs_receive
does.