diff options
| author | Junio C Hamano <gitster@pobox.com> | 2016-08-10 11:55:28 -0700 | 
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2016-08-10 11:55:28 -0700 | 
| commit | cee6c5b47bfa5d20fdf504fd61d200c0ee5eb777 (patch) | |
| tree | 5c360d8309d55bd393234f25f2740cd2a3209940 /diff.c | |
| parent | d1d9c3cc608ca281c1bd9b40b14fa8d60cb64773 (diff) | |
| parent | 06dec439a3d00fa0b3141a2d52b33d22b941976c (diff) | |
| download | git-cee6c5b47bfa5d20fdf504fd61d200c0ee5eb777.tar.gz | |
Merge branch 'jk/diff-do-not-reuse-wtf-needs-cleaning' into maint
There is an optimization used in "git diff $treeA $treeB" to borrow
an already checked-out copy in the working tree when it is known to
be the same as the blob being compared, expecting that open/mmap of
such a file is faster than reading it from the object store, which
involves inflating and applying delta.  This however kicked in even
when the checked-out copy needs to go through the convert-to-git
conversion (including the clean filter), which defeats the whole
point of the optimization.  The optimization has been disabled when
the conversion is necessary.
* jk/diff-do-not-reuse-wtf-needs-cleaning:
  diff: do not reuse worktree files that need "clean" conversion
Diffstat (limited to 'diff.c')
| -rw-r--r-- | diff.c | 7 | 
1 files changed, 7 insertions, 0 deletions
| @@ -2682,6 +2682,13 @@ static int reuse_worktree_file(const char *name, const unsigned char *sha1, int  	if (!FAST_WORKING_DIRECTORY && !want_file && has_sha1_pack(sha1))  		return 0; +	/* +	 * Similarly, if we'd have to convert the file contents anyway, that +	 * makes the optimization not worthwhile. +	 */ +	if (!want_file && would_convert_to_git(name)) +		return 0; +  	len = strlen(name);  	pos = cache_name_pos(name, len);  	if (pos < 0) | 
