Introduce "reset type" flag to "git reset"
[gitweb.git] / diffcore-break.c
index 082e4e5962da65492fbcc6762661a0b655c0986b..b0c8461e1243328795258f0fd7d12f509403403c 100644 (file)
@@ -65,7 +65,7 @@ static int should_break(struct diff_filespec *src,
 
        delta = diff_delta(src->data, src->size,
                           dst->data, dst->size,
-                          &delta_size);
+                          &delta_size, 0);
 
        /* Estimate the edit size by interpreting delta. */
        if (count_delta(delta, delta_size,
@@ -214,7 +214,7 @@ static void merge_broken(struct diff_filepair *p,
                         struct diff_queue_struct *outq)
 {
        /* p and pp are broken pairs we want to merge */
-       struct diff_filepair *c = p, *d = pp;
+       struct diff_filepair *c = p, *d = pp, *dp;
        if (DIFF_FILE_VALID(p->one)) {
                /* this must be a delete half */
                d = p; c = pp;
@@ -229,9 +229,10 @@ static void merge_broken(struct diff_filepair *p,
        if (!DIFF_FILE_VALID(c->two))
                die("internal error in merge #4");
 
-       diff_queue(outq, d->one, c->two);
-       diff_free_filespec_data(d->two);
-       diff_free_filespec_data(c->one);
+       dp = diff_queue(outq, d->one, c->two);
+       dp->score = p->score;
+       diff_free_filespec(d->two);
+       diff_free_filespec(c->one);
        free(d);
        free(c);
 }
@@ -251,7 +252,6 @@ void diffcore_merge_broken(void)
                        /* we already merged this with its peer */
                        continue;
                else if (p->broken_pair &&
-                        p->score == 0 &&
                         !strcmp(p->one->path, p->two->path)) {
                        /* If the peer also survived rename/copy, then
                         * we merge them back together.
@@ -259,7 +259,6 @@ void diffcore_merge_broken(void)
                        for (j = i + 1; j < q->nr; j++) {
                                struct diff_filepair *pp = q->queue[j];
                                if (pp->broken_pair &&
-                                   p->score == 0 &&
                                    !strcmp(pp->one->path, pp->two->path) &&
                                    !strcmp(p->one->path, pp->two->path)) {
                                        /* Peer survived.  Merge them */