crecord: avoid duplicating lines when reverting noeol->eol change
authorKyle Lippincott <spectral@google.com>
Mon, 04 Apr 2022 18:05:33 -0700
changeset 49034 079197e94b24
parent 49033 9a5d09d7f108
child 49035 51565fedfe7f
crecord: avoid duplicating lines when reverting noeol->eol change When reversing a patch that looks like this while using crecord: ``` @@ -301,4 +302,4 @@ zza zzb zzc zzd -zze \ No newline at end of file +zze ``` we would previously reverse the `-zze` line to be an add, encounter the "no newline" line and stop inspecting lines. This caused us to duplicate the line, producing `zzezze` (still without a newline). `break` is the correct action if we know there will be no lines afterwards, as would be the case in an eol -> noeol transition. It is incorrect if there are lines afterward, such as if both sides are missing the newline or if only the lhs is missing the newline. Differential Revision: https://phab.mercurial-scm.org/D12441
mercurial/crecord.py
tests/test-revert-interactive-curses.t
--- a/mercurial/crecord.py	Tue Apr 05 11:09:57 2022 -0700
+++ b/mercurial/crecord.py	Mon Apr 04 18:05:33 2022 -0700
@@ -505,7 +505,7 @@
             text = line.linetext
             if line.linetext == diffhelper.MISSING_NEWLINE_MARKER:
                 noeol = True
-                break
+                continue
             if line.applied:
                 if text.startswith(b'+'):
                     dels.append(text[1:])
--- a/tests/test-revert-interactive-curses.t	Tue Apr 05 11:09:57 2022 -0700
+++ b/tests/test-revert-interactive-curses.t	Mon Apr 04 18:05:33 2022 -0700
@@ -68,6 +68,5 @@
   $ do_revert
   reverting a
   $ cat a
-  0 (wdir known-bad-output !)
   0 (no-eol)