|  | #!/bin/sh | 
|  | # Copyright (C) 2005 Junio C Hamano | 
|  | # | 
|  | # This script is designed to emulate what the built-in diff driver | 
|  | # does when set as GIT_EXTERNAL_SCRIPT. | 
|  |  | 
|  | case "$#" in | 
|  | 1) | 
|  | echo "* Unmerged path $1" | 
|  | exit 0 ;; | 
|  | *) | 
|  | name1="$1" tmp1="$2" hex1="$3" mode1="$4" tmp2="$5" hex2="$6" mode2="$7" | 
|  | case "$#" in | 
|  | 7) | 
|  | name2="$name1" ;; | 
|  | 9) | 
|  | name2="$8" xfrm_msg="$9" ;; | 
|  | esac ;; | 
|  | esac | 
|  |  | 
|  | show_create () { | 
|  | name_="$1" tmp_="$2" hex_="$3" mode_="$4" | 
|  | echo "diff --git a/$name_ b/$name_" | 
|  | echo "new file mode $mode_" | 
|  | diff ${GIT_DIFF_OPTS-'-pu'} -L /dev/null -L "b/$name_" /dev/null "$tmp_" | 
|  | } | 
|  |  | 
|  | show_delete () { | 
|  | name_="$1" tmp_="$2" hex_="$3" mode_="$4" | 
|  | echo "diff --git a/$name_ b/$name_" | 
|  | echo "deleted file mode $mode_" | 
|  | diff ${GIT_DIFF_OPTS-'-pu'} -L "a/$name_" -L /dev/null "$tmp_" /dev/null | 
|  | } | 
|  |  | 
|  | case "$mode1" in | 
|  | 120*) type1=l ;; | 
|  | 100*) type1=f ;; | 
|  | .)    show_create "$name2" "$tmp2" "$hex2" "$mode2" | 
|  | exit 0 ;; | 
|  | esac | 
|  | case "$mode2" in | 
|  | 120*) type2=l ;; | 
|  | 100*) type2=f ;; | 
|  | .)    show_delete "$name1" "$tmp1" "$hex1" "$mode1" | 
|  | exit 0 ;; | 
|  | esac | 
|  |  | 
|  | if test "$type1" != "$type2" | 
|  | then | 
|  | show_delete "$name1" "$tmp1" "$hex1" "$mode1" | 
|  | show_create "$name2" "$tmp2" "$hex2" "$mode2" | 
|  | exit 0 | 
|  | fi | 
|  |  | 
|  | echo diff --git "a/$name1" "b/$name2" | 
|  | if test "$mode1" != "$mode2" | 
|  | then | 
|  | echo "old mode $mode1" | 
|  | echo "new mode $mode2" | 
|  | if test "$xfrm_msg" != "" | 
|  | then | 
|  | echo "$xfrm_msg" | 
|  | fi | 
|  | fi | 
|  | diff ${GIT_DIFF_OPTS-'-pu'} -L "a/$name1" -L "b/$name2" "$tmp1" "$tmp2" | 
|  | exit 0 | 
|  |  |