mirror of
https://github.com/facebook/sapling.git
synced 2024-10-13 02:07:31 +03:00
20c45a5f3d
We want to support editors with parameters, eg EDITOR="vim -O" or whatever. So remove the quotes from around $ED and assume that the editor variable is properly escaped already.
59 lines
1.4 KiB
Bash
Executable File
59 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# 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
|
|
|
|
FILE="$1"
|
|
|
|
getlines() {
|
|
grep -n "^<<<<<<" "$FILE" | cut -f1 -d:
|
|
}
|
|
|
|
# editor preference loosely based on https://mercurial-scm.org/wiki/editor
|
|
# hg showconfig is at the bottom though, since it's slow to run (0.15 seconds)
|
|
ED="$HGEDITOR"
|
|
if [ "$ED" = "" ] ; then
|
|
ED="$VISUAL"
|
|
fi
|
|
if [ "$ED" = "" ] ; then
|
|
ED="$EDITOR"
|
|
fi
|
|
if [ "$ED" = "" ] ; then
|
|
ED="$(hg showconfig ui.editor)"
|
|
fi
|
|
if [ "$ED" = "" ] ; then
|
|
echo "merge failed - unable to find editor"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$ED" = "emacs" ] || [ "$ED" = "nano" ] || [ "$ED" = "vim" ] ; then
|
|
FIRSTLINE="$(getlines | head -n 1)"
|
|
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
|
|
$ED "+$FIRSTLINE" "$FILE"
|
|
PREVIOUSLINE="$FIRSTLINE"
|
|
FIRSTLINE="$(getlines | head -n 1)"
|
|
done
|
|
else
|
|
$ED "$FILE"
|
|
fi
|
|
|
|
# get the line numbers of the remaining conflicts
|
|
CONFLICTS="$(getlines | sed ':a;N;$!ba;s/\n/, /g')"
|
|
if [ ! "$CONFLICTS" = "" ] ; then
|
|
echo "merge failed - resolve the conflicts (line $CONFLICTS) then use 'hg resolve --mark'"
|
|
exit 1
|
|
fi
|
|
|
|
exit 0
|