##// END OF EJS Templates
revlog: add an aggressivemergedelta option...
revlog: add an aggressivemergedelta option This adds an option for delta'ing against both p1 and p2 when applying merge revisions and picking whichever is smallest. Some before and after stats on manifest.d size: internal large repo: before: 1.2 GB after: 930 MB mozilla-central: before: 261 MB after: 92 MB

File last commit:

r20831:864c56cb default
r26118:049005de default
Show More
editmerge
58 lines | 1.4 KiB | text/plain | TextLexer
#!/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