#include "cache.h"
#include "diff.h"
#include "diffcore.h"
-#include "delta.h"
-#include "count-delta.h"
static int should_break(struct diff_filespec *src,
struct diff_filespec *dst,
* The value we return is 1 if we want the pair to be broken,
* or 0 if we do not.
*/
- void *delta;
unsigned long delta_size, base_size, src_copied, literal_added;
int to_break = 0;
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,
- &delta_size, 0);
-
- /* Estimate the edit size by interpreting delta. */
- if (count_delta(delta, delta_size,
- &src_copied, &literal_added)) {
- free(delta);
- return 0; /* we cannot tell */
- }
- free(delta);
+ if (diffcore_count_changes(src->data, src->size,
+ dst->data, dst->size,
+ 0,
+ &src_copied, &literal_added))
+ return 0;
/* Compute merge-score, which is "how much is removed
* from the source material". The clean-up stage will
!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;
dp = diff_queue(outq, d->one, c->two);
dp->score = p->score;
- diff_free_filespec(d->two);
- diff_free_filespec(c->one);
+ diff_free_filespec_data(d->two);
+ diff_free_filespec_data(c->one);
free(d);
free(c);
}