feat(git): Use Ediff
This commit is contained in:
@@ -21,6 +21,19 @@ in {
|
|||||||
enable = true;
|
enable = true;
|
||||||
userEmail = my-email;
|
userEmail = my-email;
|
||||||
userName = my-name;
|
userName = my-name;
|
||||||
|
extraConfig = {
|
||||||
|
diff = {
|
||||||
|
tool = "ediff";
|
||||||
|
guitool = "ediff";
|
||||||
|
};
|
||||||
|
difftool.ediff.cmd =
|
||||||
|
"${../../../../scripts/ediff/ediff} $LOCAL $REMOTE $MERGED";
|
||||||
|
merge.tool = "ediff";
|
||||||
|
mergetool.ediff = {
|
||||||
|
cmd = "${../../../../scripts/ediff/ediff} $LOCAL $REMOTE $MERGED";
|
||||||
|
trustExitCode = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
home.shellAliases = {
|
home.shellAliases = {
|
||||||
|
|||||||
59
scripts/ediff/ediff
Normal file
59
scripts/ediff/ediff
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
#!/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
|
||||||
Reference in New Issue
Block a user