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