summaryrefslogtreecommitdiff
path: root/diffcore-rename.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-06-03 08:36:03 (GMT)
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-03 18:23:03 (GMT)
commit355e76a4a3c5e49ae15a642806457bce10fe2ef4 (patch)
tree61d1a1313ab1732458e47f55e14d6c1c7f1225ea /diffcore-rename.c
parent5b86040679626e36c12345039f6df62f4622aef2 (diff)
downloadgit-355e76a4a3c5e49ae15a642806457bce10fe2ef4.zip
git-355e76a4a3c5e49ae15a642806457bce10fe2ef4.tar.gz
git-355e76a4a3c5e49ae15a642806457bce10fe2ef4.tar.bz2
[PATCH] Tweak count-delta interface
Make it return copied source and insertion separately, so that later implementation of heuristics can use them more flexibly. This does not change the heuristics implemented in diffcore-rename nor diffcore-break in any way. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'diffcore-rename.c')
-rw-r--r--diffcore-rename.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/diffcore-rename.c b/diffcore-rename.c
index 8ed37da..eac782b 100644
--- a/diffcore-rename.c
+++ b/diffcore-rename.c
@@ -135,7 +135,7 @@ static int estimate_similarity(struct diff_filespec *src,
* call into this function in that case.
*/
void *delta;
- unsigned long delta_size, base_size;
+ unsigned long delta_size, base_size, src_copied, literal_added;
int score;
/* We deal only with regular files. Symlink renames are handled
@@ -174,10 +174,17 @@ static int estimate_similarity(struct diff_filespec *src,
return 0;
/* Estimate the edit size by interpreting delta. */
- delta_size = count_delta(delta, delta_size);
- free(delta);
- if (delta_size == UINT_MAX)
+ if (count_delta(delta, delta_size, &src_copied, &literal_added)) {
+ free(delta);
return 0;
+ }
+ free(delta);
+
+ /* Extent of damage */
+ if (src->size + literal_added < src_copied)
+ 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