60 lines
1.5 KiB
Bash
60 lines
1.5 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# Modified from https://github.com/paulotome/emacstool
|
|
|
|
# test args
|
|
if [ ! ${#} -ge 2 ]; then
|
|
echo 1>&2 "Usage: ${0} LOCAL REMOTE [MERGED BASE]"
|
|
echo 1>&2 " (LOCAL, REMOTE, MERGED, BASE can be provided by \`git mergetool'.)"
|
|
exit 1
|
|
fi
|
|
|
|
# tools
|
|
emacsclient=$(which emacsclient)
|
|
basename=$(which basename)
|
|
cp=$(which cp)
|
|
mktemp=$(which mktemp)
|
|
|
|
# args
|
|
_LOCAL=${1}
|
|
_REMOTE=${2}
|
|
if [ "${3}" ] ; then
|
|
_MERGED=${3}
|
|
else
|
|
_MERGED=${_REMOTE}
|
|
fi
|
|
if [ "${4}" ] && [ -r "${4}" ] ; then
|
|
_BASE=${4}
|
|
_EDIFF=ediff-merge-files-with-ancestor
|
|
_EVAL="${_EDIFF} \"${_LOCAL}\" \"${_REMOTE}\" \"${_BASE}\" nil \"${_MERGED}\""
|
|
elif [ "${_REMOTE}" = "${_MERGED}" ] ; then
|
|
_EDIFF=ediff
|
|
_EVAL="${_EDIFF} \"${_LOCAL}\" \"${_REMOTE}\""
|
|
else
|
|
_EDIFF=ediff-merge-files
|
|
_EVAL="${_EDIFF} \"${_LOCAL}\" \"${_REMOTE}\" nil \"${_MERGED}\""
|
|
fi
|
|
|
|
# console vs. X
|
|
if [ "${TERM}" = "linux" ]; then
|
|
unset DISPLAY
|
|
emacsclientOPTS="-t"
|
|
else
|
|
emacsclientOPTS="-c"
|
|
fi
|
|
|
|
# run emacsclient
|
|
${emacsclient} ${emacsclientOPTS} -a "" -e "(${_EVAL})" 2>&1
|
|
|
|
# check modified file
|
|
if [ ! "$(grep -Ec '^(<<<<<<<|=======|>>>>>>>|####### Ancestor)' "${_MERGED}")" = 0 ]; then
|
|
_MERGEDSAVE=$(${mktemp} --tmpdir "$(${basename} "${_MERGED}")".XXXXXXXXXX)
|
|
${cp} "${_MERGED}" "${_MERGEDSAVE}"
|
|
echo 1>&2 "Oops! Conflict markers detected in $_MERGED."
|
|
echo 1>&2 "Saved your changes to ${_MERGEDSAVE}"
|
|
echo 1>&2 "Exiting with code 1."
|
|
exit 1
|
|
fi
|
|
|
|
exit 0
|