diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-04 12:07:47 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-12-05 10:54:17 -0800 |
commit | 77cd6ab62108c2d4ddd4343abd9bae17c406be4b (patch) | |
tree | 0c3e054326d70a5b75bd9b7e5c7bbaf525c1cb70 /builtin-for-each-ref.c | |
parent | 952dfc6944b29582482ff50a85c04879406c06ba (diff) | |
download | git-77cd6ab62108c2d4ddd4343abd9bae17c406be4b.tar.gz git-77cd6ab62108c2d4ddd4343abd9bae17c406be4b.tar.xz |
Fix diff -B/--dirstat miscounting of newly added contents
What used to happen is that diffcore_count_changes() simply ignored any
hashes in the destination that didn't match hashes in the source. EXCEPT
if the source hash didn't exist at all, in which case it would count _one_
destination hash that happened to have the "next" hash value. As a
consequence, newly added material was often undercounted, making output
from --dirstat and "complete rewrite" detection used by -B unrelialble.
This changes it so that:
- whenever it bypasses a destination hash (because it doesn't match a
source), it counts the bytes associated with that as "literal added"
- at the end (once we have used up all the source hashes), we do the same
thing with the remaining destination hashes.
- when hashes do match, and we use the difference in counts as a value,
we also use up that destination hash entry (the 'd++').
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-for-each-ref.c')
0 files changed, 0 insertions, 0 deletions