X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=diffcore-break.c;h=95b5eb492e3aa1a282347b875df04da31f276399;hb=c401cb48e77459a4ccad76888ad31bef252facc5;hp=e6a468e6b0371f77e139928cb963b2b7974b9132;hpb=d28c8af623b0d15740c2af0106d8e2bf54a3ac52;p=git.git diff --git a/diffcore-break.c b/diffcore-break.c index e6a468e6..95b5eb49 100644 --- a/diffcore-break.c +++ b/diffcore-break.c @@ -58,10 +58,16 @@ static int should_break(struct diff_filespec *src, if (!S_ISREG(src->mode) || !S_ISREG(dst->mode)) return 0; /* leave symlink rename alone */ + if (src->sha1_valid && dst->sha1_valid && + !memcmp(src->sha1, dst->sha1, 20)) + return 0; /* they are the same */ + if (diff_populate_filespec(src, 0) || diff_populate_filespec(dst, 0)) return 0; /* error but caught downstream */ base_size = ((src->size < dst->size) ? src->size : dst->size); + if (base_size < MINIMUM_BREAK_SIZE) + return 0; /* we do not break too small filepair */ delta = diff_delta(src->data, src->size, dst->data, dst->size, @@ -170,8 +176,7 @@ void diffcore_break(int break_score) !S_ISDIR(p->one->mode) && !S_ISDIR(p->two->mode) && !strcmp(p->one->path, p->two->path)) { if (should_break(p->one, p->two, - break_score, &score) && - MINIMUM_BREAK_SIZE <= p->one->size) { + break_score, &score)) { /* Split this into delete and create */ struct diff_filespec *null_one, *null_two; struct diff_filepair *dp;