| #!/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 |
| |