Patchwork revert: do not reverse hunks in interactive when REV is not parent (issue5096)

login
register
mail settings
Submitter Denis Laxalde
Date Nov. 3, 2017, 4:34 p.m.
Message ID <095ef7f12cb36330d5e2.1509726841@sh77.tls.logilab.fr>
Download mbox | patch
Permalink /patch/25378/
State Accepted
Headers show

Comments

Denis Laxalde - Nov. 3, 2017, 4:34 p.m.
# HG changeset patch
# User Denis Laxalde <denis.laxalde@logilab.fr>
# Date 1509716857 -3600
#      Fri Nov 03 14:47:37 2017 +0100
# Node ID 095ef7f12cb36330d5e2b35b6c93fe27f6c1aacc
# Parent  7ebf850d3166a64ff33b4b85adb481b533ddbf86
# Available At http://hg.logilab.org/users/dlaxalde/hg
#              hg pull http://hg.logilab.org/users/dlaxalde/hg -r 095ef7f12cb3
# EXP-Topic revert-interactive
revert: do not reverse hunks in interactive when REV is not parent (issue5096)

And introduce a new "apply" operation verb for this case as suggested in
issue5096. This replaces the no longer used "revert" operation.

In interactive revert, when reverting to something else that the parent
revision, display an "apply this change" message with a diff that is not
reversed.

The rationale is that `hg revert -i -r REV` will show hunks of the diff from
the working directory to REV and prompt the user to select them for applying
(to working directory). This contradicts dcc56e10c23b in which it was
decided to have the "direction" of prompted hunks reversed. Later on
[1], there was a broad consensus (but no decision) towards the "as to
be applied direction". Now that --interactive is no longer experimental
(5910db5d1913), it's time to switch and thus we drop no longer used
"experimental.revertalternateinteractivemode" configuration option.

[1]: https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-November/090142.html
via Mercurial-devel - Nov. 3, 2017, 4:39 p.m.
Queued, thanks!

On Fri, Nov 3, 2017 at 9:34 AM, Denis Laxalde <denis@laxalde.org> wrote:

