git-merge-file: do not add LF at EOF while applying unrelated change
commitba311807f8408761a48d4cd596259ca30a4375f2
authorMax Kirillov <max@max630.net>
Sat, 28 Jun 2014 22:04:46 +0000 (29 01:04 +0300)
committerJunio C Hamano <gitster@pobox.com>
Mon, 30 Jun 2014 21:07:58 +0000 (30 14:07 -0700)
tree3449c57786a71d0a540e425481663fd99e890bd3
parent6d49de414f9dc7a94503a3798dd745971669cebe
git-merge-file: do not add LF at EOF while applying unrelated change

If 'current-file' does not contain LF at EOF, and change between
'base-file' and 'other-file' does not change any line close to EOF, the
3-way merge should not add LF to EOF.  This is what 'diff3 -m' does, and
seems to be a reasonable expectation.

The change which introduced the behavior is cd1d61c44f. It always calls
function xdl_recs_copy() for sides with add_nl == 1. In fact, it looks
like the only case when this is needed is when 2 files are being
union-merged, and they do not have LF at EOF (strictly speaking, the
first of them).

Add tests:
* "merge without conflict (missing LF at EOF, away from change in the
other file)" and "merge does not add LF away of change", to demonstrate
the changed behavior.
* "conflict at EOF without LF resolved by --union", to verify that the
union-merge at the end inerts newline between versions.
* some more tests which I felt like not covering the functionality well

Signed-off-by: Max Kirillov <max@max630.net>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t6023-merge-file.sh
xdiff/xmerge.c