# HG changeset patch # User Kyle Lippincott # Date 1649120733 25200 # Node ID 079197e94b243e620f0feba673c20771dbde1312 # Parent 9a5d09d7f108b8fac569562bd5b268b337ed713e 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 diff -r 9a5d09d7f108 -r 079197e94b24 mercurial/crecord.py --- 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:]) diff -r 9a5d09d7f108 -r 079197e94b24 tests/test-revert-interactive-curses.t --- 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)