merge-recursive: don't detect renames of empty files
authorJeff King <peff@peff.net>
Thu, 22 Mar 2012 22:52:24 +0000 (18:52 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 23 Mar 2012 20:52:51 +0000 (13:52 -0700)
commit4f7cb99ada26be5d86402a6e060f3ee16a672f16
treeb12a4eed448bc55dca8463f5abe52eae37c8be94
parent90d43b07687fdc51d1f2fc14948df538dc45584b
merge-recursive: don't detect renames of empty files

Merge-recursive detects renames so that if one side modifies
"foo" and the other side moves it to "bar", the modification
is applied to "bar". However, our rename detection is based
on content analysis, it can be wrong (i.e., two files were
not intended as a rename, but just happen to have the same
or similar content).

This is quite rare if the files actually contain content,
since two unrelated files are unlikely to have exactly the
same content.  However, empty files present a problem, in
that there is nothing to analyze. An uninteresting
placeholder file with zero bytes may or may not be related
to a placeholder file with another name.

The result is that adding content to an empty file may cause
confusion if the other side of a merge removed it; your
content may end up in another random placeholder file that
was added.

Let's err on the side of caution and not consider empty
files as renames. This will cause a modify/delete conflict
on the merge, which will let the user sort it out
themselves.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
merge-recursive.c
t/t6022-merge-rename.sh