Skip to content
  • Jeff King's avatar
    merge-file: clamp exit code to maximum 127 · e34f8027
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    Git-merge-file is documented to return one of three exit
    codes:
    
      - zero means the merge was successful
    
      - a negative number means an error occurred
    
      - a positive number indicates the number of conflicts
    
    Unfortunately, this all gets stuffed into an 8-bit return
    code. Which means that if you have 256 conflicts, this wraps
    to zero, and the merge appears to succeed (and commits a
    blob full of conflict-marker cruft!).
    
    This patch clamps the return value to a maximum of 127,
    which we should be able to safely represent everywhere. This
    also leaves 128-255 for other values. Shells (and some parts
    of git) will typically represent signal death as 128 plus
    the signal number. And negative values are typically coerced
    to an 8-bit unsigned value (so "return -1" ends up as 255).
    
    Technically negative returns have the same problem (e.g.,
    "-256" wraps back to 0), but this is not a problem in
    practice, as the only negative value we use is "-1".
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    e34f8027