Re: git-diff-tree rename detection bug
- From
Wayne Scott <wsc9tt@gmail.com>
- Date
- Sep 14, 2005, 18:40 UTC
- Message-ID
- <59a6e583050914114054b1564d@mail.gmail.com>
- In-Reply-To
- <7vwtljjzc3.fsf@assigned-by-dhcp.cox.net>
On 9/14/05, Junio C Hamano <junkio@cox.net> wrote:
Show 38 quoted lines
> Wayne Scott <wsc9tt@gmail.com> writes: > > > Look at the diffs between ad6571a78ac74e9fa27e581834709067dba459af and > > it's parent with and without rename detection enabled. (In linux-2.6 > > git tree) > > > Notice how the the fact that include/asm-ppc64/termios.h is > > deleted gets lost? Looks broken to me. > > I suspect that what is deleted is not asm-ppc64/termios.h but > asm-ppc/termios.h. The below is an output without grep which > seems to confuse things. > > $ git-diff-tree -r -M ad6571a78ac74e9fa27e581834709067dba459af | > sed -ne 's/^.* \([AMCRDU]\)/\1/p' > R092 include/asm-ppc64/mman.h include/asm-powerpc/mman.h > R097 include/asm-ppc64/termbits.h include/asm-powerpc/termbits.h > R098 include/asm-ppc64/termios.h include/asm-powerpc/termios.h > D include/asm-ppc/mman.h > D include/asm-ppc/termbits.h > D include/asm-ppc/termios.h > > $ git-diff-tree -r ad6571a78ac74e9fa27e581834709067dba459af | > sed -ne 's/^.* \([AMCRDU]\)/\1/p' > A include/asm-powerpc/mman.h > A include/asm-powerpc/termbits.h > A include/asm-powerpc/termios.h > D include/asm-ppc/mman.h > D include/asm-ppc/termbits.h > D include/asm-ppc/termios.h > D include/asm-ppc64/mman.h > D include/asm-ppc64/termbits.h > D include/asm-ppc64/termios.h > > The first 3 A and last 3 D are accounted for in the -M output as > renames from asm-ppc64 to asm-powerpc. Middle 3 D from asm-ppc > are shown in the -M output. So I do not think we are losing > anything. Am I missing something?
Odd. I get the same answer on my x86 box: $ git-diff-tree -r -M ad6571a78ac74e9fa27e581834709067dba459af | sed -ne 's/^.* \([AMCRDU]\)/\1/p' R092 include/asm-ppc64/mman.h include/asm-powerpc/mman.h R097 include/asm-ppc64/termbits.h include/asm-powerpc/termbits.h R098 include/asm-ppc64/termios.h include/asm-powerpc/termios.h D include/asm-ppc/mman.h D include/asm-ppc/termbits.h D include/asm-ppc/termios.h
But here is the output on my quad xeon running in 64-bit mode: (fedora core 2)
$ git-diff-tree -r -M ad6571a78ac74e9fa27e581834709067dba459af | sed -ne 's/^.* \([AMCRDU]\)/\1/p' R092 include/asm-ppc64/mman.h include/asm-powerpc/mman.h R097 include/asm-ppc64/termbits.h include/asm-powerpc/termbits.h A include/asm-powerpc/termios.h D include/asm-ppc/mman.h D include/asm-ppc/termbits.h D include/asm-ppc/termios.h
This is the same version of git both rebuilt just for this test.
However, I noticed a whole collection of errors from valgrind when I run this command line:
==13457== Invalid read of size 4 ==13457== at 0x805402C: locate_rename_dst (diffcore-rename.c:28) ==13457== by 0x805464B: diffcore_rename (diffcore-rename.c:356) ==13457== by 0x805249D: diffcore_std (diff.c:1093) ==13457== by 0x8049B48: call_diff_flush (diff-tree.c:273) ==13457== by 0x804A225: diff_tree_sha1_top (diff-tree.c:298) ==13457== by 0x804A30B: diff_tree_commit (diff-tree.c:363) ==13457== by 0x804A884: main (diff-tree.c:551) ==13457== Address 0x1BBD781C is 20 bytes inside a block of size 71 free'd ==13457== at 0x1B9003C3: free (vg_replace_malloc.c:235) ==13457== by 0x805205B: diff_free_filepair (diff.c:775) ==13457== by 0x805422A: diffcore_rename (diffcore-rename.c:415) ==13457== by 0x805249D: diffcore_std (diff.c:1093) ==13457== by 0x8049B48: call_diff_flush (diff-tree.c:273) ==13457== by 0x804A225: diff_tree_sha1_top (diff-tree.c:298) ==13457== by 0x804A30B: diff_tree_commit (diff-tree.c:363) ==13457== by 0x804A884: main (diff-tree.c:551) ==13457== ==13457== Invalid read of size 1 ==13457== at 0x1B90140D: strcmp (mac_replace_strmem.c:332) ==13457== by 0x8054038: locate_rename_dst (diffcore-rename.c:28) ==13457== by 0x805464B: diffcore_rename (diffcore-rename.c:356) ==13457== by 0x805249D: diffcore_std (diff.c:1093) ==13457== by 0x8049B48: call_diff_flush (diff-tree.c:273) ==13457== by 0x804A225: diff_tree_sha1_top (diff-tree.c:298) ==13457== by 0x804A30B: diff_tree_commit (diff-tree.c:363) ==13457== by 0x804A884: main (diff-tree.c:551) ==13457== Address 0x1BBD7830 is 40 bytes inside a block of size 71 free'd ==13457== at 0x1B9003C3: free (vg_replace_malloc.c:235) ==13457== by 0x805205B: diff_free_filepair (diff.c:775) ==13457== by 0x805422A: diffcore_rename (diffcore-rename.c:415) ==13457== by 0x805249D: diffcore_std (diff.c:1093) ==13457== by 0x8049B48: call_diff_flush (diff-tree.c:273) ==13457== by 0x804A225: diff_tree_sha1_top (diff-tree.c:298) ==13457== by 0x804A30B: diff_tree_commit (diff-tree.c:363) ==13457== by 0x804A884: main (diff-tree.c:551) ==13457== ==13457== Invalid read of size 1 ==13457== at 0x1B901423: strcmp (mac_replace_strmem.c:332) ==13457== by 0x8054038: locate_rename_dst (diffcore-rename.c:28) ==13457== by 0x805464B: diffcore_rename (diffcore-rename.c:356) ==13457== by 0x805249D: diffcore_std (diff.c:1093) ==13457== by 0x8049B48: call_diff_flush (diff-tree.c:273) ==13457== by 0x804A225: diff_tree_sha1_top (diff-tree.c:298) ==13457== by 0x804A30B: diff_tree_commit (diff-tree.c:363) ==13457== by 0x804A884: main (diff-tree.c:551) ==13504== Invalid read of size 4 ==13504== at 0x805402C: locate_rename_dst (diffcore-rename.c:28) ==13504== by 0x805464B: diffcore_rename (diffcore-rename.c:356) ==13504== by 0x805249D: diffcore_std (diff.c:1093) ==13504== by 0x8049B48: call_diff_flush (diff-tree.c:273) ==13504== by 0x804A225: diff_tree_sha1_top (diff-tree.c:298) ==13504== by 0x804A30B: diff_tree_commit (diff-tree.c:363) ==13504== by 0x804A884: main (diff-tree.c:551) ==13504== Address 0x1BBD781C is 20 bytes inside a block of size 71 free'd ==13504== at 0x1B9003C3: free (vg_replace_malloc.c:235) ==13504== by 0x805205B: diff_free_filepair (diff.c:775) ==13504== by 0x805422A: diffcore_rename (diffcore-rename.c:415) ==13504== by 0x805249D: diffcore_std (diff.c:1093) ==13504== by 0x8049B48: call_diff_flush (diff-tree.c:273) ==13504== by 0x804A225: diff_tree_sha1_top (diff-tree.c:298) ==13504== by 0x804A30B: diff_tree_commit (diff-tree.c:363) ==13504== by 0x804A884: main (diff-tree.c:551) ==13504== ==13504== Invalid read of size 1 ==13504== at 0x1B90140D: strcmp (mac_replace_strmem.c:332) ==13504== by 0x8054038: locate_rename_dst (diffcore-rename.c:28) ==13504== by 0x805464B: diffcore_rename (diffcore-rename.c:356) ==13504== by 0x805249D: diffcore_std (diff.c:1093) ==13504== by 0x8049B48: call_diff_flush (diff-tree.c:273) ==13504== by 0x804A225: diff_tree_sha1_top (diff-tree.c:298) ==13504== by 0x804A30B: diff_tree_commit (diff-tree.c:363) ==13504== by 0x804A884: main (diff-tree.c:551) ==13504== Address 0x1BBD7830 is 40 bytes inside a block of size 71 free'd ==13504== at 0x1B9003C3: free (vg_replace_malloc.c:235) ==13504== by 0x805205B: diff_free_filepair (diff.c:775) ==13504== by 0x805422A: diffcore_rename (diffcore-rename.c:415) ==13504== by 0x805249D: diffcore_std (diff.c:1093) ==13504== by 0x8049B48: call_diff_flush (diff-tree.c:273) ==13504== by 0x804A225: diff_tree_sha1_top (diff-tree.c:298) ==13504== by 0x804A30B: diff_tree_commit (diff-tree.c:363) ==13504== by 0x804A884: main (diff-tree.c:551) ==13504== ==13504== Invalid read of size 1 ==13504== at 0x1B901423: strcmp (mac_replace_strmem.c:332) ==13504== by 0x8054038: locate_rename_dst (diffcore-rename.c:28) ==13504== by 0x805464B: diffcore_rename (diffcore-rename.c:356) ==13504== by 0x805249D: diffcore_std (diff.c:1093) ==13504== by 0x8049B48: call_diff_flush (diff-tree.c:273) ==13504== by 0x804A225: diff_tree_sha1_top (diff-tree.c:298) ==13504== by 0x804A30B: diff_tree_commit (diff-tree.c:363) ==13504== by 0x804A884: main (diff-tree.c:551) ==13504== Address 0x1BBD7831 is 41 bytes inside a block of size 71 free'd ==13504== at 0x1B9003C3: free (vg_replace_malloc.c:235) ==13504== by 0x805205B: diff_free_filepair (diff.c:775) ==13504== by 0x805422A: diffcore_rename (diffcore-rename.c:415) ==13504== by 0x805249D: diffcore_std (diff.c:1093) ==13504== by 0x8049B48: call_diff_flush (diff-tree.c:273) ==13504== by 0x804A225: diff_tree_sha1_top (diff-tree.c:298) ==13504== by 0x804A30B: diff_tree_commit (diff-tree.c:363) ==13504== by 0x804A884: main (diff-tree.c:551) ==13504==
Perhaps that explains the difference.
-Wayne