summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Keeping <john@keeping.me.uk>2013-04-03 19:24:05 (GMT)
committerJunio C Hamano <gitster@pobox.com>2013-04-03 19:48:02 (GMT)
commite7b00c57640fa2bf11e4218b588f51cc5a9a754e (patch)
treef0d0b2ae827986d72de436e0cc48c7d83f6a3213
parent15999998fbda60552742275570947431b57108ae (diff)
downloadgit-e7b00c57640fa2bf11e4218b588f51cc5a9a754e.zip
git-e7b00c57640fa2bf11e4218b588f51cc5a9a754e.tar.gz
git-e7b00c57640fa2bf11e4218b588f51cc5a9a754e.tar.bz2
diffcore-break: don't divide by zero
When the source file is empty, the calculation of the merge score results in a division by zero. In the situation: == preimage == == postimage == F (empty file) F (a large file) E (a new empty file) it does not make sense to consider F->E as a rename, so it is better not to break the pre- and post-image of F. Bail out early in this case to avoid hitting the divide-by-zero. This causes the merge score to be left at zero. Signed-off-by: John Keeping <john@keeping.me.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--diffcore-break.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/diffcore-break.c b/diffcore-break.c
index 44f8678..1d9e530 100644
--- a/diffcore-break.c
+++ b/diffcore-break.c
@@ -68,6 +68,9 @@ static int should_break(struct diff_filespec *src,
if (max_size < MINIMUM_BREAK_SIZE)
return 0; /* we do not break too small filepair */
+ if (!src->size)
+ return 0; /* we do not let empty files get renamed */
+
if (diffcore_count_changes(src, dst,
&src->cnt_data, &dst->cnt_data,
0,