git-merge-one-file-scripton commit [PATCH] show-diff.c: simplify show_diff_empty. (8f3671d)
   1#!/bin/sh
   2#
   3# This is the git merge script, called with
   4#
   5#   $1 - original file SHA1 (or empty)
   6#   $2 - file in branch1 SHA1 (or empty)
   7#   $3 - file in branch2 SHA1 (or empty)
   8#   $4 - pathname in repository
   9#
  10#
  11# Handle some trivial cases.. The _really_ trivial cases have
  12# been handled already by read-tree, but that one doesn't
  13# do any merges that migth change the tree layout
  14#
  15
  16case "${1:-.}${2:-.}${3:-.}" in
  17#
  18# deleted in both, or deleted in one and unchanged in the other
  19#
  20"$1.." | "$1.$1" | "$1$1.")
  21        rm -f -- "$4"
  22        update-cache --remove -- "$4"
  23        exit 0
  24        ;;
  25
  26#
  27# added in one, or added identically in both
  28#
  29".$2." | "..$3" | ".$2$2")
  30        mv $(unpack-file "${2:-$3}") $4
  31        update-cache --add -- $4
  32        exit 0
  33        ;;
  34
  35#
  36# Modified in both, but differently ;(
  37#
  38"$1$2$3")
  39        echo "Auto-merging $4"
  40        orig=$(unpack-file $1)
  41        src1=$(unpack-file $2)
  42        src2=$(unpack-file $3)
  43        merge "$src2" "$orig" "$src1" || echo Leaving conflict merge in $src2 && exit 1
  44        cp "$src2" "$4" && update-cache --add -- "$4" && exit 0
  45        ;;
  46
  47*)
  48        echo "Not handling case $1 -> $2 -> $3"
  49        ;;
  50esac
  51exit 1