diff --git a/mercurial/patch.py b/mercurial/patch.py --- a/mercurial/patch.py +++ b/mercurial/patch.py @@ -972,7 +972,7 @@ class recordhunk(object): that, swap fromline/toline and +/- signs while keep other things unchanged. """ - m = {'+': '-', '-': '+'} + m = {'+': '-', '-': '+', '\\': '\\'} hunk = ['%s%s' % (m[l[0]], l[1:]) for l in self.hunk] return recordhunk(self.header, self.toline, self.fromline, self.proc, self.before, hunk, self.after) 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 @@ -460,3 +460,40 @@ Check the experimental config to invert forget added file newfile (Yn)? y $ hg status ? newfile + +When a line without EOL is selected during "revert -i" (issue5651) + + $ cat <> $HGRCPATH + > [experimental] + > %unset revertalternateinteractivemode + > EOF + + $ hg init $TESTTMP/revert-i-eol + $ cd $TESTTMP/revert-i-eol + $ echo 0 > a + $ hg ci -qAm 0 + $ printf 1 >> a + $ hg ci -qAm 1 + $ cat a + 0 + 1 (no-eol) + + $ hg revert -ir'.^' < y + > y + > EOF + reverting a + diff --git a/a b/a + 1 hunks, 1 lines changed + examine changes to 'a'? [Ynesfdaq?] y + + @@ -1,1 +1,2 @@ + 0 + +1 + \ No newline at end of file + revert this change to 'a'? [Ynesfdaq?] y + + $ cat a + 0 + + $ cd ..