diff --git a/mercurial/crecord.py b/mercurial/crecord.py --- a/mercurial/crecord.py +++ b/mercurial/crecord.py @@ -500,8 +500,12 @@ """ dels = [] adds = [] + noeol = False for line in self.changedlines: text = line.linetext + if line.linetext == b'\\ No newline at end of file\n': + noeol = True + break if line.applied: if text.startswith(b'+'): dels.append(text[1:]) @@ -511,6 +515,9 @@ dels.append(text[1:]) adds.append(text[1:]) hunk = [b'-%s' % l for l in dels] + [b'+%s' % l for l in adds] + if noeol and hunk: + # Remove the newline from the end of the hunk. + hunk[-1] = hunk[-1][:-1] h = self._hunk return patchmod.recordhunk( h.header, h.toline, h.fromline, h.proc, h.before, hunk, h.after diff --git a/tests/test-revert-interactive-curses.t b/tests/test-revert-interactive-curses.t new file mode 100644 --- /dev/null +++ b/tests/test-revert-interactive-curses.t @@ -0,0 +1,55 @@ +#require tic + +Revert interactive tests with the Curses interface + + $ cat <> $HGRCPATH + > [ui] + > interactive = true + > interface = curses + > [experimental] + > crecordtest = testModeCommands + > EOF + +TODO: Make a curses version of the other tests from test-revert-interactive.t. + +When a line without EOL is selected during "revert -i" + + $ hg init $TESTTMP/revert-i-curses-eol + $ cd $TESTTMP/revert-i-curses-eol + $ echo 0 > a + $ hg ci -qAm 0 + $ printf 1 >> a + $ hg ci -qAm 1 + $ cat a + 0 + 1 (no-eol) + + $ cat <testModeCommands + > c + > EOF + + $ hg revert -ir'.^' + reverting a + $ cat a + 0 + +When a selected line is reverted to have no EOL + + $ hg init $TESTTMP/revert-i-curses-eol2 + $ cd $TESTTMP/revert-i-curses-eol2 + $ printf 0 > a + $ hg ci -qAm 0 + $ echo 0 > a + $ hg ci -qAm 1 + $ cat a + 0 + + $ cat <testModeCommands + > c + > EOF + + $ hg revert -ir'.^' + reverting a + $ cat a + 0 (no-eol) +