summaryrefslogtreecommitdiff
path: root/diffcore-break.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-03-01 04:19:47 (GMT)
committerJunio C Hamano <junkio@cox.net>2006-03-01 04:19:47 (GMT)
commitaeecd23ae2785a0462d42191974e9d9a8e439fbe (patch)
tree896d1112a041f1c9eda2b5157d253399d0d3a12f /diffcore-break.c
parente3601e8bb76e46745d4919c3f30b1dddae040eb2 (diff)
downloadgit-aeecd23ae2785a0462d42191974e9d9a8e439fbe.zip
git-aeecd23ae2785a0462d42191974e9d9a8e439fbe.tar.gz
git-aeecd23ae2785a0462d42191974e9d9a8e439fbe.tar.bz2
diffcore-break: micro-optimize by avoiding delta between identical files.
We did not check if we have the same file on both sides when computing break score. This is usually not a problem, but if the user said --find-copies-harde with -B, we ended up trying a delta between the same data even when we know the SHA1 hash of both sides match. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'diffcore-break.c')
-rw-r--r--diffcore-break.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/diffcore-break.c b/diffcore-break.c
index c57513a..95b5eb4 100644
--- a/diffcore-break.c
+++ b/diffcore-break.c
@@ -58,6 +58,10 @@ 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 */