mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 00:14:35 +03:00
5c09f2f56b
Use the env binary to figure out the correct bash to use. Certain systems ships with an ancient version of bash, but the user might have installed a newer one that is earlier in $PATH. For example the current version of Mac OS X ships version 3.2.51 of bash, which does not understand new fancy builtins such as readarray. A user might install a newer version of bash, use that as their shell and add that path before bin.
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 http://mercurial.selenic.com/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
|