> # HG changeset patch
> # User Denis Laxalde <denis.laxalde@logilab.fr>
> # Date 1509716857 -3600
> #      Fri Nov 03 14:47:37 2017 +0100
> # Node ID 095ef7f12cb36330d5e2b35b6c93fe27f6c1aacc
> # Parent  7ebf850d3166a64ff33b4b85adb481b533ddbf86
> # Available At http://hg.logilab.org/users/dlaxalde/hg
> #              hg pull http://hg.logilab.org/users/dlaxalde/hg -r
> 095ef7f12cb3
> # EXP-Topic revert-interactive
> revert: do not reverse hunks in interactive when REV is not parent
> (issue5096)
>
> And introduce a new "apply" operation verb for this case as suggested in
> issue5096. This replaces the no longer used "revert" operation.
>
> In interactive revert, when reverting to something else that the parent
> revision, display an "apply this change" message with a diff that is not
> reversed.
>
> The rationale is that `hg revert -i -r REV` will show hunks of the diff
> from
> the working directory to REV and prompt the user to select them for
> applying
> (to working directory). This contradicts dcc56e10c23b in which it was
> decided to have the "direction" of prompted hunks reversed. Later on
> [1], there was a broad consensus (but no decision) towards the "as to
> be applied direction". Now that --interactive is no longer experimental
> (5910db5d1913), it's time to switch and thus we drop no longer used
> "experimental.revertalternateinteractivemode" configuration option.
>
> [1]: https://www.mercurial-scm.org/pipermail/mercurial-devel/
> 2016-November/090142.html
>
> diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
> --- a/mercurial/cmdutil.py
> +++ b/mercurial/cmdutil.py
> @@ -3790,9 +3790,8 @@ def _performrevert(repo, parents, ctx, a
>          operation = 'discard'
>          reversehunks = True
>          if node != parent:
> -            operation = 'revert'
> -            reversehunks = repo.ui.configbool('experimental',
> -                'revertalternateinteractivemode')
> +            operation = 'apply'
> +            reversehunks = False
>          if reversehunks:
>              diff = patch.diff(repo, ctx.node(), None, m, opts=diffopts)
>          else:
> diff --git a/mercurial/configitems.py b/mercurial/configitems.py
> --- a/mercurial/configitems.py
> +++ b/mercurial/configitems.py
> @@ -439,9 +439,6 @@ coreconfigitem('experimental', 'obsmarke
>  coreconfigitem('experimental', 'rebase.multidest',
>      default=False,
>  )
> -coreconfigitem('experimental', 'revertalternateinteractivemode',
> -    default=True,
> -)
>  coreconfigitem('experimental', 'revlogv2',
>      default=None,
>  )
> diff --git a/mercurial/patch.py b/mercurial/patch.py
> --- a/mercurial/patch.py
> +++ b/mercurial/patch.py
> @@ -997,16 +997,26 @@ class recordhunk(object):
>  def getmessages():
>      return {
>          'multiple': {
> +            'apply': _("apply change %d/%d to '%s'?"),
>              'discard': _("discard change %d/%d to '%s'?"),
>              'record': _("record change %d/%d to '%s'?"),
> -            'revert': _("revert change %d/%d to '%s'?"),
>          },
>          'single': {
> +            'apply': _("apply this change to '%s'?"),
>              'discard': _("discard this change to '%s'?"),
>              'record': _("record this change to '%s'?"),
> -            'revert': _("revert this change to '%s'?"),
>          },
>          'help': {
> +            'apply': _('[Ynesfdaq?]'
> +                         '$$ &Yes, apply this change'
> +                         '$$ &No, skip this change'
> +                         '$$ &Edit this change manually'
> +                         '$$ &Skip remaining changes to this file'
> +                         '$$ Apply remaining changes to this &file'
> +                         '$$ &Done, skip remaining changes and files'
> +                         '$$ Apply &all changes to all remaining files'
> +                         '$$ &Quit, applying no changes'
> +                         '$$ &? (display help)'),
>              'discard': _('[Ynesfdaq?]'
>                           '$$ &Yes, discard this change'
>                           '$$ &No, skip this change'
> @@ -1027,16 +1037,6 @@ def getmessages():
>                          '$$ Record &all changes to all remaining files'
>                          '$$ &Quit, recording no changes'
>                          '$$ &? (display help)'),
> -            'revert': _('[Ynesfdaq?]'
> -                        '$$ &Yes, revert this change'
> -                        '$$ &No, skip this change'
> -                        '$$ &Edit this change manually'
> -                        '$$ &Skip remaining changes to this file'
> -                        '$$ Revert remaining changes to this &file'
> -                        '$$ &Done, skip remaining changes and files'
> -                        '$$ Revert &all changes to all remaining files'
> -                        '$$ &Quit, reverting no changes'
> -                        '$$ &? (display help)')
>          }
>      }
>
> diff --git a/tests/test-revert-interactive.t b/tests/test-revert-
> interactive.t
> --- a/tests/test-revert-interactive.t
> +++ b/tests/test-revert-interactive.t
> @@ -60,56 +60,56 @@ 10 run the same test than 8 from within
>    2 hunks, 2 lines changed
>    examine changes to 'f'? [Ynesfdaq?] y
>
> -  @@ -1,5 +1,6 @@
> -  +a
> +  @@ -1,6 +1,5 @@
> +  -a
>     1
>     2
>     3
>     4
>     5
> -  revert change 1/6 to 'f'? [Ynesfdaq?] y
> +  apply change 1/6 to 'f'? [Ynesfdaq?] y
>
> -  @@ -1,5 +2,6 @@
> +  @@ -2,6 +1,5 @@
>     1
>     2
>     3
>     4
>     5
> -  +b
> -  revert change 2/6 to 'f'? [Ynesfdaq?] y
> +  -b
> +  apply change 2/6 to 'f'? [Ynesfdaq?] y
>
>    diff --git a/folder1/g b/folder1/g
>    2 hunks, 2 lines changed
>    examine changes to 'folder1/g'? [Ynesfdaq?] y
>
> -  @@ -1,5 +1,6 @@
> -  +c
> +  @@ -1,6 +1,5 @@
> +  -c
>     1
>     2
>     3
>     4
>     5
> -  revert change 3/6 to 'folder1/g'? [Ynesfdaq?] ?
> +  apply change 3/6 to 'folder1/g'? [Ynesfdaq?] ?
>
> -  y - yes, revert this change
> +  y - yes, apply this change
>    n - no, skip this change
>    e - edit this change manually
>    s - skip remaining changes to this file
> -  f - revert remaining changes to this file
> +  f - apply remaining changes to this file
>    d - done, skip remaining changes and files
> -  a - revert all changes to all remaining files
> -  q - quit, reverting no changes
> +  a - apply all changes to all remaining files
> +  q - quit, applying no changes
>    ? - ? (display help)
> -  revert change 3/6 to 'folder1/g'? [Ynesfdaq?] y
> +  apply change 3/6 to 'folder1/g'? [Ynesfdaq?] y
>
> -  @@ -1,5 +2,6 @@
> +  @@ -2,6 +1,5 @@
>     1
>     2
>     3
>     4
>     5
> -  +d
> -  revert change 4/6 to 'folder1/g'? [Ynesfdaq?] n
> +  -d
> +  apply change 4/6 to 'folder1/g'? [Ynesfdaq?] n
>
>    diff --git a/folder2/h b/folder2/h
>    2 hunks, 2 lines changed
> @@ -157,12 +157,12 @@ Test that a noop revert doesn't do an un
>    1 hunks, 1 lines changed
>    examine changes to 'folder1/g'? [Ynesfdaq?] y
>
> -  @@ -3,3 +3,4 @@
> +  @@ -3,4 +3,3 @@
>     3
>     4
>     5
> -  +d
> -  revert this change to 'folder1/g'? [Ynesfdaq?] n
> +  -d
> +  apply this change to 'folder1/g'? [Ynesfdaq?] n
>
>    $ ls folder1/
>    g
> @@ -173,12 +173,12 @@ Test --no-backup
>    1 hunks, 1 lines changed
>    examine changes to 'folder1/g'? [Ynesfdaq?] y
>
> -  @@ -3,3 +3,4 @@
> +  @@ -3,4 +3,3 @@
>     3
>     4
>     5
> -  +d
> -  revert this change to 'folder1/g'? [Ynesfdaq?] y
> +  -d
> +  apply this change to 'folder1/g'? [Ynesfdaq?] y
>
>    $ ls folder1/
>    g
> @@ -206,45 +206,45 @@ Test --no-backup
>    2 hunks, 2 lines changed
>    examine changes to 'f'? [Ynesfdaq?] y
>
> -  @@ -1,5 +1,6 @@
> -  +a
> +  @@ -1,6 +1,5 @@
> +  -a
>     1
>     2
>     3
>     4
>     5
> -  revert change 1/6 to 'f'? [Ynesfdaq?] y
> +  apply change 1/6 to 'f'? [Ynesfdaq?] y
>
> -  @@ -1,5 +2,6 @@
> +  @@ -2,6 +1,5 @@
>     1
>     2
>     3
>     4
>     5
> -  +b
> -  revert change 2/6 to 'f'? [Ynesfdaq?] y
> +  -b
> +  apply change 2/6 to 'f'? [Ynesfdaq?] y
>
>    diff --git a/folder1/g b/folder1/g
>    2 hunks, 2 lines changed
>    examine changes to 'folder1/g'? [Ynesfdaq?] y
>
> -  @@ -1,5 +1,6 @@
> -  +c
> +  @@ -1,6 +1,5 @@
> +  -c
>     1
>     2
>     3
>     4
>     5
> -  revert change 3/6 to 'folder1/g'? [Ynesfdaq?] y
> +  apply change 3/6 to 'folder1/g'? [Ynesfdaq?] y
>
> -  @@ -1,5 +2,6 @@
> +  @@ -2,6 +1,5 @@
>     1
>     2
>     3
>     4
>     5
> -  +d
> -  revert change 4/6 to 'folder1/g'? [Ynesfdaq?] n
> +  -d
> +  apply change 4/6 to 'folder1/g'? [Ynesfdaq?] n
>
>    diff --git a/folder2/h b/folder2/h
>    2 hunks, 2 lines changed
> @@ -368,77 +368,6 @@ 3) Use interactive revert with editing (
>    $ cat k
>    42
>
> -Check the experimental config to invert the selection:
> -  $ cat <<EOF >> $HGRCPATH
> -  > [experimental]
> -  > revertalternateinteractivemode=False
> -  > EOF
> -
> -
> -  $ hg up -C .
> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  $ printf 'firstline\nc\n1\n2\n3\n 3\n5\nd\nlastline\n' > folder1/g
> -  $ hg diff --nodates
> -  diff -r a3d963a027aa folder1/g
> -  --- a/folder1/g
> -  +++ b/folder1/g
> -  @@ -1,7 +1,9 @@
> -  +firstline
> -   c
> -   1
> -   2
> -   3
> -  -4
> -  + 3
> -   5
> -   d
> -  +lastline
> -  $ hg revert -i <<EOF
> -  > y
> -  > y
> -  > y
> -  > n
> -  > EOF
> -  reverting folder1/g (glob)
> -  diff --git a/folder1/g b/folder1/g
> -  3 hunks, 3 lines changed
> -  examine changes to 'folder1/g'? [Ynesfdaq?] y
> -
> -  @@ -1,4 +1,5 @@
> -  +firstline
> -   c
> -   1
> -   2
> -   3
> -  discard change 1/3 to 'folder1/g'? [Ynesfdaq?] y
> -
> -  @@ -1,7 +2,7 @@
> -   c
> -   1
> -   2
> -   3
> -  -4
> -  + 3
> -   5
> -   d
> -  discard change 2/3 to 'folder1/g'? [Ynesfdaq?] y
> -
> -  @@ -6,2 +7,3 @@
> -   5
> -   d
> -  +lastline
> -  discard change 3/3 to 'folder1/g'? [Ynesfdaq?] n
> -
> -  $ hg diff --nodates
> -  diff -r a3d963a027aa folder1/g
> -  --- a/folder1/g
> -  +++ b/folder1/g
> -  @@ -5,3 +5,4 @@
> -   4
> -   5
> -   d
> -  +lastline
> -
>    $ hg update -C .
>    1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>    $ hg purge
> @@ -463,11 +392,6 @@ Check the experimental config to invert
>
>  When a line without EOL is selected during "revert -i" (issue5651)
>
> -  $ cat <<EOF >> $HGRCPATH
> -  > [experimental]
> -  > %unset revertalternateinteractivemode
> -  > EOF
> -
>    $ hg init $TESTTMP/revert-i-eol
>    $ cd $TESTTMP/revert-i-eol
>    $ echo 0 > a
> @@ -487,11 +411,11 @@ When a line without EOL is selected duri
>    1 hunks, 1 lines changed
>    examine changes to 'a'? [Ynesfdaq?] y
>
> -  @@ -1,1 +1,2 @@
> +  @@ -1,2 +1,1 @@
>     0
> -  +1
> +  -1
>    \ No newline at end of file
> -  revert this change to 'a'? [Ynesfdaq?] y
> +  apply this change to 'a'? [Ynesfdaq?] y
>
>    $ cat a
>    0
>
Augie Fackler - Nov. 3, 2017, 8:09 p.m.
Should we add a release notes directive like this:

.. feature::

  When interactive revert is run against a revision other than the working
  directory parent, the diff shown is the diff to *apply* to the working directory, 
  rather than the diff to *discard* from the working copy. This is in line with
  related user experiences with `git` and appears to be less confusing with
  `ui.interface=curses`.


The verb is significantly less prominent in the curses interface, which I don't use, so it might make sense do document this more heavily? I don't feel strongly about showing (revert, reverse diff) vs (apply, forward diff)[0], but it took several minutes discussion with Martin before I understood the intent of this patch again. What do you think? Should we add something to the help of `hg revert`?

Thanks,
Augie


0: My mental model has long been that the word "revert" means "what you see will go through patch -p1 --reverse", whereas apply means "what you see will go through patch -p1". I have no idea if that makes sense to anyone, but the prominence of the verb in the plain-text UI probably has been saving me from confusion a bit.

> On Nov 3, 2017, at 12:39, Martin von Zweigbergk via Mercurial-devel <mercurial-devel@mercurial-scm.org> wrote:
> 
> Queued, thanks!
> 
> On Fri, Nov 3, 2017 at 9:34 AM, Denis Laxalde <denis@laxalde.org <mailto:denis@laxalde.org>> wrote:
> # HG changeset patch
> # User Denis Laxalde <denis.laxalde@logilab.fr <mailto:denis.laxalde@logilab.fr>>
> # Date 1509716857 -3600
> #      Fri Nov 03 14:47:37 2017 +0100
> # Node ID 095ef7f12cb36330d5e2b35b6c93fe27f6c1aacc
> # Parent  7ebf850d3166a64ff33b4b85adb481b533ddbf86
> # Available At http://hg.logilab.org/users/dlaxalde/hg <http://hg.logilab.org/users/dlaxalde/hg>
> #              hg pull http://hg.logilab.org/users/dlaxalde/hg <http://hg.logilab.org/users/dlaxalde/hg> -r 095ef7f12cb3
> # EXP-Topic revert-interactive
> revert: do not reverse hunks in interactive when REV is not parent (issue5096)
> 
> And introduce a new "apply" operation verb for this case as suggested in
> issue5096. This replaces the no longer used "revert" operation.
> 
> In interactive revert, when reverting to something else that the parent
> revision, display an "apply this change" message with a diff that is not
> reversed.
> 
> The rationale is that `hg revert -i -r REV` will show hunks of the diff from
> the working directory to REV and prompt the user to select them for applying
> (to working directory). This contradicts dcc56e10c23b in which it was
> decided to have the "direction" of prompted hunks reversed. Later on
> [1], there was a broad consensus (but no decision) towards the "as to
> be applied direction". Now that --interactive is no longer experimental
> (5910db5d1913), it's time to switch and thus we drop no longer used
> "experimental.revertalternateinteractivemode" configuration option.
> 
> [1]: https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-November/090142.html <https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-November/090142.html>
> 
> diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
> --- a/mercurial/cmdutil.py
> +++ b/mercurial/cmdutil.py
> @@ -3790,9 +3790,8 @@ def _performrevert(repo, parents, ctx, a
>          operation = 'discard'
>          reversehunks = True
>          if node != parent:
> -            operation = 'revert'
> -            reversehunks = repo.ui.configbool('experimental',
> -                'revertalternateinteractivemode')
> +            operation = 'apply'
> +            reversehunks = False
>          if reversehunks:
>              diff = patch.diff(repo, ctx.node(), None, m, opts=diffopts)
>          else:
> diff --git a/mercurial/configitems.py b/mercurial/configitems.py
> --- a/mercurial/configitems.py
> +++ b/mercurial/configitems.py
> @@ -439,9 +439,6 @@ coreconfigitem('experimental', 'obsmarke
>  coreconfigitem('experimental', 'rebase.multidest',
>      default=False,
>  )
> -coreconfigitem('experimental', 'revertalternateinteractivemode',
> -    default=True,
> -)
>  coreconfigitem('experimental', 'revlogv2',
>      default=None,
>  )
> diff --git a/mercurial/patch.py b/mercurial/patch.py
> --- a/mercurial/patch.py
> +++ b/mercurial/patch.py
> @@ -997,16 +997,26 @@ class recordhunk(object):
>  def getmessages():
>      return {
>          'multiple': {
> +            'apply': _("apply change %d/%d to '%s'?"),
>              'discard': _("discard change %d/%d to '%s'?"),
>              'record': _("record change %d/%d to '%s'?"),
> -            'revert': _("revert change %d/%d to '%s'?"),
>          },
>          'single': {
> +            'apply': _("apply this change to '%s'?"),
>              'discard': _("discard this change to '%s'?"),
>              'record': _("record this change to '%s'?"),
> -            'revert': _("revert this change to '%s'?"),
>          },
>          'help': {
> +            'apply': _('[Ynesfdaq?]'
> +                         '$$ &Yes, apply this change'
> +                         '$$ &No, skip this change'
> +                         '$$ &Edit this change manually'
> +                         '$$ &Skip remaining changes to this file'
> +                         '$$ Apply remaining changes to this &file'
> +                         '$$ &Done, skip remaining changes and files'
> +                         '$$ Apply &all changes to all remaining files'
> +                         '$$ &Quit, applying no changes'
> +                         '$$ &? (display help)'),
>              'discard': _('[Ynesfdaq?]'
>                           '$$ &Yes, discard this change'
>                           '$$ &No, skip this change'
> @@ -1027,16 +1037,6 @@ def getmessages():
>                          '$$ Record &all changes to all remaining files'
>                          '$$ &Quit, recording no changes'
>                          '$$ &? (display help)'),
> -            'revert': _('[Ynesfdaq?]'
> -                        '$$ &Yes, revert this change'
> -                        '$$ &No, skip this change'
> -                        '$$ &Edit this change manually'
> -                        '$$ &Skip remaining changes to this file'
> -                        '$$ Revert remaining changes to this &file'
> -                        '$$ &Done, skip remaining changes and files'
> -                        '$$ Revert &all changes to all remaining files'
> -                        '$$ &Quit, reverting no changes'
> -                        '$$ &? (display help)')
>          }
>      }
> 
> diff --git a/tests/test-revert-interactive.t b/tests/test-revert-interactive.t
> --- a/tests/test-revert-interactive.t
> +++ b/tests/test-revert-interactive.t
> @@ -60,56 +60,56 @@ 10 run the same test than 8 from within
>    2 hunks, 2 lines changed
>    examine changes to 'f'? [Ynesfdaq?] y
> 
> -  @@ -1,5 +1,6 @@
> -  +a
> +  @@ -1,6 +1,5 @@
> +  -a
>     1
>     2
>     3
>     4
>     5
> -  revert change 1/6 to 'f'? [Ynesfdaq?] y
> +  apply change 1/6 to 'f'? [Ynesfdaq?] y
> 
> -  @@ -1,5 +2,6 @@
> +  @@ -2,6 +1,5 @@
>     1
>     2
>     3
>     4
>     5
> -  +b
> -  revert change 2/6 to 'f'? [Ynesfdaq?] y
> +  -b
> +  apply change 2/6 to 'f'? [Ynesfdaq?] y
> 
>    diff --git a/folder1/g b/folder1/g
>    2 hunks, 2 lines changed
>    examine changes to 'folder1/g'? [Ynesfdaq?] y
> 
> -  @@ -1,5 +1,6 @@
> -  +c
> +  @@ -1,6 +1,5 @@
> +  -c
>     1
>     2
>     3
>     4
>     5
> -  revert change 3/6 to 'folder1/g'? [Ynesfdaq?] ?
> +  apply change 3/6 to 'folder1/g'? [Ynesfdaq?] ?
> 
> -  y - yes, revert this change
> +  y - yes, apply this change
>    n - no, skip this change
>    e - edit this change manually
>    s - skip remaining changes to this file
> -  f - revert remaining changes to this file
> +  f - apply remaining changes to this file
>    d - done, skip remaining changes and files
> -  a - revert all changes to all remaining files
> -  q - quit, reverting no changes
> +  a - apply all changes to all remaining files
> +  q - quit, applying no changes
>    ? - ? (display help)
> -  revert change 3/6 to 'folder1/g'? [Ynesfdaq?] y
> +  apply change 3/6 to 'folder1/g'? [Ynesfdaq?] y
> 
> -  @@ -1,5 +2,6 @@
> +  @@ -2,6 +1,5 @@
>     1
>     2
>     3
>     4
>     5
> -  +d
> -  revert change 4/6 to 'folder1/g'? [Ynesfdaq?] n
> +  -d
> +  apply change 4/6 to 'folder1/g'? [Ynesfdaq?] n
> 
>    diff --git a/folder2/h b/folder2/h
>    2 hunks, 2 lines changed
> @@ -157,12 +157,12 @@ Test that a noop revert doesn't do an un
>    1 hunks, 1 lines changed
>    examine changes to 'folder1/g'? [Ynesfdaq?] y
> 
> -  @@ -3,3 +3,4 @@
> +  @@ -3,4 +3,3 @@
>     3
>     4
>     5
> -  +d
> -  revert this change to 'folder1/g'? [Ynesfdaq?] n
> +  -d
> +  apply this change to 'folder1/g'? [Ynesfdaq?] n
> 
>    $ ls folder1/
>    g
> @@ -173,12 +173,12 @@ Test --no-backup
>    1 hunks, 1 lines changed
>    examine changes to 'folder1/g'? [Ynesfdaq?] y
> 
> -  @@ -3,3 +3,4 @@
> +  @@ -3,4 +3,3 @@
>     3
>     4
>     5
> -  +d
> -  revert this change to 'folder1/g'? [Ynesfdaq?] y
> +  -d
> +  apply this change to 'folder1/g'? [Ynesfdaq?] y
> 
>    $ ls folder1/
>    g
> @@ -206,45 +206,45 @@ Test --no-backup
>    2 hunks, 2 lines changed
>    examine changes to 'f'? [Ynesfdaq?] y
> 
> -  @@ -1,5 +1,6 @@
> -  +a
> +  @@ -1,6 +1,5 @@
> +  -a
>     1
>     2
>     3
>     4
>     5
> -  revert change 1/6 to 'f'? [Ynesfdaq?] y
> +  apply change 1/6 to 'f'? [Ynesfdaq?] y
> 
> -  @@ -1,5 +2,6 @@
> +  @@ -2,6 +1,5 @@
>     1
>     2
>     3
>     4
>     5
> -  +b
> -  revert change 2/6 to 'f'? [Ynesfdaq?] y
> +  -b
> +  apply change 2/6 to 'f'? [Ynesfdaq?] y
> 
>    diff --git a/folder1/g b/folder1/g
>    2 hunks, 2 lines changed
>    examine changes to 'folder1/g'? [Ynesfdaq?] y
> 
> -  @@ -1,5 +1,6 @@
> -  +c
> +  @@ -1,6 +1,5 @@
> +  -c
>     1
>     2
>     3
>     4
>     5
> -  revert change 3/6 to 'folder1/g'? [Ynesfdaq?] y
> +  apply change 3/6 to 'folder1/g'? [Ynesfdaq?] y
> 
> -  @@ -1,5 +2,6 @@
> +  @@ -2,6 +1,5 @@
>     1
>     2
>     3
>     4
>     5
> -  +d
> -  revert change 4/6 to 'folder1/g'? [Ynesfdaq?] n
> +  -d
> +  apply change 4/6 to 'folder1/g'? [Ynesfdaq?] n
> 
>    diff --git a/folder2/h b/folder2/h
>    2 hunks, 2 lines changed
> @@ -368,77 +368,6 @@ 3) Use interactive revert with editing (
>    $ cat k
>    42
> 
> -Check the experimental config to invert the selection:
> -  $ cat <<EOF >> $HGRCPATH
> -  > [experimental]
> -  > revertalternateinteractivemode=False
> -  > EOF
> -
> -
> -  $ hg up -C .
> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  $ printf 'firstline\nc\n1\n2\n3\n 3\n5\nd\nlastline\n' > folder1/g
> -  $ hg diff --nodates
> -  diff -r a3d963a027aa folder1/g
> -  --- a/folder1/g
> -  +++ b/folder1/g
> -  @@ -1,7 +1,9 @@
> -  +firstline
> -   c
> -   1
> -   2
> -   3
> -  -4
> -  + 3
> -   5
> -   d
> -  +lastline
> -  $ hg revert -i <<EOF
> -  > y
> -  > y
> -  > y
> -  > n
> -  > EOF
> -  reverting folder1/g (glob)
> -  diff --git a/folder1/g b/folder1/g
> -  3 hunks, 3 lines changed
> -  examine changes to 'folder1/g'? [Ynesfdaq?] y
> -
> -  @@ -1,4 +1,5 @@
> -  +firstline
> -   c
> -   1
> -   2
> -   3
> -  discard change 1/3 to 'folder1/g'? [Ynesfdaq?] y
> -
> -  @@ -1,7 +2,7 @@
> -   c
> -   1
> -   2
> -   3
> -  -4
> -  + 3
> -   5
> -   d
> -  discard change 2/3 to 'folder1/g'? [Ynesfdaq?] y
> -
> -  @@ -6,2 +7,3 @@
> -   5
> -   d
> -  +lastline
> -  discard change 3/3 to 'folder1/g'? [Ynesfdaq?] n
> -
> -  $ hg diff --nodates
> -  diff -r a3d963a027aa folder1/g
> -  --- a/folder1/g
> -  +++ b/folder1/g
> -  @@ -5,3 +5,4 @@
> -   4
> -   5
> -   d
> -  +lastline
> -
>    $ hg update -C .
>    1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>    $ hg purge
> @@ -463,11 +392,6 @@ Check the experimental config to invert
> 
>  When a line without EOL is selected during "revert -i" (issue5651)
> 
> -  $ cat <<EOF >> $HGRCPATH
> -  > [experimental]
> -  > %unset revertalternateinteractivemode
> -  > EOF
> -
>    $ hg init $TESTTMP/revert-i-eol
>    $ cd $TESTTMP/revert-i-eol
>    $ echo 0 > a
> @@ -487,11 +411,11 @@ When a line without EOL is selected duri
>    1 hunks, 1 lines changed
>    examine changes to 'a'? [Ynesfdaq?] y
> 
> -  @@ -1,1 +1,2 @@
> +  @@ -1,2 +1,1 @@
>     0
> -  +1
> +  -1
>    \ No newline at end of file
> -  revert this change to 'a'? [Ynesfdaq?] y
> +  apply this change to 'a'? [Ynesfdaq?] y
> 
>    $ cat a
>    0
> 
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
via Mercurial-devel - Nov. 3, 2017, 8:33 p.m.
On Fri, Nov 3, 2017 at 1:09 PM, Augie Fackler <raf@durin42.com> wrote:

> Should we add a release notes directive like this:
>
> .. feature::
>
>   When interactive revert is run against a revision other than the working
>   directory parent, the diff shown is the diff to *apply* to the working
> directory,
>   rather than the diff to *discard* from the working copy. This is in line
> with
>   related user experiences with `git` and appears to be less confusing with
>   `ui.interface=curses`.
>

Thanks! I've amended the commit in the "committed" repo.


>
> The verb is significantly less prominent in the curses interface, which I
> don't use, so it might make sense do document this more heavily? I don't
> feel strongly about showing (revert, reverse diff) vs (apply, forward
> diff)[0], but it took several minutes discussion with Martin before I
> understood the intent of this patch again. What do you think? Should we add
> something to the help of `hg revert`?
>

I personally don't even look at the verb. I just look at the patch and pick
which lines to apply. The direction is obvious from looking at the patch.
I'm fine with more documentation, of course (in a separate patch).


>
> Thanks,
> Augie
>
>
> 0: My mental model has long been that the word "revert" means "what you
> see will go through patch -p1 --reverse", whereas apply means "what you see
> will go through patch -p1". I have no idea if that makes sense to anyone,
> but the prominence of the verb in the plain-text UI probably has been
> saving me from confusion a bit.
>
> On Nov 3, 2017, at 12:39, Martin von Zweigbergk via Mercurial-devel <
> mercurial-devel@mercurial-scm.org> wrote:
>
> Queued, thanks!
>
> On Fri, Nov 3, 2017 at 9:34 AM, Denis Laxalde <denis@laxalde.org> wrote:
>
>> # HG changeset patch
>> # User Denis Laxalde <denis.laxalde@logilab.fr>
>> # Date 1509716857 -3600
>> #      Fri Nov 03 14:47:37 2017 +0100
>> # Node ID 095ef7f12cb36330d5e2b35b6c93fe27f6c1aacc
>> # Parent  7ebf850d3166a64ff33b4b85adb481b533ddbf86
>> # Available At http://hg.logilab.org/users/dlaxalde/hg
>> #              hg pull http://hg.logilab.org/users/dlaxalde/hg -r
>> 095ef7f12cb3
>> # EXP-Topic revert-interactive
>> revert: do not reverse hunks in interactive when REV is not parent
>> (issue5096)
>>
>> And introduce a new "apply" operation verb for this case as suggested in
>> issue5096. This replaces the no longer used "revert" operation.
>>
>> In interactive revert, when reverting to something else that the parent
>> revision, display an "apply this change" message with a diff that is not
>> reversed.
>>
>> The rationale is that `hg revert -i -r REV` will show hunks of the diff
>> from
>> the working directory to REV and prompt the user to select them for
>> applying
>> (to working directory). This contradicts dcc56e10c23b in which it was
>> decided to have the "direction" of prompted hunks reversed. Later on
>> [1], there was a broad consensus (but no decision) towards the "as to
>> be applied direction". Now that --interactive is no longer experimental
>> (5910db5d1913), it's time to switch and thus we drop no longer used
>> "experimental.revertalternateinteractivemode" configuration option.
>>
>> [1]: https://www.mercurial-scm.org/pipermail/mercurial-devel/2016
>> -November/090142.html
>>
>> diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
>> --- a/mercurial/cmdutil.py
>> +++ b/mercurial/cmdutil.py
>> @@ -3790,9 +3790,8 @@ def _performrevert(repo, parents, ctx, a
>>          operation = 'discard'
>>          reversehunks = True
>>          if node != parent:
>> -            operation = 'revert'
>> -            reversehunks = repo.ui.configbool('experimental',
>> -                'revertalternateinteractivemode')
>> +            operation = 'apply'
>> +            reversehunks = False
>>          if reversehunks:
>>              diff = patch.diff(repo, ctx.node(), None, m, opts=diffopts)
>>          else:
>> diff --git a/mercurial/configitems.py b/mercurial/configitems.py
>> --- a/mercurial/configitems.py
>> +++ b/mercurial/configitems.py
>> @@ -439,9 +439,6 @@ coreconfigitem('experimental', 'obsmarke
>>  coreconfigitem('experimental', 'rebase.multidest',
>>      default=False,
>>  )
>> -coreconfigitem('experimental', 'revertalternateinteractivemode',
>> -    default=True,
>> -)
>>  coreconfigitem('experimental', 'revlogv2',
>>      default=None,
>>  )
>> diff --git a/mercurial/patch.py b/mercurial/patch.py
>> --- a/mercurial/patch.py
>> +++ b/mercurial/patch.py
>> @@ -997,16 +997,26 @@ class recordhunk(object):
>>  def getmessages():
>>      return {
>>          'multiple': {
>> +            'apply': _("apply change %d/%d to '%s'?"),
>>              'discard': _("discard change %d/%d to '%s'?"),
>>              'record': _("record change %d/%d to '%s'?"),
>> -            'revert': _("revert change %d/%d to '%s'?"),
>>          },
>>          'single': {
>> +            'apply': _("apply this change to '%s'?"),
>>              'discard': _("discard this change to '%s'?"),
>>              'record': _("record this change to '%s'?"),
>> -            'revert': _("revert this change to '%s'?"),
>>          },
>>          'help': {
>> +            'apply': _('[Ynesfdaq?]'
>> +                         '$$ &Yes, apply this change'
>> +                         '$$ &No, skip this change'
>> +                         '$$ &Edit this change manually'
>> +                         '$$ &Skip remaining changes to this file'
>> +                         '$$ Apply remaining changes to this &file'
>> +                         '$$ &Done, skip remaining changes and files'
>> +                         '$$ Apply &all changes to all remaining files'
>> +                         '$$ &Quit, applying no changes'
>> +                         '$$ &? (display help)'),
>>              'discard': _('[Ynesfdaq?]'
>>                           '$$ &Yes, discard this change'
>>                           '$$ &No, skip this change'
>> @@ -1027,16 +1037,6 @@ def getmessages():
>>                          '$$ Record &all changes to all remaining files'
>>                          '$$ &Quit, recording no changes'
>>                          '$$ &? (display help)'),
>> -            'revert': _('[Ynesfdaq?]'
>> -                        '$$ &Yes, revert this change'
>> -                        '$$ &No, skip this change'
>> -                        '$$ &Edit this change manually'
>> -                        '$$ &Skip remaining changes to this file'
>> -                        '$$ Revert remaining changes to this &file'
>> -                        '$$ &Done, skip remaining changes and files'
>> -                        '$$ Revert &all changes to all remaining files'
>> -                        '$$ &Quit, reverting no changes'
>> -                        '$$ &? (display help)')
>>          }
>>      }
>>
>> diff --git a/tests/test-revert-interactive.t
>> b/tests/test-revert-interactive.t
>> --- a/tests/test-revert-interactive.t
>> +++ b/tests/test-revert-interactive.t
>> @@ -60,56 +60,56 @@ 10 run the same test than 8 from within
>>    2 hunks, 2 lines changed
>>    examine changes to 'f'? [Ynesfdaq?] y
>>
>> -  @@ -1,5 +1,6 @@
>> -  +a
>> +  @@ -1,6 +1,5 @@
>> +  -a
>>     1
>>     2
>>     3
>>     4
>>     5
>> -  revert change 1/6 to 'f'? [Ynesfdaq?] y
>> +  apply change 1/6 to 'f'? [Ynesfdaq?] y
>>
>> -  @@ -1,5 +2,6 @@
>> +  @@ -2,6 +1,5 @@
>>     1
>>     2
>>     3
>>     4
>>     5
>> -  +b
>> -  revert change 2/6 to 'f'? [Ynesfdaq?] y
>> +  -b
>> +  apply change 2/6 to 'f'? [Ynesfdaq?] y
>>
>>    diff --git a/folder1/g b/folder1/g
>>    2 hunks, 2 lines changed
>>    examine changes to 'folder1/g'? [Ynesfdaq?] y
>>
>> -  @@ -1,5 +1,6 @@
>> -  +c
>> +  @@ -1,6 +1,5 @@
>> +  -c
>>     1
>>     2
>>     3
>>     4
>>     5
>> -  revert change 3/6 to 'folder1/g'? [Ynesfdaq?] ?
>> +  apply change 3/6 to 'folder1/g'? [Ynesfdaq?] ?
>>
>> -  y - yes, revert this change
>> +  y - yes, apply this change
>>    n - no, skip this change
>>    e - edit this change manually
>>    s - skip remaining changes to this file
>> -  f - revert remaining changes to this file
>> +  f - apply remaining changes to this file
>>    d - done, skip remaining changes and files
>> -  a - revert all changes to all remaining files
>> -  q - quit, reverting no changes
>> +  a - apply all changes to all remaining files
>> +  q - quit, applying no changes
>>    ? - ? (display help)
>> -  revert change 3/6 to 'folder1/g'? [Ynesfdaq?] y
>> +  apply change 3/6 to 'folder1/g'? [Ynesfdaq?] y
>>
>> -  @@ -1,5 +2,6 @@
>> +  @@ -2,6 +1,5 @@
>>     1
>>     2
>>     3
>>     4
>>     5
>> -  +d
>> -  revert change 4/6 to 'folder1/g'? [Ynesfdaq?] n
>> +  -d
>> +  apply change 4/6 to 'folder1/g'? [Ynesfdaq?] n
>>
>>    diff --git a/folder2/h b/folder2/h
>>    2 hunks, 2 lines changed
>> @@ -157,12 +157,12 @@ Test that a noop revert doesn't do an un
>>    1 hunks, 1 lines changed
>>    examine changes to 'folder1/g'? [Ynesfdaq?] y
>>
>> -  @@ -3,3 +3,4 @@
>> +  @@ -3,4 +3,3 @@
>>     3
>>     4
>>     5
>> -  +d
>> -  revert this change to 'folder1/g'? [Ynesfdaq?] n
>> +  -d
>> +  apply this change to 'folder1/g'? [Ynesfdaq?] n
>>
>>    $ ls folder1/
>>    g
>> @@ -173,12 +173,12 @@ Test --no-backup
>>    1 hunks, 1 lines changed
>>    examine changes to 'folder1/g'? [Ynesfdaq?] y
>>
>> -  @@ -3,3 +3,4 @@
>> +  @@ -3,4 +3,3 @@
>>     3
>>     4
>>     5
>> -  +d
>> -  revert this change to 'folder1/g'? [Ynesfdaq?] y
>> +  -d
>> +  apply this change to 'folder1/g'? [Ynesfdaq?] y
>>
>>    $ ls folder1/
>>    g
>> @@ -206,45 +206,45 @@ Test --no-backup
>>    2 hunks, 2 lines changed
>>    examine changes to 'f'? [Ynesfdaq?] y
>>
>> -  @@ -1,5 +1,6 @@
>> -  +a
>> +  @@ -1,6 +1,5 @@
>> +  -a
>>     1
>>     2
>>     3
>>     4
>>     5
>> -  revert change 1/6 to 'f'? [Ynesfdaq?] y
>> +  apply change 1/6 to 'f'? [Ynesfdaq?] y
>>
>> -  @@ -1,5 +2,6 @@
>> +  @@ -2,6 +1,5 @@
>>     1
>>     2
>>     3
>>     4
>>     5
>> -  +b
>> -  revert change 2/6 to 'f'? [Ynesfdaq?] y
>> +  -b
>> +  apply change 2/6 to 'f'? [Ynesfdaq?] y
>>
>>    diff --git a/folder1/g b/folder1/g
>>    2 hunks, 2 lines changed
>>    examine changes to 'folder1/g'? [Ynesfdaq?] y
>>
>> -  @@ -1,5 +1,6 @@
>> -  +c
>> +  @@ -1,6 +1,5 @@
>> +  -c
>>     1
>>     2
>>     3
>>     4
>>     5
>> -  revert change 3/6 to 'folder1/g'? [Ynesfdaq?] y
>> +  apply change 3/6 to 'folder1/g'? [Ynesfdaq?] y
>>
>> -  @@ -1,5 +2,6 @@
>> +  @@ -2,6 +1,5 @@
>>     1
>>     2
>>     3
>>     4
>>     5
>> -  +d
>> -  revert change 4/6 to 'folder1/g'? [Ynesfdaq?] n
>> +  -d
>> +  apply change 4/6 to 'folder1/g'? [Ynesfdaq?] n
>>
>>    diff --git a/folder2/h b/folder2/h
>>    2 hunks, 2 lines changed
>> @@ -368,77 +368,6 @@ 3) Use interactive revert with editing (
>>    $ cat k
>>    42
>>
>> -Check the experimental config to invert the selection:
>> -  $ cat <<EOF >> $HGRCPATH
>> -  > [experimental]
>> -  > revertalternateinteractivemode=False
>> -  > EOF
>> -
>> -
>> -  $ hg up -C .
>> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>> -  $ printf 'firstline\nc\n1\n2\n3\n 3\n5\nd\nlastline\n' > folder1/g
>> -  $ hg diff --nodates
>> -  diff -r a3d963a027aa folder1/g
>> -  --- a/folder1/g
>> -  +++ b/folder1/g
>> -  @@ -1,7 +1,9 @@
>> -  +firstline
>> -   c
>> -   1
>> -   2
>> -   3
>> -  -4
>> -  + 3
>> -   5
>> -   d
>> -  +lastline
>> -  $ hg revert -i <<EOF
>> -  > y
>> -  > y
>> -  > y
>> -  > n
>> -  > EOF
>> -  reverting folder1/g (glob)
>> -  diff --git a/folder1/g b/folder1/g
>> -  3 hunks, 3 lines changed
>> -  examine changes to 'folder1/g'? [Ynesfdaq?] y
>> -
>> -  @@ -1,4 +1,5 @@
>> -  +firstline
>> -   c
>> -   1
>> -   2
>> -   3
>> -  discard change 1/3 to 'folder1/g'? [Ynesfdaq?] y
>> -
>> -  @@ -1,7 +2,7 @@
>> -   c
>> -   1
>> -   2
>> -   3
>> -  -4
>> -  + 3
>> -   5
>> -   d
>> -  discard change 2/3 to 'folder1/g'? [Ynesfdaq?] y
>> -
>> -  @@ -6,2 +7,3 @@
>> -   5
>> -   d
>> -  +lastline
>> -  discard change 3/3 to 'folder1/g'? [Ynesfdaq?] n
>> -
>> -  $ hg diff --nodates
>> -  diff -r a3d963a027aa folder1/g
>> -  --- a/folder1/g
>> -  +++ b/folder1/g
>> -  @@ -5,3 +5,4 @@
>> -   4
>> -   5
>> -   d
>> -  +lastline
>> -
>>    $ hg update -C .
>>    1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>>    $ hg purge
>> @@ -463,11 +392,6 @@ Check the experimental config to invert
>>
>>  When a line without EOL is selected during "revert -i" (issue5651)
>>
>> -  $ cat <<EOF >> $HGRCPATH
>> -  > [experimental]
>> -  > %unset revertalternateinteractivemode
>> -  > EOF
>> -
>>    $ hg init $TESTTMP/revert-i-eol
>>    $ cd $TESTTMP/revert-i-eol
>>    $ echo 0 > a
>> @@ -487,11 +411,11 @@ When a line without EOL is selected duri
>>    1 hunks, 1 lines changed
>>    examine changes to 'a'? [Ynesfdaq?] y
>>
>> -  @@ -1,1 +1,2 @@
>> +  @@ -1,2 +1,1 @@
>>     0
>> -  +1
>> +  -1
>>    \ No newline at end of file
>> -  revert this change to 'a'? [Ynesfdaq?] y
>> +  apply this change to 'a'? [Ynesfdaq?] y
>>
>>    $ cat a
>>    0
>>
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>
>
>

Patch

diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -3790,9 +3790,8 @@  def _performrevert(repo, parents, ctx, a
         operation = 'discard'
         reversehunks = True
         if node != parent:
-            operation = 'revert'
-            reversehunks = repo.ui.configbool('experimental',
-                'revertalternateinteractivemode')
+            operation = 'apply'
+            reversehunks = False
         if reversehunks:
             diff = patch.diff(repo, ctx.node(), None, m, opts=diffopts)
         else:
diff --git a/mercurial/configitems.py b/mercurial/configitems.py
--- a/mercurial/configitems.py
+++ b/mercurial/configitems.py
@@ -439,9 +439,6 @@  coreconfigitem('experimental', 'obsmarke
 coreconfigitem('experimental', 'rebase.multidest',
     default=False,
 )
-coreconfigitem('experimental', 'revertalternateinteractivemode',
-    default=True,
-)
 coreconfigitem('experimental', 'revlogv2',
     default=None,
 )
diff --git a/mercurial/patch.py b/mercurial/patch.py
--- a/mercurial/patch.py
+++ b/mercurial/patch.py
@@ -997,16 +997,26 @@  class recordhunk(object):
 def getmessages():
     return {
         'multiple': {
+            'apply': _("apply change %d/%d to '%s'?"),
             'discard': _("discard change %d/%d to '%s'?"),
             'record': _("record change %d/%d to '%s'?"),
-            'revert': _("revert change %d/%d to '%s'?"),
         },
         'single': {
+            'apply': _("apply this change to '%s'?"),
             'discard': _("discard this change to '%s'?"),
             'record': _("record this change to '%s'?"),
-            'revert': _("revert this change to '%s'?"),
         },
         'help': {
+            'apply': _('[Ynesfdaq?]'
+                         '$$ &Yes, apply this change'
+                         '$$ &No, skip this change'
+                         '$$ &Edit this change manually'
+                         '$$ &Skip remaining changes to this file'
+                         '$$ Apply remaining changes to this &file'
+                         '$$ &Done, skip remaining changes and files'
+                         '$$ Apply &all changes to all remaining files'
+                         '$$ &Quit, applying no changes'
+                         '$$ &? (display help)'),
             'discard': _('[Ynesfdaq?]'
                          '$$ &Yes, discard this change'
                          '$$ &No, skip this change'
@@ -1027,16 +1037,6 @@  def getmessages():
                         '$$ Record &all changes to all remaining files'
                         '$$ &Quit, recording no changes'
                         '$$ &? (display help)'),
-            'revert': _('[Ynesfdaq?]'
-                        '$$ &Yes, revert this change'
-                        '$$ &No, skip this change'
-                        '$$ &Edit this change manually'
-                        '$$ &Skip remaining changes to this file'
-                        '$$ Revert remaining changes to this &file'
-                        '$$ &Done, skip remaining changes and files'
-                        '$$ Revert &all changes to all remaining files'
-                        '$$ &Quit, reverting no changes'
-                        '$$ &? (display help)')
         }
     }
 
diff --git a/tests/test-revert-interactive.t b/tests/test-revert-interactive.t
--- a/tests/test-revert-interactive.t
+++ b/tests/test-revert-interactive.t
@@ -60,56 +60,56 @@  10 run the same test than 8 from within 
   2 hunks, 2 lines changed
   examine changes to 'f'? [Ynesfdaq?] y
   
-  @@ -1,5 +1,6 @@
-  +a
+  @@ -1,6 +1,5 @@
+  -a
    1
    2
    3
    4
    5
-  revert change 1/6 to 'f'? [Ynesfdaq?] y
+  apply change 1/6 to 'f'? [Ynesfdaq?] y
   
-  @@ -1,5 +2,6 @@
+  @@ -2,6 +1,5 @@
    1
    2
    3
    4
    5
-  +b
-  revert change 2/6 to 'f'? [Ynesfdaq?] y
+  -b
+  apply change 2/6 to 'f'? [Ynesfdaq?] y
   
   diff --git a/folder1/g b/folder1/g
   2 hunks, 2 lines changed
   examine changes to 'folder1/g'? [Ynesfdaq?] y
   
-  @@ -1,5 +1,6 @@
-  +c
+  @@ -1,6 +1,5 @@
+  -c
    1
    2
    3
    4
    5
-  revert change 3/6 to 'folder1/g'? [Ynesfdaq?] ?
+  apply change 3/6 to 'folder1/g'? [Ynesfdaq?] ?
   
-  y - yes, revert this change
+  y - yes, apply this change
   n - no, skip this change
   e - edit this change manually
   s - skip remaining changes to this file
-  f - revert remaining changes to this file
+  f - apply remaining changes to this file
   d - done, skip remaining changes and files
-  a - revert all changes to all remaining files
-  q - quit, reverting no changes
+  a - apply all changes to all remaining files
+  q - quit, applying no changes
   ? - ? (display help)
-  revert change 3/6 to 'folder1/g'? [Ynesfdaq?] y
+  apply change 3/6 to 'folder1/g'? [Ynesfdaq?] y
   
-  @@ -1,5 +2,6 @@
+  @@ -2,6 +1,5 @@
    1
    2
    3
    4
    5
-  +d
-  revert change 4/6 to 'folder1/g'? [Ynesfdaq?] n
+  -d
+  apply change 4/6 to 'folder1/g'? [Ynesfdaq?] n
   
   diff --git a/folder2/h b/folder2/h
   2 hunks, 2 lines changed
@@ -157,12 +157,12 @@  Test that a noop revert doesn't do an un
   1 hunks, 1 lines changed
   examine changes to 'folder1/g'? [Ynesfdaq?] y
   
-  @@ -3,3 +3,4 @@
+  @@ -3,4 +3,3 @@
    3
    4
    5
-  +d
-  revert this change to 'folder1/g'? [Ynesfdaq?] n
+  -d
+  apply this change to 'folder1/g'? [Ynesfdaq?] n
   
   $ ls folder1/
   g
@@ -173,12 +173,12 @@  Test --no-backup
   1 hunks, 1 lines changed
   examine changes to 'folder1/g'? [Ynesfdaq?] y
   
-  @@ -3,3 +3,4 @@
+  @@ -3,4 +3,3 @@
    3
    4
    5
-  +d
-  revert this change to 'folder1/g'? [Ynesfdaq?] y
+  -d
+  apply this change to 'folder1/g'? [Ynesfdaq?] y
   
   $ ls folder1/
   g
@@ -206,45 +206,45 @@  Test --no-backup
   2 hunks, 2 lines changed
   examine changes to 'f'? [Ynesfdaq?] y
   
-  @@ -1,5 +1,6 @@
-  +a
+  @@ -1,6 +1,5 @@
+  -a
    1
    2
    3
    4
    5
-  revert change 1/6 to 'f'? [Ynesfdaq?] y
+  apply change 1/6 to 'f'? [Ynesfdaq?] y
   
-  @@ -1,5 +2,6 @@
+  @@ -2,6 +1,5 @@
    1
    2
    3
    4
    5
-  +b
-  revert change 2/6 to 'f'? [Ynesfdaq?] y
+  -b
+  apply change 2/6 to 'f'? [Ynesfdaq?] y
   
   diff --git a/folder1/g b/folder1/g
   2 hunks, 2 lines changed
   examine changes to 'folder1/g'? [Ynesfdaq?] y
   
-  @@ -1,5 +1,6 @@
-  +c
+  @@ -1,6 +1,5 @@
+  -c
    1
    2
    3
    4
    5
-  revert change 3/6 to 'folder1/g'? [Ynesfdaq?] y
+  apply change 3/6 to 'folder1/g'? [Ynesfdaq?] y
   
-  @@ -1,5 +2,6 @@
+  @@ -2,6 +1,5 @@
    1
    2
    3
    4
    5
-  +d
-  revert change 4/6 to 'folder1/g'? [Ynesfdaq?] n
+  -d
+  apply change 4/6 to 'folder1/g'? [Ynesfdaq?] n
   
   diff --git a/folder2/h b/folder2/h
   2 hunks, 2 lines changed
@@ -368,77 +368,6 @@  3) Use interactive revert with editing (
   $ cat k
   42
 
-Check the experimental config to invert the selection:
-  $ cat <<EOF >> $HGRCPATH
-  > [experimental]
-  > revertalternateinteractivemode=False
-  > EOF
-
-
-  $ hg up -C .
-  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ printf 'firstline\nc\n1\n2\n3\n 3\n5\nd\nlastline\n' > folder1/g
-  $ hg diff --nodates
-  diff -r a3d963a027aa folder1/g
-  --- a/folder1/g
-  +++ b/folder1/g
-  @@ -1,7 +1,9 @@
-  +firstline
-   c
-   1
-   2
-   3
-  -4
-  + 3
-   5
-   d
-  +lastline
-  $ hg revert -i <<EOF
-  > y
-  > y
-  > y
-  > n
-  > EOF
-  reverting folder1/g (glob)
-  diff --git a/folder1/g b/folder1/g
-  3 hunks, 3 lines changed
-  examine changes to 'folder1/g'? [Ynesfdaq?] y
-  
-  @@ -1,4 +1,5 @@
-  +firstline
-   c
-   1
-   2
-   3
-  discard change 1/3 to 'folder1/g'? [Ynesfdaq?] y
-  
-  @@ -1,7 +2,7 @@
-   c
-   1
-   2
-   3
-  -4
-  + 3
-   5
-   d
-  discard change 2/3 to 'folder1/g'? [Ynesfdaq?] y
-  
-  @@ -6,2 +7,3 @@
-   5
-   d
-  +lastline
-  discard change 3/3 to 'folder1/g'? [Ynesfdaq?] n
-  
-  $ hg diff --nodates
-  diff -r a3d963a027aa folder1/g
-  --- a/folder1/g
-  +++ b/folder1/g
-  @@ -5,3 +5,4 @@
-   4
-   5
-   d
-  +lastline
-
   $ hg update -C .
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg purge
@@ -463,11 +392,6 @@  Check the experimental config to invert 
 
 When a line without EOL is selected during "revert -i" (issue5651)
 
-  $ cat <<EOF >> $HGRCPATH
-  > [experimental]
-  > %unset revertalternateinteractivemode
-  > EOF
-
   $ hg init $TESTTMP/revert-i-eol
   $ cd $TESTTMP/revert-i-eol
   $ echo 0 > a
@@ -487,11 +411,11 @@  When a line without EOL is selected duri
   1 hunks, 1 lines changed
   examine changes to 'a'? [Ynesfdaq?] y
   
-  @@ -1,1 +1,2 @@
+  @@ -1,2 +1,1 @@
    0
-  +1
+  -1
   \ No newline at end of file
-  revert this change to 'a'? [Ynesfdaq?] y
+  apply this change to 'a'? [Ynesfdaq?] y
   
   $ cat a
   0