Page MenuHomePhabricator

History patching: allow old edits to be reversed
Closed, ResolvedPublic

Description

Author: lupin.wp

Description:
I can currently rollback the final n edits to an article easily. What I can't do
is reverse the effect of non-final edits without merging by hand. What I'd like
is to be able to get mediawiki to do the equivalent of

diff -u old_bad_rev old_good_rev | patch current_rev

in the cases that such a patch applied cleanly. The situation I've encountered
where this would be handy is where vandalism has been missed, and subsequent
good edits made.

UIwise, such a feature would sit nicely on a diff page, I feel.


Version: 1.8.x
Severity: enhancement

Details

Reference
bz6925

Event Timeline

bzimport raised the priority of this task from to Medium.Nov 21 2014, 9:16 PM
bzimport set Reference to bz6925.
bzimport added a subscriber: Unknown Object (MLST).

I would really like to see this feature. I don't have the diff expertise to know
how to do it, though. I would strongly support any fix for this bug (and I'll
tes any patch that is submitted, and commit it if it works)

rotemliss wrote:

It should use diff3, I think, and should be disabled if diff3 is not exist.

robchur wrote:

Good lord, that's revolutionary. It should use diff3. Stop the presses, we've
solved world hunger, lads. Use diff3!

*No shit*. What we *want* is a thorough idea of how to go about implementing it,
not just the underlying code, but also how we'll present it to the user.

lupin.wp wrote:

For the user interface, I had something like the following in mind. On a diff
page, include a link labelled "undo this edit". If the operation fails, then go
back to the diff page with a "sorry, couldn't do it" message at the top.

lupin.wp wrote:

The current undo functionality, while nice, can only undo a single edit. Could
it be enhanced to undo an arbitrary number of edits? When I click undo on a diff
between oldrev and newrev, I expect to undo all the intermediate edits, not
merely the final edit.

robchur wrote:

I thought the whole *point* was to be able to undo an edit which wasn't in
sequential order?

lupin.wp wrote:

No, the point was to be able to undo one *or more* edits that are not the final
edit. I'll try to clarify. Consider an article with four consecutive revisions,
r1,r2,r3,r4.

If I view the diff page for diff(r2,r3) I can currently hit undo to try to patch
r4 with diff(r3,r2). This is good.

However, if I view diff(r1,r3) and hit undo, r4 is still just patched with
diff(r3,r2); that is, only one edit is undone. I think that r4 should be patched
with diff(r3,r1) to undo the cumulative effect of both edits between r1 and r3.
This would be useful if, for example, both of these edits are vandalism.

The current behaviour is also confusing, as the effect of hitting undo does not
correspond with what is displayed on the diff page diff(r1,r3).

Make a new bug report for this additional functionality. This bug, as described,
has been fixed.

rotemliss wrote:

*** Bug 4730 has been marked as a duplicate of this bug. ***