diff --git a/diffcore-break.c b/diffcore-break.c
index acb18db1db27dc29fdb76bd519174aa56f56121d..c71a22621a4f979f62cd21e9de83ab7129a129e9 100644 (file)
--- a/diffcore-break.c
+++ b/diffcore-break.c
* The value we return is 1 if we want the pair to be broken,
* or 0 if we do not.
*/
* The value we return is 1 if we want the pair to be broken,
* or 0 if we do not.
*/
- unsigned long delta_size, base_size, src_copied, literal_added,
- src_removed;
+ unsigned long delta_size, base_size, max_size;
+ unsigned long src_copied, literal_added, src_removed;
*merge_score_p = 0; /* assume no deletion --- "do not break"
* is the default.
*merge_score_p = 0; /* assume no deletion --- "do not break"
* is the default.
return 0; /* error but caught downstream */
base_size = ((src->size < dst->size) ? src->size : dst->size);
return 0; /* error but caught downstream */
base_size = ((src->size < dst->size) ? src->size : dst->size);
- if (base_size < MINIMUM_BREAK_SIZE)
+ max_size = ((src->size > dst->size) ? src->size : dst->size);
+ if (max_size < MINIMUM_BREAK_SIZE)
return 0; /* we do not break too small filepair */
return 0; /* we do not break too small filepair */
- if (diffcore_count_changes(src->data, src->size,
- dst->data, dst->size,
+ if (diffcore_count_changes(src, dst,
NULL, NULL,
0,
&src_copied, &literal_added))
NULL, NULL,
0,
&src_copied, &literal_added))
* merge the surviving pair together if the score is
* less than the minimum, after rename/copy runs.
*/
* merge the surviving pair together if the score is
* less than the minimum, after rename/copy runs.
*/
- *merge_score_p = src_removed * MAX_SCORE / src->size;
+ *merge_score_p = (int)(src_removed * MAX_SCORE / src->size);
+ if (*merge_score_p > break_score)
+ return 1;
/* Extent of damage, which counts both inserts and
* deletes.
*/
delta_size = src_removed + literal_added;
/* Extent of damage, which counts both inserts and
* deletes.
*/
delta_size = src_removed + literal_added;
- if (delta_size * MAX_SCORE / base_size < break_score)
+ if (delta_size * MAX_SCORE / max_size < break_score)
return 0;
/* If you removed a lot without adding new material, that is
return 0;
/* If you removed a lot without adding new material, that is