Skip to content
  • Jeff King's avatar
    add-interactive: fix bogus diff header line ordering · e1327ed5
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    When we look at a patch for adding hunks interactively, we
    first split it into a header and a list of hunks. Some of
    the header lines, such as mode changes and deletion, however,
    become their own selectable hunks. Later when we reassemble
    the patch, we simply concatenate the header and the selected
    hunks. This leads to patches like this:
    
      diff --git a/file b/file
      index d95f3ad..0000000
      --- a/file
      +++ /dev/null
      deleted file mode 100644
      @@ -1 +0,0 @@
      -content
    
    Notice how the deletion comes _after_ the ---/+++ lines,
    when it should come before.
    
    In many cases, we can get away with this as git-apply
    accepts the slightly bogus input. However, in the specific
    case of a deletion line that is being applied via "apply
    -R", this malformed patch triggers an assert in git-apply.
    This comes up when discarding a deletion via "git checkout
    -p".
    
    Rather than try to make git-apply accept our odd input,
    let's just reassemble the patch in the correct order.
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    e1327ed5