editmerge
58 lines
| 1.4 KiB
| text/plain
|
TextLexer
/ contrib / editmerge
Olle Lundberg
|
r20831 | #!/usr/bin/env bash | ||
Durham Goode
|
r20010 | # A simple script for opening merge conflicts in the editor. | ||
# Use the following Mercurial settings to enable it. | ||||
# | ||||
# [ui] | ||||
# merge = editmerge | ||||
# | ||||
# [merge-tools] | ||||
# editmerge.args=$output | ||||
# editmerge.check=changed | ||||
# editmerge.premerge=keep | ||||
Ryan McElroy
|
r26771 | FILE="$1" | ||
Durham Goode
|
r20010 | |||
getlines() { | ||||
Ryan McElroy
|
r26771 | grep -n "^<<<<<<" "$FILE" | cut -f1 -d: | ||
Durham Goode
|
r20010 | } | ||
Matt Mackall
|
r26421 | # editor preference loosely based on https://mercurial-scm.org/wiki/editor | ||
Durham Goode
|
r20010 | # hg showconfig is at the bottom though, since it's slow to run (0.15 seconds) | ||
Ryan McElroy
|
r26771 | ED="$HGEDITOR" | ||
Durham Goode
|
r20010 | if [ "$ED" = "" ] ; then | ||
Ryan McElroy
|
r26771 | ED="$VISUAL" | ||
Durham Goode
|
r20010 | fi | ||
if [ "$ED" = "" ] ; then | ||||
Ryan McElroy
|
r26771 | ED="$EDITOR" | ||
Durham Goode
|
r20010 | fi | ||
if [ "$ED" = "" ] ; then | ||||
Ryan McElroy
|
r26771 | ED="$(hg showconfig ui.editor)" | ||
Durham Goode
|
r20010 | fi | ||
if [ "$ED" = "" ] ; then | ||||
echo "merge failed - unable to find editor" | ||||
exit 1 | ||||
fi | ||||
if [ "$ED" = "emacs" ] || [ "$ED" = "nano" ] || [ "$ED" = "vim" ] ; then | ||||
Ryan McElroy
|
r26771 | FIRSTLINE="$(getlines | head -n 1)" | ||
Durham Goode
|
r20010 | PREVIOUSLINE="" | ||
# open the editor to the first conflict until there are no more | ||||
# or the user stops editing the file | ||||
while [ ! "$FIRSTLINE" = "" ] && [ ! "$FIRSTLINE" = "$PREVIOUSLINE" ] ; do | ||||
Ryan McElroy
|
r26804 | $ED "+$FIRSTLINE" "$FILE" | ||
Ryan McElroy
|
r26771 | PREVIOUSLINE="$FIRSTLINE" | ||
FIRSTLINE="$(getlines | head -n 1)" | ||||
Durham Goode
|
r20010 | done | ||
else | ||||
Ryan McElroy
|
r26771 | $ED "$FILE" | ||
Durham Goode
|
r20010 | fi | ||
# get the line numbers of the remaining conflicts | ||||
Ryan McElroy
|
r26771 | CONFLICTS="$(getlines | sed ':a;N;$!ba;s/\n/, /g')" | ||
Durham Goode
|
r20010 | if [ ! "$CONFLICTS" = "" ] ; then | ||
echo "merge failed - resolve the conflicts (line $CONFLICTS) then use 'hg resolve --mark'" | ||||
exit 1 | ||||
fi | ||||
exit 0 | ||||