git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/1] Bypass expensive content comparsion during rename detection.
@ 2006-12-14 10:07 Shawn O. Pearce
  2006-12-14 10:53 ` Johannes Schindelin
  0 siblings, 1 reply; 8+ messages in thread
From: Shawn O. Pearce @ 2006-12-14 10:07 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

When comparing file contents during the second loop through a rename
detection attempt we can skip the expensive byte-by-byte comparsion
if both source and destination files have valid SHA1 values.  This
improves performance by avoiding either an expensive open/mmap to
read the working tree copy, or an expensive inflate of a blob object.

Unfortunately we still have to at least initialize the sizes of the
source and destination files even if the SHA1 values don't match.
Failing to initialize the sizes causes a number of test cases to fail
and start reporting different copy/rename behavior than was expected.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 diffcore-rename.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/diffcore-rename.c b/diffcore-rename.c
index 57a74b6..91fa2be 100644
--- a/diffcore-rename.c
+++ b/diffcore-rename.c
@@ -109,6 +109,8 @@ static int is_exact_match(struct diff_filespec *src,
 		return 0;
 	if (src->size != dst->size)
 		return 0;
+	if (src->sha1_valid && dst->sha1_valid)
+	    return !hashcmp(src->sha1, dst->sha1);
 	if (diff_populate_filespec(src, 0) || diff_populate_filespec(dst, 0))
 		return 0;
 	if (src->size == dst->size &&
-- 

^ permalink raw reply related	[flat|nested] 8+ messages in thread
* Re: [PATCH 1/1] Bypass expensive content comparsion during rename detection
@ 2006-12-14 11:26 Junio C Hamano
  2006-12-14 12:13 ` Shawn Pearce
  0 siblings, 1 reply; 8+ messages in thread
From: Junio C Hamano @ 2006-12-14 11:26 UTC (permalink / raw)
  To: Johannes.Schindelin, Johannes, Schindelin; +Cc: git

estimate_similarity() is called after it has determined that one
and two do not match exactly, and it relies on populate_filespec
with at least size-only has been called on them so that it can
reject filepair with vastly different sizes, still without
looking at (thus without loading) the contents.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2006-12-14 12:13 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-12-14 10:07 [PATCH 1/1] Bypass expensive content comparsion during rename detection Shawn O. Pearce
2006-12-14 10:53 ` Johannes Schindelin
2006-12-14 11:08   ` Shawn Pearce
2006-12-14 11:13     ` Shawn Pearce
2006-12-14 11:18     ` Johannes Schindelin
2006-12-14 11:50       ` Shawn Pearce
  -- strict thread matches above, loose matches on Subject: below --
2006-12-14 11:26 Junio C Hamano
2006-12-14 12:13 ` Shawn Pearce

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).