Skip to main content

make git_diff_wrapper

reference site: http://technotales.wordpress.com/2009/05/17/git-diff-with-vimdiff/

In fact, they need not be directly coded.
Just get git-difftool.
However, the following code would be useful to add what they want.

1) ~/.gitconfig
[diff]
  external = git_diff_wrapper
[pager]
  diff =

2) ~/bin/git_diff_wrapper

#!/bin/sh
# 1: orginal filename
# 2: left temporary filename
# 3:
# 4:
# 5: right temporary filename

DIR_BASENAME=`basename ${PWD}`
G_SZ_FN_LOG_FILE=/tmp/gitdiff_${DIR_BASENAME}_${PPID}.log
G_SZ_FN_TMP_ENV_FILE=/tmp/gitdiff_${DIR_BASENAME}_${PPID}.env
G_SZ_FN_RESUME_FILE="" 

DIFF_WC="" 
STIME=`date +%Y%m%d_%H%M%S`
SZ_TYPE="" 
DEF_ENV_MODE_NONE=0
DEF_ENV_MODE_SKIP=1
DEF_ENV_MODE_PROC=2
DEF_ENV_MODE_EXIT=3
G_SZ_ENV_MODE=${DEF_ENV_MODE_NONE}

if [ -f ${G_SZ_FN_TMP_ENV_FILE} ]; then
  G_SZ_ENV_MODE=`cat ${G_SZ_FN_TMP_ENV_FILE}`
fi

if [ ${G_SZ_ENV_MODE} == ${DEF_ENV_MODE_EXIT} ];then
  kill -9 ${PPID}
  exit
fi

if [ "$2" == "/dev/null" ]; then
  SZ_TYPE="L_NULL" 
elif [ "$5" == "/dev/null" ]; then
  SZ_TYPE="R_NULL" 
else
  if [ "${1}" == "${G_SZ_FN_RESUME_FILE}" ]; then
    G_SZ_ENV_MODE=${DEF_ENV_MODE_PROC}
    echo "${DEF_ENV_MODE_PROC}" > ${G_SZ_FN_TMP_ENV_FILE}
  elif [ "${G_SZ_FN_RESUME_FILE}" == "" ]; then
    G_SZ_ENV_MODE=${DEF_ENV_MODE_PROC}
  else
    if [ ${G_SZ_ENV_MODE} == ${DEF_ENV_MODE_NONE} ]; then
      G_SZ_ENV_MODE=${DEF_ENV_MODE_SKIP}
      echo "${G_SZ_ENV_MODE}" > ${G_SZ_FN_TMP_ENV_FILE}
    fi
  fi
  if [ "${G_SZ_ENV_MODE}" == "${DEF_ENV_MODE_SKIP}" ]; then
    SZ_TYPE="F_SKIP" 
  else
    DIFF_WC=`diff --strip-trailing-cr "$2" "$5" |wc -l`
    if [ ${DIFF_WC} -eq 0 ]; then
      SZ_TYPE="F_SAME" 
    else
      SZ_TYPE="S_DIFF" 
      echo "${STIME} ${SZ_TYPE} ${1} ${2} ${5} wc(${DIFF_WC})" >> ${G_SZ_FN_LOG_FILE}
      vimdiff "$2" "$5" 
      STIME=`date +%Y%m%d_%H%M%S`
      SZ_TYPE="E_DIFF" 
      echo "${STIME} ${SZ_TYPE} ${1} ${2} ${5} wc(${DIFF_WC})" >> ${G_SZ_FN_LOG_FILE}
      SZ_TYPE="" 
    fi
  fi
fi

if [ "${SZ_TYPE}" != "" ]; then
  echo "${STIME} ${SZ_TYPE} ${1} ${2} ${5} wc(${DIFF_WC})" >> ${G_SZ_FN_LOG_FILE}
fi

Comments