diffcore-rename: similarity estimator fix.

The "similarity" logic was giving added material way too much
negative weight.  What we wanted to see was how similar the
post-change image was compared to the pre-change image, so the
natural definition of similarity is how much common things are
there, relative to the post-change image's size.

This simplifies things a lot.

Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Junio C Hamano 2006-03-02 22:11:25 -08:00
Родитель e29e1147e4
Коммит 1706306a54
1 изменённых файлов: 8 добавлений и 12 удалений

Просмотреть файл

@ -170,19 +170,15 @@ static int estimate_similarity(struct diff_filespec *src,
&src_copied, &literal_added)) &src_copied, &literal_added))
return 0; return 0;
/* Extent of damage */ /* How similar are they?
if (src->size + literal_added < src_copied) * what percentage of material in dst are from source?
delta_size = 0;
else
delta_size = (src->size - src_copied) + literal_added;
/*
* Now we will give some score to it. 100% edit gets 0 points
* and 0% edit gets MAX_SCORE points.
*/ */
score = MAX_SCORE - (MAX_SCORE * delta_size / base_size); if (dst->size < src_copied)
if (score < 0) return 0; score = MAX_SCORE;
if (MAX_SCORE < score) return MAX_SCORE; else if (!dst->size)
score = 0; /* should not happen */
else
score = src_copied * MAX_SCORE / dst->size;
return score; return score;
} }