Skip to content
  • Junio C Hamano's avatar
    [PATCH] Rename/copy detection fix. · f7c1512a
    Junio C Hamano authored
    
    
    The rename/copy detection logic in earlier round was only good
    enough to show patch output and discussion on the mailing list
    about the diff-raw format updates revealed many problems with
    it.  This patch fixes all the ones known to me, without making
    things I want to do later impossible, mostly related to patch
    reordering.
    
     (1) Earlier rename/copy detector determined which one is rename
         and which one is copy too early, which made it impossible
         to later introduce diffcore transformers to reorder
         patches.  This patch fixes it by moving that logic to the
         very end of the processing.
    
     (2) Earlier output routine diff_flush() was pruning all the
         "no-change" entries indiscriminatingly.  This was done due
         to my false assumption that one of the requirements in the
         diff-raw output was not to show such an entry (which
         resulted in my incorrect comment about "diff-helper never
         being able to be equivalent to built-in diff driver").  My
         special thanks go to Linus for correcting me about this.
         When we produce diff-raw output, for the downstream to be
         able to tell renames from copies, sometimes it _is_
         necessary to output "no-change" entries, and this patch
         adds diffcore_prune() function for doing it.
    
     (3) Earlier diff_filepair structure was trying to be not too
         specific about rename/copy operations, but the purpose of
         the structure was to record one or two paths, which _was_
         indeed about rename/copy.  This patch discards xfrm_msg
         field which was trying to be generic for this wrong reason,
         and introduces a couple of fields (rename_score and
         rename_rank) that are explicitly specific to rename/copy
         logic.  One thing to note is that the information in a
         single diff_filepair structure _still_ does not distinguish
         renames from copies, and it is deliberately so.  This is to
         allow patches to be reordered in later stages.
    
     (4) This patch also adds some tests about diff-raw format
         output and makes sure that necessary "no-change" entries
         appear on the output.
    
    Signed-off-by: default avatarJunio C Hamano <junkio@cox.net>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    f7c1512a