diffcore-rename: cache file deltas
commita5a3878ba7a0da5ee4331f6064d6b50aadbb10ff
authorJeff King <peff@peff.net>
Tue, 25 Sep 2007 19:29:42 +0000 (25 15:29 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 26 Sep 2007 07:40:32 +0000 (26 00:40 -0700)
treea88a11738c095a2ef5732346340cd42ee0e1e617
parent5166810b1e16b22e342f2181a3535e70c6e7a119
diffcore-rename: cache file deltas

We find rename candidates by computing a fingerprint hash of
each file, and then comparing those fingerprints. There are
inherently O(n^2) comparisons, so it pays in CPU time to
hoist the (rather expensive) computation of the fingerprint
out of that loop (or to cache it once we have computed it once).

Previously, we didn't keep the filespec information around
because then we had the potential to consume a great deal of
memory. However, instead of keeping all of the filespec
data, we can instead just keep the fingerprint.

This patch implements and uses diff_free_filespec_data_large
to accomplish that goal. We also have to change
estimate_similarity not to needlessly repopulate the
filespec data when we already have the hash.

Practical tests showed 4.5x speedup for a 10% memory usage
increase.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff.c
diffcore-rename.c
diffcore.h